From d6df495d939c8fd3153432fdbd3c71480ac7b67e Mon Sep 17 00:00:00 2001 From: acanas Date: Sat, 6 Apr 2024 21:23:53 +0200 Subject: [PATCH] Version 23.73: Apr 06, 2024 Code refactoring related to new type Usr_ICan_t. --- swad_API.c | 30 +- swad_ID.c | 317 +++-- swad_account.c | 80 +- swad_admin.c | 114 +- swad_agenda.c | 46 +- swad_attendance.c | 61 +- swad_browser.c | 2435 +++++++++++++++++---------------- swad_call_for_exam_database.c | 16 +- swad_center.c | 108 +- swad_changelog.h | 3 +- swad_connected.c | 4 +- swad_course.c | 74 +- swad_degree.c | 106 +- swad_enrolment.c | 57 +- swad_exam_database.c | 2 - swad_exam_print.c | 134 +- swad_exam_result.c | 461 ++++--- swad_exam_session.c | 78 +- swad_exam_set.c | 52 +- swad_forum.c | 52 +- swad_game.c | 40 +- swad_group.c | 216 +-- swad_info.c | 140 +- swad_institution.c | 44 +- swad_mail.c | 148 +- swad_match.c | 58 +- swad_match_result.c | 225 +-- swad_nickname.c | 54 +- swad_password.c | 18 +- swad_photo.c | 49 +- swad_project.c | 116 +- swad_record.c | 88 +- swad_rubric.c | 6 +- swad_test_print.c | 436 +++--- swad_timeline_user.c | 1 - 35 files changed, 3150 insertions(+), 2719 deletions(-) diff --git a/swad_API.c b/swad_API.c index 000534ef3..019f0e0a5 100644 --- a/swad_API.c +++ b/swad_API.c @@ -5261,21 +5261,23 @@ int swad__getLastLocation (struct soap *soap, The other user does not have to share any course with me, 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)) { - /***** Get list of locations *****/ - NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode); - API_GetLocationData (soap, - &(getLastLocationOut->location), - &(getLastLocationOut->checkinTime), // Get check in time - &mysql_res,NumLocs); - } - else - { - /* I can not see user's location ==> reset output */ - API_ResetLocation (soap, &(getLastLocationOut->location)); - getLastLocationOut->checkinTime = 0L; - } + case Usr_I_CAN: + /***** Get list of locations *****/ + NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode); + API_GetLocationData (soap, + &(getLastLocationOut->location), + &(getLastLocationOut->checkinTime), // Get check in time + &mysql_res,NumLocs); + break; + case Usr_I_CAN_NOT: + default: + /* I can not see user's location ==> reset output */ + API_ResetLocation (soap, &(getLastLocationOut->location)); + getLastLocationOut->checkinTime = 0L; + break; + } return SOAP_OK; } diff --git a/swad_ID.c b/swad_ID.c index 5999b2c35..4f4fa1fc7 100644 --- a/swad_ID.c +++ b/swad_ID.c @@ -328,14 +328,21 @@ void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor) UsrDat->IDs.List[NumID].Confirmed ? "USR_ID_C" : "USR_ID_NC", The_GetSuffix ()); - if (ICanSeeUsrID == Usr_I_CAN) - HTM_Txt (UsrDat->IDs.List[NumID].ID); - else - HTM_Txt ("********"); + switch (ICanSeeUsrID) + { + case Usr_I_CAN: + HTM_Txt (UsrDat->IDs.List[NumID].ID); + break; + case Usr_I_CAN_NOT: + default: + HTM_Txt ("********"); + break; + } HTM_SPAN_End (); /* 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); } } @@ -691,22 +698,24 @@ void ID_RemoveOtherUsrID (void) { /***** Get other user's code from form and get user's data *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Remove user's ID *****/ - ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat, - Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); + case Usr_I_CAN: + /***** Remove user's ID *****/ + ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat, + Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); - /***** Update list of IDs *****/ - ID_GetListIDsFromUsrCod (&Gbl.Usrs.Other.UsrDat); + /***** Update list of IDs *****/ + ID_GetListIDsFromUsrCod (&Gbl.Usrs.Other.UsrDat); - /***** Show form again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show form again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -720,48 +729,52 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt extern const char *Txt_ID_X_removed; extern const char *Txt_You_can_not_delete_this_ID; 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)) { - /***** Get user's ID from form *****/ - Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); - // Users' IDs are always stored internally in capitals and without leading zeros - Str_RemoveLeadingZeros (UsrID); - Str_ConvertToUpperText (UsrID); + case Usr_I_CAN: + /***** Get user's ID from form *****/ + Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); + // Users' IDs are always stored internally in capitals and without leading zeros + Str_RemoveLeadingZeros (UsrID); + Str_ConvertToUpperText (UsrID); - if (UsrDat->IDs.Num < 2) // One unique ID - ICanRemove = Usr_I_CAN_NOT; - else - switch (MeOrOther) + if (UsrDat->IDs.Num >= 2) + switch (MeOrOther) + { + case Usr_ME: + // I can remove my ID only if it is not confirmed + ICanRemove = ID_DB_CheckIfConfirmed (UsrDat->UsrCod,UsrID) ? Usr_I_CAN_NOT : + Usr_I_CAN; + break; + case Usr_OTHER: + ICanRemove = Usr_I_CAN; + break; + } + + switch (ICanRemove) { - case Usr_ME: - // I can remove my ID only if it is not confirmed - ICanRemove = ID_DB_CheckIfConfirmed (UsrDat->UsrCod,UsrID) ? Usr_I_CAN_NOT : - Usr_I_CAN; + case Usr_I_CAN: + /***** Remove one of the user's IDs *****/ + ID_DB_RemoveUsrID (UsrDat->UsrCod,UsrID); + + /***** Show message *****/ + Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, + Txt_ID_X_removed,UsrID); break; - case Usr_OTHER: + case Usr_I_CAN_NOT: default: - ICanRemove = Usr_I_CAN; + Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, + Txt_You_can_not_delete_this_ID); break; } - - if (ICanRemove == Usr_I_CAN) - { - /***** Remove one of the user's IDs *****/ - ID_DB_RemoveUsrID (UsrDat->UsrCod,UsrID); - - /***** Show message *****/ - Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, - Txt_ID_X_removed, - UsrID); - } - else - Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, - Txt_You_can_not_delete_this_ID); - } - else - Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; + case Usr_I_CAN_NOT: + default: + Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; + } } /*****************************************************************************/ @@ -788,22 +801,24 @@ void ID_ChangeOtherUsrID (void) { /***** Get other user's code from form and get user's data *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Change user's ID *****/ - ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat, - Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); + case Usr_I_CAN: + /***** Change user's ID *****/ + ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat, + Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); - /***** Update list of IDs *****/ - ID_GetListIDsFromUsrCod (&Gbl.Usrs.Other.UsrDat); + /***** Update list of IDs *****/ + ID_GetListIDsFromUsrCod (&Gbl.Usrs.Other.UsrDat); - /***** Show form again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show form again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -824,65 +839,69 @@ static void ID_ChangeUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt bool AlreadyExists; unsigned NumIDFound = 0; // Initialized to avoid warning - if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (UsrDat)) { - /***** Get new user's ID from form *****/ - Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID); - // Users' IDs are always stored internally in capitals and without leading zeros - Str_RemoveLeadingZeros (NewID); - Str_ConvertToUpperText (NewID); + case Usr_I_CAN: + /***** Get new user's ID from form *****/ + Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID); + // Users' IDs are always stored internally in capitals and without leading zeros + Str_RemoveLeadingZeros (NewID); + Str_ConvertToUpperText (NewID); - if (ID_CheckIfUsrIDIsValid (NewID)) // If new ID is valid - { - /***** Check if the new ID matches any of the old IDs *****/ - for (NumID = 0, AlreadyExists = false; - NumID < UsrDat->IDs.Num && !AlreadyExists; - NumID++) - if (!strcasecmp (UsrDat->IDs.List[NumID].ID,NewID)) - { - AlreadyExists = true; - NumIDFound = NumID; - } - - if (AlreadyExists) // This new ID was already associated to this user + if (ID_CheckIfUsrIDIsValid (NewID)) // If new ID is valid { - if (MeOrOther == Usr_ME || UsrDat->IDs.List[NumIDFound].Confirmed) - Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, - Txt_The_ID_X_matches_one_of_the_existing, - NewID); - else // It's not me && !Confirmed + /***** Check if the new ID matches any of the old IDs *****/ + for (NumID = 0, AlreadyExists = false; + NumID < UsrDat->IDs.Num && !AlreadyExists; + NumID++) + if (!strcasecmp (UsrDat->IDs.List[NumID].ID,NewID)) + { + AlreadyExists = true; + NumIDFound = NumID; + } + + if (AlreadyExists) // This new ID was already associated to this user { - /***** Mark this ID as confirmed *****/ - ID_DB_ConfirmUsrID (UsrDat->UsrCod,NewID); + if (MeOrOther == Usr_ME || UsrDat->IDs.List[NumIDFound].Confirmed) + Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, + Txt_The_ID_X_matches_one_of_the_existing, + NewID); + else // It's not me && !Confirmed + { + /***** Mark this ID as confirmed *****/ + ID_DB_ConfirmUsrID (UsrDat->UsrCod,NewID); + + Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, + Txt_The_ID_X_has_been_confirmed, + NewID); + } + } + else if (UsrDat->IDs.Num >= ID_MAX_IDS_PER_USER) + Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, + Txt_A_user_can_not_have_more_than_X_IDs, + ID_MAX_IDS_PER_USER); + else // OK ==> add this new ID to my list of IDs + { + /***** Save this new ID *****/ + // It's me ==> ID not confirmed + // Not me ==> ID confirmed + ID_DB_InsertANewUsrID (UsrDat->UsrCod,NewID,MeOrOther == Usr_OTHER); Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, - Txt_The_ID_X_has_been_confirmed, - NewID); + Txt_The_ID_X_has_been_registered_successfully, + NewID); } } - else if (UsrDat->IDs.Num >= ID_MAX_IDS_PER_USER) + else // New ID is not valid Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, - Txt_A_user_can_not_have_more_than_X_IDs, - ID_MAX_IDS_PER_USER); - else // OK ==> add this new ID to my list of IDs - { - /***** Save this new ID *****/ - // It's me ==> ID not confirmed - // Not me ==> ID confirmed - ID_DB_InsertANewUsrID (UsrDat->UsrCod,NewID,MeOrOther == Usr_OTHER); - - Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, - Txt_The_ID_X_has_been_registered_successfully, - NewID); - } - } - else // New ID is not valid - Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, - Txt_The_ID_X_is_not_valid, - NewID); + Txt_The_ID_X_is_not_valid, + NewID); + break; + case Usr_I_CAN_NOT: + default: + Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); } /*****************************************************************************/ @@ -917,48 +936,52 @@ void ID_ConfirmOtherUsrID (void) ICanConfirm = Usr_I_CAN; } - if (ICanConfirm == Usr_I_CAN) + switch (ICanConfirm) { - /***** Get user's ID from form *****/ - Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); - // Users' IDs are always stored internally in capitals and without leading zeros - Str_RemoveLeadingZeros (UsrID); - Str_ConvertToUpperText (UsrID); + case Usr_I_CAN: + /***** Get user's ID from form *****/ + Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); + // Users' IDs are always stored internally in capitals and without leading zeros + Str_RemoveLeadingZeros (UsrID); + Str_ConvertToUpperText (UsrID); - for (NumID = 0, Found = false; - NumID < Gbl.Usrs.Other.UsrDat.IDs.Num && !Found; - NumID++) - if (!strcasecmp (UsrID,Gbl.Usrs.Other.UsrDat.IDs.List[NumID].ID)) + for (NumID = 0, Found = false; + NumID < Gbl.Usrs.Other.UsrDat.IDs.Num && !Found; + NumID++) + if (!strcasecmp (UsrID,Gbl.Usrs.Other.UsrDat.IDs.List[NumID].ID)) + { + Found = true; + NumIDFound = NumID; + } + + if (Found) // Found { - Found = true; - NumIDFound = NumID; - } + if (Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].Confirmed) + /***** ID found and already confirmed *****/ + Ale_CreateAlert (Ale_INFO,ID_ID_SECTION_ID, + Txt_ID_X_had_already_been_confirmed, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + else + { + /***** Mark this ID as confirmed *****/ + ID_DB_ConfirmUsrID (Gbl.Usrs.Other.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].Confirmed = true; - if (Found) // Found - { - if (Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].Confirmed) - /***** ID found and already confirmed *****/ - Ale_CreateAlert (Ale_INFO,ID_ID_SECTION_ID, - Txt_ID_X_had_already_been_confirmed, - Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); - else - { - /***** Mark this ID as confirmed *****/ - ID_DB_ConfirmUsrID (Gbl.Usrs.Other.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); - Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].Confirmed = true; - - /***** Write success message *****/ - Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, - Txt_The_ID_X_has_been_confirmed, - Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + /***** Write success message *****/ + Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, + Txt_The_ID_X_has_been_confirmed, + Gbl.Usrs.Other.UsrDat.IDs.List[NumIDFound].ID); + } } - } - else // User's ID not found + else // User's ID not found + Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; + case Usr_I_CAN_NOT: + default: Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else // I can not confirm - Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); /***** Show one or multiple records *****/ switch (Gbl.Action.Original) diff --git a/swad_account.c b/swad_account.c index 071948201..546dafb3c 100644 --- a/swad_account.c +++ b/swad_account.c @@ -487,39 +487,41 @@ void Acc_ShowFormChgOtherUsrAccount (void) { /***** Get user whose account must be changed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) - { - /***** Get user's nickname and email address - It's necessary because nickname or email could be just updated *****/ - Nck_DB_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname); - Mai_GetEmailFromUsrCod (&Gbl.Usrs.Other.UsrDat); + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) + { + case Usr_I_CAN: + /***** Get user's nickname and email address + It's necessary because nickname or email could be just updated *****/ + Nck_DB_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname); + Mai_GetEmailFromUsrCod (&Gbl.Usrs.Other.UsrDat); - /***** Show user's record *****/ - Rec_ShowSharedUsrRecord (Rec_SHA_RECORD_LIST, - &Gbl.Usrs.Other.UsrDat,NULL); + /***** Show user's record *****/ + Rec_ShowSharedUsrRecord (Rec_SHA_RECORD_LIST, + &Gbl.Usrs.Other.UsrDat,NULL); - /***** Begin container for this user *****/ - HTM_DIV_Begin ("class=\"REC_USR\""); + /***** Begin container for this user *****/ + HTM_DIV_Begin ("class=\"REC_USR\""); - /***** Show form to change password and nickname *****/ - HTM_DIV_Begin ("class=\"REC_LEFT\""); - Pwd_ShowFormChgOtherUsrPwd (); - Nck_ShowFormChangeOtherUsrNickname (); + /***** Show form to change password and nickname *****/ + HTM_DIV_Begin ("class=\"REC_LEFT\""); + Pwd_ShowFormChgOtherUsrPwd (); + Nck_ShowFormChangeOtherUsrNickname (); + HTM_DIV_End (); + + /***** Show form to change email and ID *****/ + HTM_DIV_Begin ("class=\"REC_RIGHT\""); + Mai_ShowFormChangeOtherUsrEmail (); + ID_ShowFormChangeOtherUsrID (); + HTM_DIV_End (); + + /***** End container for this user *****/ HTM_DIV_End (); - - /***** Show form to change email and ID *****/ - HTM_DIV_Begin ("class=\"REC_RIGHT\""); - Mai_ShowFormChangeOtherUsrEmail (); - ID_ShowFormChangeOtherUsrID (); - HTM_DIV_End (); - - /***** Begin container for this user *****/ - HTM_DIV_End (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -770,13 +772,17 @@ void Acc_GetUsrCodAndRemUsrGbl (void) bool Error = false; if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN) - Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); - else - Error = true; - } - else + switch (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) + { + case Usr_I_CAN: + Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); + break; + case Usr_I_CAN_NOT: + default: + Error = true; + break; + } + else // User not found Error = true; 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 : Usr_I_CAN_NOT; case Usr_OTHER: - default: // Only a system admin can eliminate other's account return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ? Usr_I_CAN : Usr_I_CAN_NOT; } + + return Usr_I_CAN_NOT; } /*****************************************************************************/ @@ -1103,7 +1110,6 @@ void Acc_PutIconToChangeUsrAccount (struct Usr_Data *UsrDat) "at.svg",Ico_BLACK); break; case Usr_OTHER: - default: if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL, Rec_PutParUsrCodEncrypted,NULL, diff --git a/swad_admin.c b/swad_admin.c index 490f39f0d..64e4c6b64 100644 --- a/swad_admin.c +++ b/swad_admin.c @@ -102,33 +102,37 @@ void Adm_ReqAddAdm (Hie_Level_t Level) (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 : Usr_I_CAN_NOT; - if (ICanRegister == Usr_I_CAN) + switch (ICanRegister) { - 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, - Gbl.Usrs.Other.UsrDat.FullName, - Gbl.Hierarchy.Node[Level].FullName); - Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); - } - else - { - /***** Show question and button to register user as administrator *****/ - /* Begin alert */ - Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X, - Gbl.Hierarchy.Node[Level].FullName); + case Usr_I_CAN: + 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, + Gbl.Usrs.Other.UsrDat.FullName, + Gbl.Hierarchy.Node[Level].FullName); + Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); + } + else + { + /***** Show question and button to register user as administrator *****/ + /* Begin alert */ + Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X, + Gbl.Hierarchy.Node[Level].FullName); - /* Show user's record */ - Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); + /* Show user's record */ + Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); - /* End alert */ - Ale_ShowAlertAndButtonEnd (Enr_ActNewAdm[Level],NULL,NULL, - Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod, - Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE); - } + /* End alert */ + Ale_ShowAlertAndButtonEnd (Enr_ActNewAdm[Level],NULL,NULL, + Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod, + Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE); + } + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } else 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_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : Usr_I_CAN_NOT; - if (ICanRegister == Usr_I_CAN) + switch (ICanRegister) { - /***** Register administrator in current institution/center/degree in database *****/ - Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level); + case Usr_I_CAN: + /***** Register administrator in current institution/center/degree in database *****/ + Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level); - /***** Show user's record *****/ - Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); - } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + /***** Show user's record *****/ + Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; + } } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); @@ -314,28 +322,32 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr, (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 : Usr_I_CAN_NOT; - if (ICanRemove == Usr_I_CAN) + switch (ICanRemove) { - /* Check if the other user is an admin of the current institution/center/degree */ - 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 - switch (ReqDelOrDelUsr) - { - case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution - Adm_AskIfRemAdm (MeOrOther,Level); - break; - case Enr_REMOVE_USR: // Remove administrator from current institution - Adm_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Level); - break; - } - } - else // The other user is not an administrator of current institution - Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y, - Gbl.Usrs.Other.UsrDat.FullName, - Gbl.Hierarchy.Node[Level].FullName); + case Usr_I_CAN: + /* Check if the other user is an admin of the current institution/center/degree */ + 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 + switch (ReqDelOrDelUsr) + { + case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution + Adm_AskIfRemAdm (MeOrOther,Level); + break; + case Enr_REMOVE_USR: // Remove administrator from current institution + Adm_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Level); + break; + } + } + else // The other user is not an administrator of current institution + Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y, + Gbl.Usrs.Other.UsrDat.FullName, + Gbl.Hierarchy.Node[Level].FullName); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); diff --git a/swad_agenda.c b/swad_agenda.c index c993849d5..04f21c714 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -393,7 +393,6 @@ void Agd_ShowUsrAgenda (void) extern const char *Hlp_PROFILE_Agenda_public_agenda; extern const char *Txt_Public_agenda_USER; struct Agd_Agenda Agenda; - bool Error = true; Usr_MeOrOther_t MeOrOther; char *Title; static struct Usr_Data *UsrDat[Usr_NUM_ME_OR_OTHER] = @@ -409,33 +408,36 @@ void Agd_ShowUsrAgenda (void) /***** Get user *****/ 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 *****/ + Agd_ResetAgenda (&Agenda); - /***** Reset agenda context *****/ - Agd_ResetAgenda (&Agenda); + /***** Begin box *****/ + MeOrOther = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); + if (asprintf (&Title,Txt_Public_agenda_USER,UsrDat[MeOrOther]->FullName) < 0) + Err_NotEnoughMemoryExit (); + Box_BoxBegin (Title, + FuncPutIcons[MeOrOther],UsrDat[MeOrOther]->EnUsrCod, + Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); + free (Title); - /***** Begin box *****/ - MeOrOther = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod); - if (asprintf (&Title,Txt_Public_agenda_USER,UsrDat[MeOrOther]->FullName) < 0) - Err_NotEnoughMemoryExit (); - Box_BoxBegin (Title, - FuncPutIcons[MeOrOther],UsrDat[MeOrOther]->EnUsrCod, - Hlp_PROFILE_Agenda_public_agenda,Box_NOT_CLOSABLE); - free (Title); + /***** Show the current events in the user's agenda *****/ + Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); - /***** Show the current events in the user's agenda *****/ - Agd_ShowEventsToday (&Agenda,Agd_ANOTHER_AGENDA_TODAY); + /***** Show all visible events in the user's agenda *****/ + Agd_ShowEvents (&Agenda,Agd_ANOTHER_AGENDA); - /***** Show all visible events in the user's agenda *****/ - Agd_ShowEvents (&Agenda,Agd_ANOTHER_AGENDA); - - /***** End box *****/ - Box_BoxEnd (); + /***** End box *****/ + Box_BoxEnd (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - - if (Error) + else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } diff --git a/swad_attendance.c b/swad_attendance.c index 6904e8fe2..5487d8a60 100644 --- a/swad_attendance.c +++ b/swad_attendance.c @@ -1757,20 +1757,22 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr, "DAT_SMALL", The_GetSuffix (), The_GetColorRows ()); - if (ICanEditStdComment == Usr_I_CAN) // Show with form + switch (ICanEditStdComment) { - HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\"" - " class=\"INPUT_%s\"", - UsrDat->EnUsrCod, - The_GetSuffix ()); + case Usr_I_CAN: // Show with form + HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\"" + " class=\"INPUT_%s\"", + UsrDat->EnUsrCod, + The_GetSuffix ()); + HTM_Txt (CommentStd); + HTM_TEXTAREA_End (); + break; + case Usr_I_CAN_NOT: // Show without form + default: + Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, + CommentStd,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); HTM_Txt (CommentStd); - HTM_TEXTAREA_End (); - } - else // Show without form - { - Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, - CommentStd,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); - HTM_Txt (CommentStd); + break; } HTM_TD_End (); @@ -1780,22 +1782,27 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr, "DAT_SMALL", The_GetSuffix (), The_GetColorRows ()); - if (ICanEditTchComment == Usr_I_CAN) // Show with form + switch (ICanEditTchComment) { - HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\"" - " class=\"INPUT_%s\"", - UsrDat->EnUsrCod, - The_GetSuffix ()); - HTM_Txt (CommentTch); - HTM_TEXTAREA_End (); - } - else if (Event->CommentTchVisible) // Show without form - { - Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, - CommentTch,Cns_MAX_BYTES_TEXT, - Str_DONT_REMOVE_SPACES); - HTM_Txt (CommentTch); - } + case Usr_I_CAN: // Show with form + HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\"" + " class=\"INPUT_%s\"", + UsrDat->EnUsrCod, + The_GetSuffix ()); + HTM_Txt (CommentTch); + HTM_TEXTAREA_End (); + break; + case Usr_I_CAN_NOT: // Show without form + default: + if (Event->CommentTchVisible) + { + Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, + CommentTch,Cns_MAX_BYTES_TEXT, + Str_DONT_REMOVE_SPACES); + HTM_Txt (CommentTch); + } + break; + } HTM_TD_End (); /***** End table row *****/ diff --git a/swad_browser.c b/swad_browser.c index 962b8530b..2cb4832eb 100644 --- a/swad_browser.c +++ b/swad_browser.c @@ -4183,25 +4183,35 @@ static void Brw_PutIconRemove (void) { HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); - if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I remove this? - switch (Gbl.FileBrowser.FilFolLnk.Type) - { - case Brw_IS_FILE: - case Brw_IS_LINK: - /***** Form to remove a file or link *****/ - Ico_PutContextualIconToRemove (Brw_ActAskRemoveFile[Gbl.FileBrowser.Type],NULL, - Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); - break; - case Brw_IS_FOLDER: - /***** Form to remove a folder *****/ - Ico_PutContextualIconToRemove (Brw_ActRemoveFolder[Gbl.FileBrowser.Type],NULL, - Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); - break; - default: - break; - } - else - Ico_PutIconRemovalNotAllowed (); + switch (Brw_GetIfICanEditFileOrFolder ()) // Can I remove this? + { + case Usr_I_CAN: + switch (Gbl.FileBrowser.FilFolLnk.Type) + { + case Brw_IS_FILE: + case Brw_IS_LINK: + /***** Form to remove a file or link *****/ + Ico_PutContextualIconToRemove (Brw_ActAskRemoveFile[Gbl.FileBrowser.Type], + NULL, + Brw_PutImplicitParsFileBrowser, + &Gbl.FileBrowser.FilFolLnk); + break; + case Brw_IS_FOLDER: + /***** Form to remove a folder *****/ + Ico_PutContextualIconToRemove (Brw_ActRemoveFolder[Gbl.FileBrowser.Type], + NULL, + Brw_PutImplicitParsFileBrowser, + &Gbl.FileBrowser.FilFolLnk); + break; + default: + break; + } + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconRemovalNotAllowed (); + break; + } HTM_TD_End (); } @@ -4232,18 +4242,21 @@ static void Brw_PutIconPaste (unsigned Level) HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) // Can't paste in a file or link - { - /* Icon to paste */ - if (Brw_CheckIfCanPasteIn (Level) == Usr_I_CAN) + /***** Icon to paste *****/ + switch (Brw_CheckIfCanPasteIn (Level)) { - /***** Form to paste the content of the clipboard *****/ - Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type], - Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); + case Usr_I_CAN: + /* Form to paste the content of the clipboard */ + Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type], + Brw_PutImplicitParsFileBrowser, + &Gbl.FileBrowser.FilFolLnk); + break; + case Usr_I_CAN_NOT: + default: + /* Icon to paste inactive */ + Ico_PutIconOff ("paste.svg",Ico_BLACK,Txt_Copy_not_allowed); + break; } - else - /* Icon to paste inactive */ - Ico_PutIconOff ("paste.svg",Ico_BLACK,Txt_Copy_not_allowed); - } HTM_TD_End (); } @@ -4464,59 +4477,61 @@ static void Brw_PutIconFolder (unsigned Level, HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); /***** 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 { - if (IconSubtree == Brw_ICON_TREE_EXPAND) - { - /***** Visible icon with folder closed *****/ - Brw_PutIconFolderWithPlus (FileBrowserId,RowId, - false, // Closed - HidVis_VISIBLE); // Visible + case Usr_I_CAN: + if (IconSubtree == Brw_ICON_TREE_EXPAND) + { + /* Visible icon with folder closed */ + Brw_PutIconFolderWithPlus (FileBrowserId,RowId, + false, // Closed + HidVis_VISIBLE); // Visible - /***** Hidden icon with folder open *****/ - Brw_PutIconFolderWithPlus (FileBrowserId,RowId, - true, // Open - HidVis_HIDDEN); // Hidden - } - else - { - /***** Hidden icon with folder closed *****/ - Brw_PutIconFolderWithPlus (FileBrowserId,RowId, - false, // Closed - HidVis_HIDDEN); // Hidden + /* Hidden icon with folder open */ + Brw_PutIconFolderWithPlus (FileBrowserId,RowId, + true, // Open + HidVis_HIDDEN); // Hidden + } + else + { + /* Hidden icon with folder closed */ + Brw_PutIconFolderWithPlus (FileBrowserId,RowId, + false, // Closed + HidVis_HIDDEN); // Hidden - /***** Visible icon with folder open *****/ - Brw_PutIconFolderWithPlus (FileBrowserId,RowId, - true, // Open - HidVis_VISIBLE); // Visible - } - } - else // I can't create a new file or folder - { - if (IconSubtree == Brw_ICON_TREE_EXPAND) - { - /***** Visible icon with folder closed *****/ - Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, - false, // Closed - HidVis_VISIBLE); + /* Visible icon with folder open */ + Brw_PutIconFolderWithPlus (FileBrowserId,RowId, + true, // Open + HidVis_VISIBLE); // Visible + } + break; + case Usr_I_CAN_NOT: + default: + if (IconSubtree == Brw_ICON_TREE_EXPAND) + { + /* Visible icon with folder closed */ + Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, + false, // Closed + HidVis_VISIBLE); - /***** Hidden icon with folder open *****/ - Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, - true, // Open - HidVis_HIDDEN); - } - else - { - /***** Hidden icon with folder closed *****/ - Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, - false, // Closed - HidVis_HIDDEN); + /* Hidden icon with folder open */ + Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, + true, // Open + HidVis_HIDDEN); + } + else + { + /* Hidden icon with folder closed */ + Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, + false, // Closed + HidVis_HIDDEN); - /***** Visible icon with folder open *****/ - Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, - true, // Open - HidVis_VISIBLE); - } + /* Visible icon with folder open */ + Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, + true, // Open + HidVis_VISIBLE); + } + break; } /***** End cell *****/ @@ -4720,33 +4735,36 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic, HTM_NBSP (); - if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I rename this folder? + switch (Brw_GetIfICanEditFileOrFolder ()) // Can I rename this folder? { - /***** Form to rename folder *****/ - Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]); - Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); - HTM_INPUT_TEXT ("NewFolderName",Brw_MAX_CHARS_FOLDER,Gbl.FileBrowser.FilFolLnk.Name, - HTM_SUBMIT_ON_CHANGE, - "class=\"LST_EDIT %s_%s %s\"", - InputStyle, - The_GetSuffix (), - Gbl.FileBrowser.Clipboard.IsThisFile ? "LIGHT_GREEN" : - The_GetColorRows ()); - Frm_EndForm (); - } - else - { - /***** Write name of the folder *****/ - if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) - HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title); + case Usr_I_CAN: + /***** Form to rename folder *****/ + Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]); + Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); + HTM_INPUT_TEXT ("NewFolderName",Brw_MAX_CHARS_FOLDER, + Gbl.FileBrowser.FilFolLnk.Name, + HTM_SUBMIT_ON_CHANGE, + "class=\"LST_EDIT %s_%s %s\"", + InputStyle, + The_GetSuffix (), + Gbl.FileBrowser.Clipboard.IsThisFile ? "LIGHT_GREEN" : + The_GetColorRows ()); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + /***** Write name of the folder *****/ + if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) + HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title); - HTM_STRONG_Begin (); - HTM_Txt (FileNameToShow); - HTM_STRONG_End (); - HTM_NBSP (); + HTM_STRONG_Begin (); + HTM_Txt (FileNameToShow); + HTM_STRONG_End (); + HTM_NBSP (); - if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) - HTM_SPAN_End (); + if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) + HTM_SPAN_End (); + break; } /***** End cell *****/ @@ -4934,21 +4952,25 @@ void Brw_AskRemFileFromTree (void) Brw_GetParAndInitFileBrowser (); /***** 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? { - /***** Show question and button to remove file/link *****/ - Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, - Gbl.FileBrowser.Level, - Gbl.FileBrowser.FilFolLnk.Type, - Gbl.FileBrowser.FilFolLnk.Name, - FileNameToShow); - Ale_ShowAlertRemove (Brw_ActRemoveFile[Gbl.FileBrowser.Type],NULL, - Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk, - Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X, - FileNameToShow); + case Usr_I_CAN: + /***** Show question and button to remove file/link *****/ + Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, + Gbl.FileBrowser.Level, + Gbl.FileBrowser.FilFolLnk.Type, + Gbl.FileBrowser.FilFolLnk.Name, + FileNameToShow); + Ale_ShowAlertRemove (Brw_ActRemoveFile[Gbl.FileBrowser.Type],NULL, + Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk, + Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X, + FileNameToShow); + break; + case Usr_I_CAN_NOT: + default: + Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); + break; } - else - Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); /***** Show again file browser *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -4969,40 +4991,44 @@ void Brw_RemFileFromTree (void) /***** Get parameters related to file browser *****/ 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? { - snprintf (Path,sizeof (Path),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder, - Gbl.FileBrowser.FilFolLnk.Full); + case Usr_I_CAN: + snprintf (Path,sizeof (Path),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder, + Gbl.FileBrowser.FilFolLnk.Full); - /***** Check if is a file/link or a folder *****/ - if (lstat (Path,&FileStatus)) // On success ==> 0 is returned - Err_ShowErrorAndExit ("Can not get information about a file or folder."); - else if (S_ISREG (FileStatus.st_mode)) // It's a file or a link - { - /* Name of the file/link to be shown */ - Brw_GetFileNameToShow (Str_FileIs (Gbl.FileBrowser.FilFolLnk.Name,"url") ? Brw_IS_LINK : - Brw_IS_FILE, - Gbl.FileBrowser.FilFolLnk.Name,FileNameToShow); + /***** Check if is a file/link or a folder *****/ + if (lstat (Path,&FileStatus)) // On success ==> 0 is returned + Err_ShowErrorAndExit ("Can not get information about a file or folder."); + else if (S_ISREG (FileStatus.st_mode)) // It's a file or a link + { + /* Name of the file/link to be shown */ + Brw_GetFileNameToShow (Str_FileIs (Gbl.FileBrowser.FilFolLnk.Name,"url") ? Brw_IS_LINK : + Brw_IS_FILE, + Gbl.FileBrowser.FilFolLnk.Name,FileNameToShow); - /* Remove file/link from disk and database */ - Brw_RemoveFileFromDiskAndDB (Path, - Gbl.FileBrowser.FilFolLnk.Full); + /* Remove file/link from disk and database */ + Brw_RemoveFileFromDiskAndDB (Path, + Gbl.FileBrowser.FilFolLnk.Full); - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); - /* Message of confirmation of removing */ - Ale_ShowAlert (Ale_SUCCESS,Txt_FILE_X_removed, - FileNameToShow); - } - else // File / link not found - Err_FileFolderNotFoundExit (); + /* Message of confirmation of removing */ + Ale_ShowAlert (Ale_SUCCESS,Txt_FILE_X_removed, + FileNameToShow); + } + else // File / link not found + Err_FileFolderNotFoundExit (); + break; + case Usr_I_CAN_NOT: + default: + Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); + break; } - else - Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); /***** Show again file browser *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -5022,40 +5048,44 @@ void Brw_RemFolderFromTree (void) /***** Get parameters related to file browser *****/ 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? { - snprintf (Path,sizeof (Path),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder, - Gbl.FileBrowser.FilFolLnk.Full); + case Usr_I_CAN: + snprintf (Path,sizeof (Path),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder, + Gbl.FileBrowser.FilFolLnk.Full); - /***** Check if it's a file or a folder *****/ - if (lstat (Path,&FileStatus)) // On success ==> 0 is returned - Err_ShowErrorAndExit ("Can not get information about a file or folder."); - else if (S_ISDIR (FileStatus.st_mode)) // It's a directory - if (Brw_RemoveFolderFromDiskAndDB (Path, - Gbl.FileBrowser.FilFolLnk.Full)) - { - if (errno == ENOTEMPTY) // The directory is not empty - Brw_AskConfirmRemoveFolderNotEmpty (); - else // The directory is empty - Err_ShowErrorAndExit ("Can not remove folder."); - } - else - { - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); + /***** Check if it's a file or a folder *****/ + if (lstat (Path,&FileStatus)) // On success ==> 0 is returned + Err_ShowErrorAndExit ("Can not get information about a file or folder."); + else if (S_ISDIR (FileStatus.st_mode)) // It's a directory + if (Brw_RemoveFolderFromDiskAndDB (Path, + Gbl.FileBrowser.FilFolLnk.Full)) + { + if (errno == ENOTEMPTY) // The directory is not empty + Brw_AskConfirmRemoveFolderNotEmpty (); + else // The directory is empty + Err_ShowErrorAndExit ("Can not remove folder."); + } + else + { + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); - /* Message of confirmation of successfull removing */ - Ale_ShowAlert (Ale_SUCCESS,Txt_Folder_X_removed, - Gbl.FileBrowser.FilFolLnk.Name); - } - else // Folder not found - Err_FileFolderNotFoundExit (); + /* Message of confirmation of successfull removing */ + Ale_ShowAlert (Ale_SUCCESS,Txt_Folder_X_removed, + Gbl.FileBrowser.FilFolLnk.Name); + } + else // Folder not found + Err_FileFolderNotFoundExit (); + break; + case Usr_I_CAN_NOT: + default: + Err_ShowErrorAndExit (Txt_You_can_not_remove_this_folder); + break; } - else - Err_ShowErrorAndExit (Txt_You_can_not_remove_this_folder); /***** Show again file browser *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -5769,189 +5799,194 @@ static void Brw_PasteClipboard (struct BrwSiz_BrowserSize *Size) Pasted.NumFolds = 0; Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); - if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN) + switch (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level)) { - /***** Construct the relative path of the origin file or folder *****/ - switch (Gbl.FileBrowser.Clipboard.FileBrowser) - { - case Brw_ADMI_DOC_INS: - case Brw_ADMI_SHR_INS: - Hie[Hie_INS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_INS] (&Hie[Hie_INS])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", - Cfg_PATH_INS_PRIVATE, - (unsigned) (Hie[Hie_INS].HieCod % 100), - (unsigned) Hie[Hie_INS].HieCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_DOC_CTR: - case Brw_ADMI_SHR_CTR: - Hie[Hie_CTR].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_CTR] (&Hie[Hie_CTR])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", - Cfg_PATH_CTR_PRIVATE, - (unsigned) (Hie[Hie_CTR].HieCod % 100), - (unsigned) Hie[Hie_CTR].HieCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_DOC_DEG: - case Brw_ADMI_SHR_DEG: - Hie[Hie_DEG].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_DEG] (&Hie[Hie_DEG])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", - Cfg_PATH_DEG_PRIVATE, - (unsigned) (Hie[Hie_DEG].HieCod % 100), - (unsigned) Hie[Hie_DEG].HieCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.HieCod; - Grp_GetGroupDataByCod (&GrpDat); - Hie[Hie_CRS].HieCod = GrpDat.CrsCod; - if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_GRP, - GrpDat.GrpCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_ASG_CRS: - case Brw_ADMI_WRK_CRS: - Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) - { - Usr_UsrDataConstructor (&UsrDat); - if (Usr_DB_ChkIfUsrCodExists (Gbl.FileBrowser.Clipboard.WorksUsrCod)) - - UsrDat.UsrCod = Gbl.FileBrowser.Clipboard.WorksUsrCod; - Usr_GetAllUsrDataFromUsrCod (&UsrDat, - Usr_DONT_GET_PREFS, - Usr_DONT_GET_ROLE_IN_CRS); // Check that user exists - snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_USR, - (unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100), - Gbl.FileBrowser.Clipboard.WorksUsrCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - Usr_UsrDataDestructor (&UsrDat); - } - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; - if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_USR, - (unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100), - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_DOC_PRJ: - case Brw_ADMI_ASS_PRJ: - PrjCod = Gbl.FileBrowser.Clipboard.HieCod; - Hie[Hie_CRS].HieCod = Prj_DB_GetCrsOfPrj (PrjCod); - if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) - snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", - Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_PRJ, - (unsigned) (PrjCod % 100), - PrjCod, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - else - Err_WrongCopySrcExit (); - break; - case Brw_ADMI_BRF_USR: - snprintf (PathOrg,sizeof (PathOrg),"%s/%s", - Gbl.Usrs.Me.PathDir, - Gbl.FileBrowser.Clipboard.FilFolLnk.Full); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - - /***** Paste tree (path in clipboard) into folder *****/ - BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); - BrwSiz_SetMaxQuota (Size); - if (Brw_PasteTreeIntoFolder (Size, - Gbl.FileBrowser.Clipboard.Level, - PathOrg, - Gbl.FileBrowser.FilFolLnk.Full, - &Pasted, - &FirstFilCod)) - { - /***** Write message of success *****/ - Ale_ShowAlert (Ale_SUCCESS,"%s
" - "%s: %u
" - "%s: %u
" - "%s: %u", - Txt_The_copy_has_been_successful, - Txt_Files_copied ,Pasted.NumFiles, - Txt_Links_copied ,Pasted.NumLinks, - Txt_Folders_copied,Pasted.NumFolds); - - /***** Notify new files *****/ - if (Pasted.NumFiles || - Pasted.NumLinks) + case Usr_I_CAN: + /***** Construct the relative path of the origin file or folder *****/ + switch (Gbl.FileBrowser.Clipboard.FileBrowser) { - FileMetadata.FilCod = FirstFilCod; - Brw_GetFileMetadataByCod (&FileMetadata); - - /* Notify only is destination folder is visible */ - if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) - switch (Gbl.FileBrowser.Type) + case Brw_ADMI_DOC_INS: + case Brw_ADMI_SHR_INS: + Hie[Hie_INS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_INS] (&Hie[Hie_INS])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", + Cfg_PATH_INS_PRIVATE, + (unsigned) (Hie[Hie_INS].HieCod % 100), + (unsigned) Hie[Hie_INS].HieCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_DOC_CTR: + case Brw_ADMI_SHR_CTR: + Hie[Hie_CTR].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_CTR] (&Hie[Hie_CTR])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", + Cfg_PATH_CTR_PRIVATE, + (unsigned) (Hie[Hie_CTR].HieCod % 100), + (unsigned) Hie[Hie_CTR].HieCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_DOC_DEG: + case Brw_ADMI_SHR_DEG: + Hie[Hie_DEG].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_DEG] (&Hie[Hie_DEG])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%02u/%u/%s", + Cfg_PATH_DEG_PRIVATE, + (unsigned) (Hie[Hie_DEG].HieCod % 100), + (unsigned) Hie[Hie_DEG].HieCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s", + Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + GrpDat.GrpCod = Gbl.FileBrowser.Clipboard.HieCod; + Grp_GetGroupDataByCod (&GrpDat); + Hie[Hie_CRS].HieCod = GrpDat.CrsCod; + if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%ld/%s", + Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_GRP, + GrpDat.GrpCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_ASG_CRS: + case Brw_ADMI_WRK_CRS: + Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) { - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FirstFilCod); - break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FirstFilCod); - break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FirstFilCod); - break; - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FirstFilCod); - break; - default: - break; - } - } - } + Usr_UsrDataConstructor (&UsrDat); + if (Usr_DB_ChkIfUsrCodExists (Gbl.FileBrowser.Clipboard.WorksUsrCod)) - /***** Add path where new tree is pasted to table of expanded folders *****/ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); + UsrDat.UsrCod = Gbl.FileBrowser.Clipboard.WorksUsrCod; + Usr_GetAllUsrDataFromUsrCod (&UsrDat, + Usr_DONT_GET_PREFS, + Usr_DONT_GET_ROLE_IN_CRS); // Check that user exists + snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", + Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_USR, + (unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100), + Gbl.FileBrowser.Clipboard.WorksUsrCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + Usr_UsrDataDestructor (&UsrDat); + } + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + Hie[Hie_CRS].HieCod = Gbl.FileBrowser.Clipboard.HieCod; + if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", + Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_USR, + (unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100), + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_DOC_PRJ: + case Brw_ADMI_ASS_PRJ: + PrjCod = Gbl.FileBrowser.Clipboard.HieCod; + Hie[Hie_CRS].HieCod = Prj_DB_GetCrsOfPrj (PrjCod); + if (Hie_GetDataByCod[Hie_CRS] (&Hie[Hie_CRS])) + snprintf (PathOrg,sizeof (PathOrg),"%s/%ld/%s/%02u/%ld/%s", + Cfg_PATH_CRS_PRIVATE,Hie[Hie_CRS].HieCod,Cfg_FOLDER_PRJ, + (unsigned) (PrjCod % 100), + PrjCod, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + else + Err_WrongCopySrcExit (); + break; + case Brw_ADMI_BRF_USR: + snprintf (PathOrg,sizeof (PathOrg),"%s/%s", + Gbl.Usrs.Me.PathDir, + Gbl.FileBrowser.Clipboard.FilFolLnk.Full); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + + /***** Paste tree (path in clipboard) into folder *****/ + BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); + BrwSiz_SetMaxQuota (Size); + if (Brw_PasteTreeIntoFolder (Size, + Gbl.FileBrowser.Clipboard.Level, + PathOrg, + Gbl.FileBrowser.FilFolLnk.Full, + &Pasted, + &FirstFilCod)) + { + /***** Write message of success *****/ + Ale_ShowAlert (Ale_SUCCESS,"%s
" + "%s: %u
" + "%s: %u
" + "%s: %u", + Txt_The_copy_has_been_successful, + Txt_Files_copied ,Pasted.NumFiles, + Txt_Links_copied ,Pasted.NumLinks, + Txt_Folders_copied,Pasted.NumFolds); + + /***** Notify new files *****/ + if (Pasted.NumFiles || + Pasted.NumLinks) + { + FileMetadata.FilCod = FirstFilCod; + Brw_GetFileMetadataByCod (&FileMetadata); + + /* Notify only is destination folder is visible */ + if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) + switch (Gbl.FileBrowser.Type) + { + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_DOC_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FirstFilCod); + break; + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_TCH_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FirstFilCod); + break; + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_SHR_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FirstFilCod); + break; + case Brw_ADMI_MRK_CRS: + case Brw_ADMI_MRK_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FirstFilCod); + break; + default: + break; + } + } + } + + /***** Add path where new tree is pasted to table of expanded folders *****/ + 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,44 +6225,46 @@ void Brw_ShowFormFileBrowser (void) Brw_GetParAndInitFileBrowser (); /***** 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)) { - /***** Name of the folder to be shown ****/ - Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, - Gbl.FileBrowser.Level, - Gbl.FileBrowser.FilFolLnk.Type, - Gbl.FileBrowser.FilFolLnk.Name, - FileNameToShow); + case Usr_I_CAN: + /***** Name of the folder to be shown ****/ + Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, + Gbl.FileBrowser.Level, + Gbl.FileBrowser.FilFolLnk.Type, + Gbl.FileBrowser.FilFolLnk.Name, + FileNameToShow); - /***** 1. Form to create a new folder *****/ - Brw_PutFormToCreateAFolder (FileNameToShow); + /***** 1. Form to create a new folder *****/ + Brw_PutFormToCreateAFolder (FileNameToShow); - /***** 2. Form to send a file *****/ - Brw_PutFormToUploadFilesUsingDropzone (FileNameToShow); + /***** 2. Form to send a file *****/ + Brw_PutFormToUploadFilesUsingDropzone (FileNameToShow); - /***** 3. Form to send a file *****/ - Brw_PutFormToUploadOneFileClassic (FileNameToShow); + /***** 3. Form to send a file *****/ + Brw_PutFormToUploadOneFileClassic (FileNameToShow); - /***** 4. Form to paste the content of the clipboard *****/ - if (Brw_GetMyClipboard ()) - { - /***** Check if we can paste in this folder *****/ - Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); - if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN) - Brw_PutFormToPasteAFileOrFolder (FileNameToShow); - } + /***** 4. Form to paste the content of the clipboard *****/ + if (Brw_GetMyClipboard ()) + { + /***** Check if we can paste in this folder *****/ + Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); + if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN) + Brw_PutFormToPasteAFileOrFolder (FileNameToShow); + } - /***** 5. Form to create a link *****/ - if (Gbl.FileBrowser.Type != Brw_ADMI_MRK_CRS && - Gbl.FileBrowser.Type != Brw_ADMI_MRK_GRP) // Do not create links in marks - Brw_PutFormToCreateALink (FileNameToShow); - } - else - { - Err_ShowErrorAndExit (Txt_You_can_not_create_folders_files_or_links_here); // It's difficult, but not impossible that a user sees this message + /***** 5. Form to create a link *****/ + if (Gbl.FileBrowser.Type != Brw_ADMI_MRK_CRS && + Gbl.FileBrowser.Type != Brw_ADMI_MRK_GRP) // Do not create links in marks + Brw_PutFormToCreateALink (FileNameToShow); + break; + 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 - /***** Show again file browser *****/ - Brw_ShowAgainFileBrowserOrWorks (); + /***** Show again file browser *****/ + Brw_ShowAgainFileBrowserOrWorks (); + break; } } @@ -6486,83 +6523,88 @@ void Brw_RecFolderFileBrowser (void) Brw_GetParAndInitFileBrowser (); /***** Check if creating a new folder is allowed *****/ - if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) + switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) { - if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) - { - /* In Gbl.FileBrowser.NewFilFolLnkName is the name of the new folder */ - snprintf (Path,sizeof (Path),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder, - Gbl.FileBrowser.FilFolLnk.Full); - - if (strlen (Path) + 1 + strlen (Gbl.FileBrowser.NewFilFolLnkName) > PATH_MAX) - Err_ShowErrorAndExit ("Path is too long."); - Str_Concat (Path,"/",sizeof (Path) - 1); - Str_Concat (Path,Gbl.FileBrowser.NewFilFolLnkName,sizeof (Path) - 1); - - /* Create the new directory */ - if (mkdir (Path,(mode_t) 0xFFF) == 0) + case Usr_I_CAN: + if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) { - /* Check if quota has been exceeded */ - BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); - BrwSiz_SetMaxQuota (Size); - if (BrwSiz_CheckIfQuotaExceded (Size)) + /* In Gbl.FileBrowser.NewFilFolLnkName is the name of the new folder */ + snprintf (Path,sizeof (Path),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder, + Gbl.FileBrowser.FilFolLnk.Full); + + if (strlen (Path) + 1 + strlen (Gbl.FileBrowser.NewFilFolLnkName) > PATH_MAX) + Err_ShowErrorAndExit ("Path is too long."); + Str_Concat (Path,"/",sizeof (Path) - 1); + Str_Concat (Path,Gbl.FileBrowser.NewFilFolLnkName,sizeof (Path) - 1); + + /* Create the new directory */ + if (mkdir (Path,(mode_t) 0xFFF) == 0) { - Fil_RemoveTree (Path); - Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_folder_X_because_it_would_exceed_the_disk_quota, - Gbl.FileBrowser.NewFilFolLnkName); + /* Check if quota has been exceeded */ + BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); + BrwSiz_SetMaxQuota (Size); + if (BrwSiz_CheckIfQuotaExceded (Size)) + { + Fil_RemoveTree (Path); + Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_folder_X_because_it_would_exceed_the_disk_quota, + Gbl.FileBrowser.NewFilFolLnkName); + } + else + { + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); + + /* Add path where new file is created to table of expanded folders */ + Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); + + /* Add entry to the table of files/folders */ + snprintf (PathCompleteInTreeIncludingFolder, + sizeof (PathCompleteInTreeIncludingFolder), + "%s/%s", + Gbl.FileBrowser.FilFolLnk.Full, + Gbl.FileBrowser.NewFilFolLnkName); + Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_FOLDER, + PathCompleteInTreeIncludingFolder,false,Brw_LICENSE_DEFAULT); + + /* The folder has been created sucessfully */ + Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, + Gbl.FileBrowser.Level, + Brw_IS_FOLDER, + Gbl.FileBrowser.FilFolLnk.Name, + FileNameToShow); + Ale_ShowAlert (Ale_SUCCESS,Txt_The_folder_X_has_been_created_inside_the_folder_Y, + Gbl.FileBrowser.NewFilFolLnkName,FileNameToShow); + } } else - { - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); - - /* Add path where new file is created to table of expanded folders */ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); - - /* Add entry to the table of files/folders */ - snprintf (PathCompleteInTreeIncludingFolder, - sizeof (PathCompleteInTreeIncludingFolder), - "%s/%s", - Gbl.FileBrowser.FilFolLnk.Full, - Gbl.FileBrowser.NewFilFolLnkName); - Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_FOLDER, - PathCompleteInTreeIncludingFolder,false,Brw_LICENSE_DEFAULT); - - /* The folder has been created sucessfully */ - Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, - Gbl.FileBrowser.Level, - Brw_IS_FOLDER, - Gbl.FileBrowser.FilFolLnk.Name, - FileNameToShow); - Ale_ShowAlert (Ale_SUCCESS,Txt_The_folder_X_has_been_created_inside_the_folder_Y, - Gbl.FileBrowser.NewFilFolLnkName,FileNameToShow); - } - } - else - { - switch (errno) { - case EEXIST: - Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_folder_X_because_there_is_already_a_folder_or_a_file_with_that_name, - Gbl.FileBrowser.NewFilFolLnkName); - break; - case EACCES: - Err_ShowErrorAndExit ("Write forbidden."); - break; - default: - Err_ShowErrorAndExit ("Can not create folder."); - break; + switch (errno) + { + case EEXIST: + Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_folder_X_because_there_is_already_a_folder_or_a_file_with_that_name, + Gbl.FileBrowser.NewFilFolLnkName); + break; + case EACCES: + Err_ShowErrorAndExit ("Write forbidden."); + break; + default: + Err_ShowErrorAndExit ("Can not create folder."); + break; + } } } - } - else // Folder name not valid - Ale_ShowAlerts (NULL); + else // Folder name not valid + 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 *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -6586,92 +6628,99 @@ void Brw_RenFolderFileBrowser (void) /***** Get parameters related to file browser *****/ 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? { - if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) - { - if (strcmp (Gbl.FileBrowser.FilFolLnk.Name,Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed - { - /* Gbl.FileBrowser.FilFolLnk.Name holds the new name of the folder */ - snprintf (OldPathInTree,sizeof (OldPathInTree),"%s/%s", - Gbl.FileBrowser.FilFolLnk.Path, - Gbl.FileBrowser.FilFolLnk.Name); - snprintf (OldPath,sizeof (OldPath),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder,OldPathInTree); - - /* Gbl.FileBrowser.NewFilFolLnkName holds the new name of the folder */ - if (strlen (Gbl.FileBrowser.Path.AboveRootFolder) + 1 + - strlen (Gbl.FileBrowser.FilFolLnk.Path) + 1 + - strlen (Gbl.FileBrowser.NewFilFolLnkName) > PATH_MAX) - Err_ShowErrorAndExit ("Path is too long."); - snprintf (NewPathInTree,sizeof (NewPathInTree),"%s/%s", - Gbl.FileBrowser.FilFolLnk.Path, - Gbl.FileBrowser.NewFilFolLnkName); - snprintf (NewPath,sizeof (NewPath),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder,NewPathInTree); - - /* We should check here that a folder with the same name does not exist. - but we leave this work to the system */ - - /* Rename the directory. If a empty folder existed with the name new, overwrite it! */ - if (rename (OldPath,NewPath)) // Fail + case Usr_I_CAN: + if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) + { + if (strcmp (Gbl.FileBrowser.FilFolLnk.Name, + Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed { - switch (errno) - { - case ENOTEMPTY: - case EEXIST: - 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, - Gbl.FileBrowser.FilFolLnk.Name,Gbl.FileBrowser.NewFilFolLnkName); - break; - case EACCES: - Err_ShowErrorAndExit ("Write forbidden."); - break; - default: - Err_ShowErrorAndExit ("Can not rename folder."); - break; - } + /* Gbl.FileBrowser.FilFolLnk.Name holds the new name of the folder */ + snprintf (OldPathInTree,sizeof (OldPathInTree),"%s/%s", + Gbl.FileBrowser.FilFolLnk.Path, + Gbl.FileBrowser.FilFolLnk.Name); + snprintf (OldPath,sizeof (OldPath),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder,OldPathInTree); + + /* Gbl.FileBrowser.NewFilFolLnkName holds the new name of the folder */ + if (strlen (Gbl.FileBrowser.Path.AboveRootFolder) + 1 + + strlen (Gbl.FileBrowser.FilFolLnk.Path) + 1 + + strlen (Gbl.FileBrowser.NewFilFolLnkName) > PATH_MAX) + Err_ShowErrorAndExit ("Path is too long."); + snprintf (NewPathInTree,sizeof (NewPathInTree),"%s/%s", + Gbl.FileBrowser.FilFolLnk.Path, + Gbl.FileBrowser.NewFilFolLnkName); + snprintf (NewPath,sizeof (NewPath),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder,NewPathInTree); + + /* We should check here that a folder with the same name does not exist. + but we leave this work to the system */ + + /* Rename the directory. If a empty folder existed with the name new, overwrite it! */ + if (rename (OldPath,NewPath)) // Fail + { + switch (errno) + { + case ENOTEMPTY: + case EEXIST: + 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, + Gbl.FileBrowser.FilFolLnk.Name, + Gbl.FileBrowser.NewFilFolLnkName); + break; + case EACCES: + Err_ShowErrorAndExit ("Write forbidden."); + break; + default: + Err_ShowErrorAndExit ("Can not rename folder."); + break; + } + } + else // Success + { + /* If a folder is renamed, + it is necessary to rename all entries in the tables of files + that belong to the subtree starting at that folder */ + Brw_DB_RenameOneFolder (OldPathInTree, + NewPathInTree); + Brw_DB_RenameChildrenFilesOrFolders (OldPathInTree, + NewPathInTree); + + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); + + /* Remove affected expanded folders */ + Brw_DB_RenameAffectedExpandedFolders (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod, + OldPathInTree, + NewPathInTree); + + /* Write message of confirmation */ + Ale_ShowAlert (Ale_SUCCESS,Txt_The_folder_X_has_been_renamed_as_Y, + Gbl.FileBrowser.FilFolLnk.Name, + Gbl.FileBrowser.NewFilFolLnkName); + } + } - else // Success - { - /* If a folder is renamed, - it is necessary to rename all entries in the tables of files - that belong to the subtree starting at that folder */ - Brw_DB_RenameOneFolder (OldPathInTree, - NewPathInTree); - Brw_DB_RenameChildrenFilesOrFolders (OldPathInTree, - NewPathInTree); - - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); - - /* Remove affected expanded folders */ - Brw_DB_RenameAffectedExpandedFolders (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod, - OldPathInTree, - NewPathInTree); - - /* Write message of confirmation */ - Ale_ShowAlert (Ale_SUCCESS,Txt_The_folder_X_has_been_renamed_as_Y, - Gbl.FileBrowser.FilFolLnk.Name, - Gbl.FileBrowser.NewFilFolLnkName); - } - - } - else // Names are equal. - // This may happens if we have press... - // ...INTRO without changing the name - Ale_ShowAlert (Ale_INFO,Txt_The_name_X_has_not_changed, - Gbl.FileBrowser.FilFolLnk.Name); - } - else // Folder name not valid - Ale_ShowAlerts (NULL); + else // Names are equal. + // This may happens if we have press... + // ...INTRO without changing the name + Ale_ShowAlert (Ale_INFO,Txt_The_name_X_has_not_changed, + Gbl.FileBrowser.FilFolLnk.Name); + } + else // Folder name not valid + Ale_ShowAlerts (NULL); + break; + case Usr_I_CAN_NOT: + default: + Err_ShowErrorAndExit (Txt_You_can_not_rename_this_folder); + break; } - else - Err_ShowErrorAndExit (Txt_You_can_not_rename_this_folder); /***** Show again file browser *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -6757,154 +6806,159 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size, Brw_GetParAndInitFileBrowser (); /***** Check if creating a new file is allowed *****/ - if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) + switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) { - /***** First, we save in disk the file received *****/ - Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG, - SrcFileName,MIMEType); + case Usr_I_CAN: + /***** First, we save in disk the file received *****/ + Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG, + SrcFileName,MIMEType); - /***** Get filename from path *****/ - // Spaces at start or end are allowed - Str_SplitFullPathIntoPathAndFileName (SrcFileName, - PathUntilFileName, - Gbl.FileBrowser.NewFilFolLnkName); - if (Gbl.FileBrowser.NewFilFolLnkName[0]) - { - /***** Check if uploading this kind of file is allowed *****/ - if (Brw_CheckIfUploadIsAllowed (MIMEType)) - { - if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) - { - /* Gbl.FileBrowser.NewFilFolLnkName holds the name of the new file */ - snprintf (Path,sizeof (Path),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder, - Gbl.FileBrowser.FilFolLnk.Full); - if (strlen (Path) + 1 + - strlen (Gbl.FileBrowser.NewFilFolLnkName) + - strlen (".tmp") > PATH_MAX) - Err_ShowErrorAndExit ("Path is too long."); - Str_Concat (Path,"/",sizeof (Path) - 1); - Str_Concat (Path,Gbl.FileBrowser.NewFilFolLnkName,sizeof (Path) - 1); + /***** Get filename from path *****/ + // Spaces at start or end are allowed + Str_SplitFullPathIntoPathAndFileName (SrcFileName, + PathUntilFileName, + Gbl.FileBrowser.NewFilFolLnkName); + if (Gbl.FileBrowser.NewFilFolLnkName[0]) + { + /***** Check if uploading this kind of file is allowed *****/ + if (Brw_CheckIfUploadIsAllowed (MIMEType)) + { + if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) + { + /* Gbl.FileBrowser.NewFilFolLnkName holds the name of the new file */ + snprintf (Path,sizeof (Path),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder, + Gbl.FileBrowser.FilFolLnk.Full); + if (strlen (Path) + 1 + + strlen (Gbl.FileBrowser.NewFilFolLnkName) + + strlen (".tmp") > PATH_MAX) + Err_ShowErrorAndExit ("Path is too long."); + Str_Concat (Path,"/",sizeof (Path) - 1); + Str_Concat (Path,Gbl.FileBrowser.NewFilFolLnkName,sizeof (Path) - 1); - /* Check if the destination file exists */ - if (Fil_CheckIfPathExists (Path)) - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_UPLOAD_FILE_X_file_already_exists_NO_HTML, - Gbl.FileBrowser.NewFilFolLnkName); - else // Destination file does not exist - { - /* End receiving the file */ - snprintf (PathTmp,sizeof (PathTmp),"%s.tmp",Path); - FileIsValid = Fil_EndReceptionOfFile (PathTmp,Par); + /* Check if the destination file exists */ + if (Fil_CheckIfPathExists (Path)) + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_UPLOAD_FILE_X_file_already_exists_NO_HTML, + Gbl.FileBrowser.NewFilFolLnkName); + else // Destination file does not exist + { + /* End receiving the file */ + snprintf (PathTmp,sizeof (PathTmp),"%s.tmp",Path); + FileIsValid = Fil_EndReceptionOfFile (PathTmp,Par); - /* Check if the content of the file of marks is valid */ - if (FileIsValid) - if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type]) - if (!Mrk_CheckFileOfMarks (PathTmp,&Marks)) - FileIsValid = false; + /* Check if the content of the file of marks is valid */ + if (FileIsValid) + if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type]) + if (!Mrk_CheckFileOfMarks (PathTmp,&Marks)) + FileIsValid = false; - if (FileIsValid) - { - /* Rename the temporary */ - if (rename (PathTmp,Path)) // Fail - { - Fil_RemoveTree (PathTmp); - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_UPLOAD_FILE_could_not_create_file_NO_HTML, - Gbl.FileBrowser.NewFilFolLnkName); - } - else // Success - { - /* Check if quota has been exceeded */ - BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); - BrwSiz_SetMaxQuota (Size); - if (BrwSiz_CheckIfQuotaExceded (Size)) - { - Fil_RemoveTree (Path); - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_UPLOAD_FILE_X_quota_exceeded_NO_HTML, - Gbl.FileBrowser.NewFilFolLnkName); - } - else - { - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); + if (FileIsValid) + { + /* Rename the temporary */ + if (rename (PathTmp,Path)) // Fail + { + Fil_RemoveTree (PathTmp); + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_UPLOAD_FILE_could_not_create_file_NO_HTML, + Gbl.FileBrowser.NewFilFolLnkName); + } + else // Success + { + /* Check if quota has been exceeded */ + BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); + BrwSiz_SetMaxQuota (Size); + if (BrwSiz_CheckIfQuotaExceded (Size)) + { + Fil_RemoveTree (Path); + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_UPLOAD_FILE_X_quota_exceeded_NO_HTML, + Gbl.FileBrowser.NewFilFolLnkName); + } + else + { + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); - /* Add path where new file is created to table of expanded folders */ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); + /* Add path where new file is created to table of expanded folders */ + Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); - /* Add entry to the table of files/folders */ - snprintf (PathCompleteInTreeIncludingFile, - sizeof (PathCompleteInTreeIncludingFile), - "%s/%s", - Gbl.FileBrowser.FilFolLnk.Full, - Gbl.FileBrowser.NewFilFolLnkName); - FilCod = Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_FILE, - PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT); + /* Add entry to the table of files/folders */ + snprintf (PathCompleteInTreeIncludingFile, + sizeof (PathCompleteInTreeIncludingFile), + "%s/%s", + Gbl.FileBrowser.FilFolLnk.Full, + Gbl.FileBrowser.NewFilFolLnkName); + FilCod = Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_FILE, + PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT); - /* Show message of confirmation */ - if (UploadType == Brw_CLASSIC_UPLOAD) - { - Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, - Gbl.FileBrowser.Level, - Brw_IS_FOLDER, - Gbl.FileBrowser.FilFolLnk.Name, - FileNameToShow); // Folder name - Ale_CreateAlert (Ale_SUCCESS,NULL, - Txt_The_file_X_has_been_placed_inside_the_folder_Y, - Gbl.FileBrowser.NewFilFolLnkName, - FileNameToShow); - } - UploadSucessful = true; - - FileMetadata.FilCod = FilCod; - Brw_GetFileMetadataByCod (&FileMetadata); - - /* Add a new entry of marks into database */ - if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type]) - Mrk_DB_AddMarks (FileMetadata.FilCod,&Marks); - - /* Notify new file */ - if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) - switch (Gbl.FileBrowser.Type) + /* Show message of confirmation */ + if (UploadType == Brw_CLASSIC_UPLOAD) { - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FilCod); - break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FilCod); - break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FilCod); - break; - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FilCod); - break; - default: - break; + Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, + Gbl.FileBrowser.Level, + Brw_IS_FOLDER, + Gbl.FileBrowser.FilFolLnk.Name, + FileNameToShow); // Folder name + Ale_CreateAlert (Ale_SUCCESS,NULL, + Txt_The_file_X_has_been_placed_inside_the_folder_Y, + Gbl.FileBrowser.NewFilFolLnkName, + FileNameToShow); } - } - } - } - else // Error in file reception. File probably too big - Fil_RemoveTree (PathTmp); - } - } - } - } - else // Empty filename + UploadSucessful = true; + + FileMetadata.FilCod = FilCod; + Brw_GetFileMetadataByCod (&FileMetadata); + + /* Add a new entry of marks into database */ + if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type]) + Mrk_DB_AddMarks (FileMetadata.FilCod,&Marks); + + /* Notify new file */ + if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) + switch (Gbl.FileBrowser.Type) + { + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_DOC_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FilCod); + break; + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_TCH_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FilCod); + break; + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_SHR_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FilCod); + break; + case Brw_ADMI_MRK_CRS: + case Brw_ADMI_MRK_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FilCod); + break; + default: + break; + } + } + } + } + else // Error in file reception. File probably too big + Fil_RemoveTree (PathTmp); + } + } + } + } + else // Empty filename + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_UPLOAD_FILE_You_must_specify_the_file_NO_HTML); + break; + case Usr_I_CAN_NOT: + default: + // I do not have permission to create files here Ale_CreateAlert (Ale_WARNING,NULL, - Txt_UPLOAD_FILE_You_must_specify_the_file_NO_HTML); + Txt_UPLOAD_FILE_Forbidden_NO_HTML); + break; } - else // I do not have permission to create files here - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_UPLOAD_FILE_Forbidden_NO_HTML); return UploadSucessful; } @@ -6937,143 +6991,148 @@ void Brw_RecLinkFileBrowser (void) Brw_GetParAndInitFileBrowser (); /***** Check if creating a new link is allowed *****/ - if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) + switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) { - /***** Create a new file to store URL ****/ - Par_GetParText ("NewLinkURL",URL,PATH_MAX); - if ((LengthURL = strlen (URL))) - { - if (Gbl.FileBrowser.NewFilFolLnkName[0]) - /* - Gbl.FileBrowser.NewFilFolLnkName holds the name given by me in the form - Example: - Name given by me: intel-architectures.pdf - File in swad: intel-architectures.pdf.url - */ - Str_Copy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName, - sizeof (URLWithoutEndingSlash) - 1); - else - /* - Gbl.FileBrowser.NewFilFolLnkName is empty - URL holds the URL given by me in the form - Example: - URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf - File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url - */ - Str_Copy (URLWithoutEndingSlash,URL, - sizeof (URLWithoutEndingSlash) - 1); - - /* Remove possible final '/' from URL */ - if (URLWithoutEndingSlash[LengthURL - 1] == '/') - URLWithoutEndingSlash[LengthURL - 1] = '\0'; - - /* Get the last name in URL-without-ending-slash */ - Str_SplitFullPathIntoPathAndFileName (URLWithoutEndingSlash, - URLUntilLastFilename, - FileName); - - /* Convert the last name in URL to a valid filename */ - if (Str_ConvertFilFolLnkNameToValid (FileName)) + case Usr_I_CAN: + /***** Create a new file to store URL ****/ + Par_GetParText ("NewLinkURL",URL,PATH_MAX); + if ((LengthURL = strlen (URL))) { - /* The name of the file with the link will be the FileName.url */ - snprintf (Path,sizeof (Path),"%s/%s", - Gbl.FileBrowser.Path.AboveRootFolder, - Gbl.FileBrowser.FilFolLnk.Full); - if (strlen (Path) + 1 + strlen (FileName) + strlen (".url") > PATH_MAX) - Err_ShowErrorAndExit ("Path is too long."); - Str_Concat (Path,"/",sizeof (Path) - 1); - Str_Concat (Path,FileName,sizeof (Path) - 1); - Str_Concat (Path,".url",sizeof (Path) - 1); + if (Gbl.FileBrowser.NewFilFolLnkName[0]) + /* + Gbl.FileBrowser.NewFilFolLnkName holds the name given by me in the form + Example: + Name given by me: intel-architectures.pdf + File in swad: intel-architectures.pdf.url + */ + Str_Copy (URLWithoutEndingSlash,Gbl.FileBrowser.NewFilFolLnkName, + sizeof (URLWithoutEndingSlash) - 1); + else + /* + Gbl.FileBrowser.NewFilFolLnkName is empty + URL holds the URL given by me in the form + Example: + URL: http://www.intel.es/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf + File in swad: 64-ia-32-architectures-software-developer-manual-325462.pdf.url + */ + Str_Copy (URLWithoutEndingSlash,URL, + sizeof (URLWithoutEndingSlash) - 1); - /* Check if the URL file exists */ - if (Fil_CheckIfPathExists (Path)) - Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name, - FileName); - else // URL file does not exist + /* Remove possible final '/' from URL */ + if (URLWithoutEndingSlash[LengthURL - 1] == '/') + URLWithoutEndingSlash[LengthURL - 1] = '\0'; + + /* Get the last name in URL-without-ending-slash */ + Str_SplitFullPathIntoPathAndFileName (URLWithoutEndingSlash, + URLUntilLastFilename, + FileName); + + /* Convert the last name in URL to a valid filename */ + if (Str_ConvertFilFolLnkNameToValid (FileName)) { - /***** Create the new file with the URL *****/ - if ((FileURL = fopen (Path,"wb")) != NULL) + /* The name of the file with the link will be the FileName.url */ + snprintf (Path,sizeof (Path),"%s/%s", + Gbl.FileBrowser.Path.AboveRootFolder, + Gbl.FileBrowser.FilFolLnk.Full); + if (strlen (Path) + 1 + strlen (FileName) + strlen (".url") > PATH_MAX) + Err_ShowErrorAndExit ("Path is too long."); + Str_Concat (Path,"/",sizeof (Path) - 1); + Str_Concat (Path,FileName,sizeof (Path) - 1); + Str_Concat (Path,".url",sizeof (Path) - 1); + + /* Check if the URL file exists */ + if (Fil_CheckIfPathExists (Path)) + Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_link_X_because_there_is_already_a_folder_or_a_link_with_that_name, + FileName); + else // URL file does not exist { - /* Write URL */ - fprintf (FileURL,"%s",URL); - - /* Close file */ - fclose (FileURL); - - /* Check if quota has been exceeded */ - BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); - BrwSiz_SetMaxQuota (Size); - if (BrwSiz_CheckIfQuotaExceded (Size)) + /***** Create the new file with the URL *****/ + if ((FileURL = fopen (Path,"wb")) != NULL) { - Fil_RemoveTree (Path); - Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota, - FileName); - } - else - { - /* Remove affected clipboards */ - Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, - Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Usrs.Other.UsrDat.UsrCod); + /* Write URL */ + fprintf (FileURL,"%s",URL); - /* Add path where new file is created to table of expanded folders */ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); + /* Close file */ + fclose (FileURL); - /* Add entry to the table of files/folders */ - snprintf (PathCompleteInTreeIncludingFile, - sizeof (PathCompleteInTreeIncludingFile), - "%s/%s.url", - Gbl.FileBrowser.FilFolLnk.Full,FileName); - FilCod = Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_LINK, - PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT); + /* Check if quota has been exceeded */ + BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Path.RootFolder); + BrwSiz_SetMaxQuota (Size); + if (BrwSiz_CheckIfQuotaExceded (Size)) + { + Fil_RemoveTree (Path); + Ale_ShowAlert (Ale_WARNING,Txt_Can_not_create_the_link_X_because_it_would_exceed_the_disk_quota, + FileName); + } + else + { + /* Remove affected clipboards */ + Brw_DB_RemoveAffectedClipboards (Gbl.FileBrowser.Type, + Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Usrs.Other.UsrDat.UsrCod); - /* Show message of confirmation */ - Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, - Gbl.FileBrowser.Level, - Brw_IS_FOLDER, - Gbl.FileBrowser.FilFolLnk.Name, - FileNameToShow); // Folder name - Ale_ShowAlert (Ale_SUCCESS,Txt_The_link_X_has_been_placed_inside_the_folder_Y, - FileName,FileNameToShow); + /* Add path where new file is created to table of expanded folders */ + Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); - FileMetadata.FilCod = FilCod; - Brw_GetFileMetadataByCod (&FileMetadata); + /* Add entry to the table of files/folders */ + snprintf (PathCompleteInTreeIncludingFile, + sizeof (PathCompleteInTreeIncludingFile), + "%s/%s.url", + Gbl.FileBrowser.FilFolLnk.Full,FileName); + FilCod = Brw_DB_AddPath (Gbl.Usrs.Me.UsrDat.UsrCod,Brw_IS_LINK, + PathCompleteInTreeIncludingFile,false,Brw_LICENSE_DEFAULT); - /* Notify new file */ - if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) - switch (Gbl.FileBrowser.Type) - { - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FilCod); - break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FilCod); - break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FilCod); - break; - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FilCod); - break; - default: - break; - } + /* Show message of confirmation */ + Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, + Gbl.FileBrowser.Level, + Brw_IS_FOLDER, + Gbl.FileBrowser.FilFolLnk.Name, + FileNameToShow); // Folder name + Ale_ShowAlert (Ale_SUCCESS,Txt_The_link_X_has_been_placed_inside_the_folder_Y, + FileName,FileNameToShow); + + FileMetadata.FilCod = FilCod; + Brw_GetFileMetadataByCod (&FileMetadata); + + /* Notify new file */ + if (!Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata)) + switch (Gbl.FileBrowser.Type) + { + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_DOC_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_DOCUMENT_FILE,FilCod); + break; + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_TCH_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_TEACHERS_FILE,FilCod); + break; + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_SHR_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_SHARED_FILE,FilCod); + break; + case Brw_ADMI_MRK_CRS: + case Brw_ADMI_MRK_GRP: + Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_MARKS_FILE,FilCod); + break; + default: + break; + } + } } } } + else // Link URL not valid + Ale_ShowAlert (Ale_WARNING,Txt_UPLOAD_FILE_Invalid_link); } else // Link URL not valid Ale_ShowAlert (Ale_WARNING,Txt_UPLOAD_FILE_Invalid_link); - } - else // Link URL not valid - 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 *****/ Brw_ShowAgainFileBrowserOrWorks (); @@ -7313,358 +7372,350 @@ void Brw_ShowFileMetadata (void) } } - if (ICanView == Usr_I_CAN) + switch (ICanView) { - if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || - FileMetadata.FilFolLnk.Type == Brw_IS_LINK) - { - /***** Update number of views *****/ - Brw_GetAndUpdateFileViews (&FileMetadata); - - /***** Get data of file/folder publisher *****/ - if (FileMetadata.PublisherUsrCod > 0) + case Usr_I_CAN: + if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || + FileMetadata.FilFolLnk.Type == Brw_IS_LINK) { - /***** Initialize structure with publisher's data *****/ - Usr_UsrDataConstructor (&PublisherUsrDat); + /***** Update number of views *****/ + Brw_GetAndUpdateFileViews (&FileMetadata); - PublisherUsrDat.UsrCod = FileMetadata.PublisherUsrCod; - FileHasPublisher = Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&PublisherUsrDat, - Usr_DONT_GET_PREFS, - Usr_DONT_GET_ROLE_IN_CRS); - } - else - FileHasPublisher = false; // Get user's data from database - - /***** Get link to download the file *****/ - if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) - URL[0] = '\0'; - else - Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path, - FileMetadata.FilFolLnk.Name, - URL); - - /***** Can I edit the properties of the file? *****/ - IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod); - ICanEdit = Brw_CheckIfICanEditFileMetadata (IAmTheOwner); - - /***** Name of the file/link to be shown *****/ - Brw_GetFileNameToShow (FileMetadata.FilFolLnk.Type, - FileMetadata.FilFolLnk.Name, - FileNameToShow); - - /***** Begin box *****/ - // Put icon to get link? - if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk && - (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links - FileMetadata.FilFolLnk.Type == Brw_IS_LINK) && - Rsc_CheckIfICanGetLink () == Usr_I_CAN) - Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,&FileMetadata, - NULL); - else - Box_BoxShadowBegin (NULL,NULL,NULL, - NULL); - - - /***** Begin form to update the metadata of a file *****/ - if (ICanEdit == Usr_I_CAN) // I can edit file properties - { - /* Can the file be public? */ - switch (Gbl.FileBrowser.Type) + /***** Get data of file/folder publisher *****/ + if (FileMetadata.PublisherUsrCod > 0) { - case Brw_ADMI_DOC_INS: - case Brw_ADMI_SHR_INS: - case Brw_ADMI_DOC_CTR: - case Brw_ADMI_SHR_CTR: - case Brw_ADMI_DOC_DEG: - case Brw_ADMI_SHR_DEG: - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_SHR_CRS: - ICanChangePublic = Usr_I_CAN; - break; - default: - ICanChangePublic = Usr_I_CAN_NOT; - break; + /***** Initialize structure with publisher's data *****/ + Usr_UsrDataConstructor (&PublisherUsrDat); + + PublisherUsrDat.UsrCod = FileMetadata.PublisherUsrCod; + FileHasPublisher = Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&PublisherUsrDat, + Usr_DONT_GET_PREFS, + Usr_DONT_GET_ROLE_IN_CRS); + } + else + FileHasPublisher = false; // Get user's data from database + + /***** Get link to download the file *****/ + if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) + URL[0] = '\0'; + else + Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path, + FileMetadata.FilFolLnk.Name, + URL); + + /***** Can I edit the properties of the file? *****/ + IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod); + ICanEdit = Brw_CheckIfICanEditFileMetadata (IAmTheOwner); + + /***** Name of the file/link to be shown *****/ + Brw_GetFileNameToShow (FileMetadata.FilFolLnk.Type, + FileMetadata.FilFolLnk.Name, + FileNameToShow); + + /***** Begin box *****/ + // Put icon to get link? + if ((Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk && + (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links + FileMetadata.FilFolLnk.Type == Brw_IS_LINK) && + Rsc_CheckIfICanGetLink ()) == Usr_I_CAN) + Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile, + &FileMetadata,NULL); + else + Box_BoxShadowBegin (NULL,NULL,NULL,NULL); + + + /***** Begin form to update the metadata of a file *****/ + if (ICanEdit == Usr_I_CAN) // I can edit file properties + { + /* Can the file be public? */ + switch (Gbl.FileBrowser.Type) + { + case Brw_ADMI_DOC_INS: case Brw_ADMI_SHR_INS: + case Brw_ADMI_DOC_CTR: case Brw_ADMI_SHR_CTR: + case Brw_ADMI_DOC_DEG: case Brw_ADMI_SHR_DEG: + case Brw_ADMI_DOC_CRS: case Brw_ADMI_SHR_CRS: + ICanChangePublic = Usr_I_CAN; + break; + default: + ICanChangePublic = Usr_I_CAN_NOT; + break; + } + + Frm_BeginForm (Brw_ActRecDatFile[Gbl.FileBrowser.Type]); + Brw_PutParsFileBrowser (NULL, // Not used + NULL, // Not used + Brw_IS_UNKNOWN, // Not used + FileMetadata.FilCod); } - Frm_BeginForm (Brw_ActRecDatFile[Gbl.FileBrowser.Type]); - Brw_PutParsFileBrowser (NULL, // Not used - NULL, // Not used - Brw_IS_UNKNOWN, // Not used - FileMetadata.FilCod); - } + /***** Begin table *****/ + HTM_TABLE_BeginWidePadding (2); - /***** Begin table *****/ - HTM_TABLE_BeginWidePadding (2); - - /***** Link to download the file *****/ - HTM_TR_Begin (NULL); - - HTM_TD_Begin ("colspan=\"2\" class=\"CM\""); - Brw_WriteBigLinkToDownloadFile (URL,&FileMetadata,FileNameToShow); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Filename *****/ - HTM_TR_Begin (NULL); - - Frm_LabelColumn ("RT",NULL,Txt_Filename); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - Brw_WriteSmallLinkToDownloadFile (URL,&FileMetadata,FileNameToShow); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Publisher's data *****/ - HTM_TR_Begin (NULL); - - Frm_LabelColumn ("RT",NULL,Txt_Uploaded_by); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - if (FileHasPublisher) - { - /* Show photo */ - Pho_ShowUsrPhotoIfAllowed (&PublisherUsrDat, - ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); - - /* Write name */ - HTM_NBSP (); - HTM_Txt (PublisherUsrDat.FullName); - } - else - /* Unknown publisher */ - HTM_Txt (Txt_ROLES_SINGUL_Abc[Rol_UNK][Usr_SEX_UNKNOWN]); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Free memory used for publisher's data *****/ - if (FileMetadata.PublisherUsrCod > 0) - Usr_UsrDataDestructor (&PublisherUsrDat); - - /***** Write the file size *****/ - Fil_WriteFileSizeFull ((double) FileMetadata.Size,FileSizeStr); - HTM_TR_Begin (NULL); - - Frm_LabelColumn ("RT",NULL,Txt_File_size); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - HTM_Txt (FileSizeStr); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Write the date *****/ - HTM_TR_Begin (NULL); - - Frm_LabelColumn ("RT",NULL,Txt_Date_of_creation); - - HTM_TD_Begin ("id=\"filedate\" class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - Dat_WriteLocalDateHMSFromUTC ("filedate",FileMetadata.Time, - Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA, - true,true,true,0x7); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Private or public? *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",ICanChangePublic == Usr_I_CAN ? "PublicFile" : - NULL, - Txt_Availability); - - /* Data */ - HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", - The_GetSuffix ()); - if (ICanChangePublic == Usr_I_CAN) // I can change file to public - { - HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, - "id=\"PublicFile\" name=\"PublicFile\" class=\"PUBLIC_FILE\""); - HTM_OPTION (HTM_Type_STRING,"N", - FileMetadata.IsPublic ? HTM_OPTION_UNSELECTED : - HTM_OPTION_SELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_Private_available_to_certain_users_identified); - HTM_OPTION (HTM_Type_STRING,"Y", - FileMetadata.IsPublic ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_Public_open_educational_resource_OER_for_everyone); - HTM_SELECT_End (); - } - else // I can not edit file properties - HTM_Txt (FileMetadata.IsPublic ? Txt_Public_open_educational_resource_OER_for_everyone : - Txt_Private_available_to_certain_users_identified); - HTM_TD_End (); - - HTM_TR_End (); - - /***** License *****/ - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT",ICanEdit == Usr_I_CAN ? "License" : - NULL, - Txt_License); - - /* Data */ - HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", - The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) // I can edit file properties - { - HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, - "id=\"License\" name=\"License\" class=\"LICENSE\""); - for (License = (Brw_License_t) 0; - License <= (Brw_License_t) (Brw_NUM_LICENSES - 1); - License++) - { - LicenseUnsigned = (unsigned) License; - HTM_OPTION (HTM_Type_UNSIGNED,&LicenseUnsigned, - License == FileMetadata.License ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_LICENSES[License]); - } - HTM_SELECT_End (); - } - else // I can not edit file properties - HTM_Txt (Txt_LICENSES[FileMetadata.License]); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Write my number of views *****/ - if (Gbl.Usrs.Me.Logged) - { + /***** Link to download the file *****/ HTM_TR_Begin (NULL); - Frm_LabelColumn ("RT",NULL,Txt_My_views); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - HTM_Unsigned (FileMetadata.NumMyViews); + HTM_TD_Begin ("colspan=\"2\" class=\"CM\""); + Brw_WriteBigLinkToDownloadFile (URL,&FileMetadata,FileNameToShow); HTM_TD_End (); HTM_TR_End (); + + /***** Filename *****/ + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_Filename); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + Brw_WriteSmallLinkToDownloadFile (URL,&FileMetadata,FileNameToShow); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Publisher's data *****/ + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_Uploaded_by); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + if (FileHasPublisher) + { + /* Show photo */ + Pho_ShowUsrPhotoIfAllowed (&PublisherUsrDat, + ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); + + /* Write name */ + HTM_NBSP (); + HTM_Txt (PublisherUsrDat.FullName); + } + else + /* Unknown publisher */ + HTM_Txt (Txt_ROLES_SINGUL_Abc[Rol_UNK][Usr_SEX_UNKNOWN]); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Free memory used for publisher's data *****/ + if (FileMetadata.PublisherUsrCod > 0) + Usr_UsrDataDestructor (&PublisherUsrDat); + + /***** Write the file size *****/ + Fil_WriteFileSizeFull ((double) FileMetadata.Size,FileSizeStr); + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_File_size); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + HTM_Txt (FileSizeStr); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Write the date *****/ + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_Date_of_creation); + + HTM_TD_Begin ("id=\"filedate\" class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + Dat_WriteLocalDateHMSFromUTC ("filedate",FileMetadata.Time, + Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA, + true,true,true,0x7); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Private or public? *****/ + HTM_TR_Begin (NULL); + + /* Label */ + Frm_LabelColumn ("RT",ICanChangePublic == Usr_I_CAN ? "PublicFile" : + NULL, + Txt_Availability); + + /* Data */ + HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", + The_GetSuffix ()); + if (ICanChangePublic == Usr_I_CAN) // I can change file to public + { + HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, + "id=\"PublicFile\" name=\"PublicFile\" class=\"PUBLIC_FILE\""); + HTM_OPTION (HTM_Type_STRING,"N", + FileMetadata.IsPublic ? HTM_OPTION_UNSELECTED : + HTM_OPTION_SELECTED, + HTM_OPTION_ENABLED, + "%s",Txt_Private_available_to_certain_users_identified); + HTM_OPTION (HTM_Type_STRING,"Y", + FileMetadata.IsPublic ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",Txt_Public_open_educational_resource_OER_for_everyone); + HTM_SELECT_End (); + } + else // I can not edit file properties + HTM_Txt (FileMetadata.IsPublic ? Txt_Public_open_educational_resource_OER_for_everyone : + Txt_Private_available_to_certain_users_identified); + HTM_TD_End (); + + HTM_TR_End (); + + /***** License *****/ + HTM_TR_Begin (NULL); + + /* Label */ + Frm_LabelColumn ("RT",ICanEdit == Usr_I_CAN ? "License" : + NULL, + Txt_License); + + /* Data */ + HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", + The_GetSuffix ()); + if (ICanEdit == Usr_I_CAN) // I can edit file properties + { + HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, + "id=\"License\" name=\"License\" class=\"LICENSE\""); + for (License = (Brw_License_t) 0; + License <= (Brw_License_t) (Brw_NUM_LICENSES - 1); + License++) + { + LicenseUnsigned = (unsigned) License; + HTM_OPTION (HTM_Type_UNSIGNED,&LicenseUnsigned, + License == FileMetadata.License ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",Txt_LICENSES[License]); + } + HTM_SELECT_End (); + } + else // I can not edit file properties + HTM_Txt (Txt_LICENSES[FileMetadata.License]); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Write my number of views *****/ + if (Gbl.Usrs.Me.Logged) + { + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_My_views); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + HTM_Unsigned (FileMetadata.NumMyViews); + HTM_TD_End (); + + HTM_TR_End (); + } + + /***** Write number of identificated views *****/ + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_Identified_views); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + HTM_TxtF ("%u ",FileMetadata.NumViewsFromLoggedUsrs); + HTM_TxtF ("(%u %s)", + FileMetadata.NumLoggedUsrs, + FileMetadata.NumLoggedUsrs == 1 ? Txt_user[Usr_SEX_UNKNOWN] : + Txt_users[Usr_SEX_UNKNOWN]); + HTM_TD_End (); + + HTM_TR_End (); + + /***** Write number of public views *****/ + HTM_TR_Begin (NULL); + + Frm_LabelColumn ("RT",NULL,Txt_Public_views); + + HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", + The_GetSuffix ()); + HTM_Unsigned (FileMetadata.NumPublicViews); + HTM_TD_End (); + + HTM_TR_End (); + + /***** End table *****/ + HTM_TABLE_End (); + + /***** End form *****/ + if (ICanEdit == Usr_I_CAN) // I can edit file properties + { + Btn_PutButton (Btn_CONFIRM_BUTTON,Txt_Save_file_properties); + Frm_EndForm (); } - /***** Write number of identificated views *****/ - HTM_TR_Begin (NULL); + /***** End box *****/ + Box_BoxEnd (); - Frm_LabelColumn ("RT",NULL,Txt_Identified_views); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - HTM_TxtF ("%u ",FileMetadata.NumViewsFromLoggedUsrs); - HTM_TxtF ("(%u %s)", - FileMetadata.NumLoggedUsrs, - FileMetadata.NumLoggedUsrs == 1 ? Txt_user[Usr_SEX_UNKNOWN] : - Txt_users[Usr_SEX_UNKNOWN]); - HTM_TD_End (); - - HTM_TR_End (); - - /***** Write number of public views *****/ - HTM_TR_Begin (NULL); - - Frm_LabelColumn ("RT",NULL,Txt_Public_views); - - HTM_TD_Begin ("class=\"LB DAT_STRONG_%s\"", - The_GetSuffix ()); - HTM_Unsigned (FileMetadata.NumPublicViews); - HTM_TD_End (); - - HTM_TR_End (); - - /***** End table *****/ - HTM_TABLE_End (); - - /***** End form *****/ - if (ICanEdit == Usr_I_CAN) // I can edit file properties - { - Btn_PutButton (Btn_CONFIRM_BUTTON,Txt_Save_file_properties); - Frm_EndForm (); + /***** Mark possible notifications as seen *****/ + switch (Gbl.FileBrowser.Type) + { + case Brw_SHOW_DOC_CRS: + case Brw_SHOW_DOC_GRP: + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_DOC_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_DOCUMENT_FILE, + FileMetadata.FilCod); + break; + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_TCH_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_TEACHERS_FILE, + FileMetadata.FilCod); + break; + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_SHR_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_SHARED_FILE, + FileMetadata.FilCod); + break; + case Brw_SHOW_MRK_CRS: + case Brw_SHOW_MRK_GRP: + case Brw_ADMI_MRK_CRS: + case Brw_ADMI_MRK_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_MARKS_FILE, + FileMetadata.FilCod); + break; + default: + break; + } } - /***** End box *****/ - Box_BoxEnd (); - - /***** Mark possible notifications as seen *****/ + /***** Add paths until file to table of expanded folders *****/ + Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); + break; + case Usr_I_CAN_NOT: + default: + /***** Mark possible notifications about non visible file as removed *****/ switch (Gbl.FileBrowser.Type) { - case Brw_SHOW_DOC_CRS: - case Brw_SHOW_DOC_GRP: - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_DOCUMENT_FILE, - FileMetadata.FilCod); + case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_GRP: + case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, + FileMetadata.FilCod); break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_TEACHERS_FILE, - FileMetadata.FilCod); + case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, + FileMetadata.FilCod); break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_SHARED_FILE, - FileMetadata.FilCod); + case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, + FileMetadata.FilCod); break; - case Brw_SHOW_MRK_CRS: - case Brw_SHOW_MRK_GRP: - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_MARKS_FILE, - FileMetadata.FilCod); + case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_GRP: + case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, + FileMetadata.FilCod); break; default: break; } - } - /***** Add paths until file to table of expanded folders *****/ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); - } - else // ICanView == Usr_I_CAN_NOT - { - /***** Mark possible notifications about non visible file as removed *****/ - switch (Gbl.FileBrowser.Type) - { - case Brw_SHOW_DOC_CRS: - case Brw_SHOW_DOC_GRP: - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, - FileMetadata.FilCod); - break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, - FileMetadata.FilCod); - break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, - FileMetadata.FilCod); - break; - case Brw_SHOW_MRK_CRS: - case Brw_SHOW_MRK_GRP: - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, - FileMetadata.FilCod); - break; - default: - 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 *****/ @@ -7792,103 +7843,99 @@ void Brw_DownloadFile (void) } } - if (ICanView == Usr_I_CAN) + switch (ICanView) { - if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || - FileMetadata.FilFolLnk.Type == Brw_IS_LINK) - { - /***** Update number of views *****/ - Brw_GetAndUpdateFileViews (&FileMetadata); + case Usr_I_CAN: + if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || + FileMetadata.FilFolLnk.Type == Brw_IS_LINK) + { + /***** Update number of views *****/ + Brw_GetAndUpdateFileViews (&FileMetadata); - /***** Get link to download the file *****/ - if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) - URL[0] = '\0'; - else - Brw_GetLinkToDownloadFile (Gbl.FileBrowser.FilFolLnk.Path, - Gbl.FileBrowser.FilFolLnk.Name, - URL); + /***** Get link to download the file *****/ + if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) + URL[0] = '\0'; + else + Brw_GetLinkToDownloadFile (Gbl.FileBrowser.FilFolLnk.Path, + Gbl.FileBrowser.FilFolLnk.Name, + URL); - /***** Mark possible notifications as seen *****/ + /***** Mark possible notifications as seen *****/ + switch (Gbl.FileBrowser.Type) + { + case Brw_SHOW_DOC_CRS: + case Brw_SHOW_DOC_GRP: + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_DOC_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_DOCUMENT_FILE, + FileMetadata.FilCod); + break; + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_TCH_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_TEACHERS_FILE, + FileMetadata.FilCod); + break; + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_SHR_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_SHARED_FILE, + FileMetadata.FilCod); + break; + case Brw_SHOW_MRK_CRS: + case Brw_SHOW_MRK_GRP: + case Brw_ADMI_MRK_CRS: + case Brw_ADMI_MRK_GRP: + Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_MARKS_FILE, + FileMetadata.FilCod); + break; + default: + break; + } + } + + /***** Add paths until file to table of expanded folders *****/ + Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); + + /***** Download the file *****/ + fprintf (stdout,"Location: %s\n\n",URL); + // TODO: Put headers Content-type and Content-disposition: + // See: http://stackoverflow.com/questions/381954/how-do-i-fix-firefox-trying-to-save-image-as-htm + // http://elouai.com/force-download.php + Gbl.Layout.HTMLStartWritten = + Gbl.Layout.DivsEndWritten = + Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all + break; + case Usr_I_CAN_NOT: + default: + /***** Mark possible notifications about non visible file as removed *****/ switch (Gbl.FileBrowser.Type) { - case Brw_SHOW_DOC_CRS: - case Brw_SHOW_DOC_GRP: - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_DOCUMENT_FILE, - FileMetadata.FilCod); + case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_GRP: + case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, + FileMetadata.FilCod); break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_TEACHERS_FILE, - FileMetadata.FilCod); + case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, + FileMetadata.FilCod); break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_SHARED_FILE, - FileMetadata.FilCod); + case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, + FileMetadata.FilCod); break; - case Brw_SHOW_MRK_CRS: - case Brw_SHOW_MRK_GRP: - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_DB_MarkNotifAsSeenUsingCod (Ntf_EVENT_MARKS_FILE, - FileMetadata.FilCod); + case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_GRP: + case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_GRP: + Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, + FileMetadata.FilCod); break; default: break; } - } - /***** Add paths until file to table of expanded folders *****/ - Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); + Ale_ShowAlert (Ale_WARNING,Txt_The_file_of_folder_no_longer_exists_or_is_now_hidden); - /***** Download the file *****/ - fprintf (stdout,"Location: %s\n\n",URL); - // TODO: Put headers Content-type and Content-disposition: - // See: http://stackoverflow.com/questions/381954/how-do-i-fix-firefox-trying-to-save-image-as-htm - // http://elouai.com/force-download.php - Gbl.Layout.HTMLStartWritten = - Gbl.Layout.DivsEndWritten = - Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all - } - else // ICanView == Usr_I_CAN_NOT - { - /***** Mark possible notifications about non visible file as removed *****/ - switch (Gbl.FileBrowser.Type) - { - case Brw_SHOW_DOC_CRS: - case Brw_SHOW_DOC_GRP: - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_DOC_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, - FileMetadata.FilCod); - break; - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_TCH_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, - FileMetadata.FilCod); - break; - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_SHR_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, - FileMetadata.FilCod); - break; - case Brw_SHOW_MRK_CRS: - case Brw_SHOW_MRK_GRP: - case Brw_ADMI_MRK_CRS: - case Brw_ADMI_MRK_GRP: - Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, - FileMetadata.FilCod); - break; - default: - break; - } - - Ale_ShowAlert (Ale_WARNING,Txt_The_file_of_folder_no_longer_exists_or_is_now_hidden); - - /***** Show again the file browser *****/ - Brw_ShowAgainFileBrowserOrWorks (); + /***** Show again the file browser *****/ + Brw_ShowAgainFileBrowserOrWorks (); + break; } } diff --git a/swad_call_for_exam_database.c b/swad_call_for_exam_database.c index a08c8336c..bcf216408 100644 --- a/swad_call_for_exam_database.c +++ b/swad_call_for_exam_database.c @@ -85,12 +85,16 @@ unsigned Cfe_DB_GetCallsForExamsInCurrentCrs (MYSQL_RES **mysql_res) char SubQueryStatus[64]; /***** Build subquery about status depending on my role *****/ - if (Cfe_CheckIfICanEditCallsForExams () == Usr_I_CAN) - sprintf (SubQueryStatus,"Status<>%u", - (unsigned) Cfe_DELETED_CALL_FOR_EXAM); - else - sprintf (SubQueryStatus,"Status=%u", - (unsigned) Cfe_VISIBLE_CALL_FOR_EXAM); + switch (Cfe_CheckIfICanEditCallsForExams ()) + { + case Usr_I_CAN: + sprintf (SubQueryStatus,"Status<>%u",(unsigned) Cfe_DELETED_CALL_FOR_EXAM); + break; + 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) in current course from database *****/ diff --git a/swad_center.c b/swad_center.c index 34d6aa9b2..a9bac1539 100644 --- a/swad_center.c +++ b/swad_center.c @@ -793,39 +793,43 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places) /* Place */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgCtrPlc); - ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); - HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, - "name=\"PlcCod\"" - " class=\"PLC_SEL INPUT_%s\"", - The_GetSuffix ()); - HTM_OPTION (HTM_Type_STRING,"0", - Ctr->Specific.PlcCod == 0 ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_Another_place); - for (NumPlc = 0; - NumPlc < Places->Num; - NumPlc++) - { - Plc = &Places->Lst[NumPlc]; - HTM_OPTION (HTM_Type_LONG,&Plc->PlcCod, - Plc->PlcCod == Ctr->Specific.PlcCod ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, + case Usr_I_CAN: + Frm_BeginForm (ActChgCtrPlc); + ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); + HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, + "name=\"PlcCod\"" + " class=\"PLC_SEL INPUT_%s\"", + The_GetSuffix ()); + HTM_OPTION (HTM_Type_STRING,"0", + Ctr->Specific.PlcCod == 0 ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, HTM_OPTION_ENABLED, - "%s",Plc->ShrtName); - } - HTM_SELECT_End (); - Frm_EndForm (); + "%s",Txt_Another_place); + for (NumPlc = 0; + NumPlc < Places->Num; + NumPlc++) + { + Plc = &Places->Lst[NumPlc]; + HTM_OPTION (HTM_Type_LONG,&Plc->PlcCod, + Plc->PlcCod == Ctr->Specific.PlcCod ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",Plc->ShrtName); + } + HTM_SELECT_End (); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + for (NumPlc = 0; + NumPlc < Places->Num; + NumPlc++) + if (Places->Lst[NumPlc].PlcCod == Ctr->Specific.PlcCod) + HTM_Txt (Places->Lst[NumPlc].ShrtName); + break; } - else - for (NumPlc = 0; - NumPlc < Places->Num; - NumPlc++) - if (Places->Lst[NumPlc].PlcCod == Ctr->Specific.PlcCod) - HTM_Txt (Places->Lst[NumPlc].ShrtName); HTM_TD_End (); /* Center short name and full name */ @@ -839,28 +843,30 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places) /* Center WWW */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgCtrWWW); - ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); - HTM_INPUT_URL ("WWW",Ctr->WWW,HTM_SUBMIT_ON_CHANGE, - "class=\"INPUT_WWW INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - Str_Copy (WWW,Ctr->WWW,sizeof (WWW) - 1); - HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); - HTM_A_Begin ("href=\"%s\" target=\"_blank\"" - " class=\"DAT_%s\" title=\"%s\"", - Ctr->WWW, - The_GetSuffix (), - Ctr->WWW); - HTM_Txt (WWW); - HTM_A_End (); - HTM_DIV_End (); + case Usr_I_CAN: + Frm_BeginForm (ActChgCtrWWW); + ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); + HTM_INPUT_URL ("WWW",Ctr->WWW,HTM_SUBMIT_ON_CHANGE, + "class=\"INPUT_WWW INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Str_Copy (WWW,Ctr->WWW,sizeof (WWW) - 1); + HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); + HTM_A_Begin ("href=\"%s\" target=\"_blank\"" + " class=\"DAT_%s\" title=\"%s\"", + Ctr->WWW, + The_GetSuffix (), + Ctr->WWW); + HTM_Txt (WWW); + HTM_A_End (); + HTM_DIV_End (); + break; } HTM_TD_End (); diff --git a/swad_changelog.h b/swad_changelog.h index e500fb6d1..cae6c453a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -633,10 +633,11 @@ Me sale este error, no s "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 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.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) diff --git a/swad_connected.c b/swad_connected.c index 9e00f210d..bb397cad0 100644 --- a/swad_connected.c +++ b/swad_connected.c @@ -539,7 +539,7 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role) const char *ClassTxt; long UsrCod; Usr_MeOrOther_t MeOrOther; - struct Usr_Data *UsrDat; + struct Usr_Data *UsrDat = NULL; // To avoid warning struct Usr_Data OtherUsrDat; /***** Get user's code from list *****/ @@ -552,7 +552,6 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role) UsrDat = &Gbl.Usrs.Me.UsrDat; break; case Usr_OTHER: - default: /***** Initialize structure with user's data *****/ OtherUsrDat.UsrCod = UsrCod; Usr_UsrDataConstructor (&OtherUsrDat); @@ -609,7 +608,6 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role) case Usr_ME: break; case Usr_OTHER: - default: /***** Free memory used for user's data *****/ Usr_UsrDataDestructor (&OtherUsrDat); break; diff --git a/swad_course.c b/swad_course.c index 37d2ab554..125284765 100644 --- a/swad_course.c +++ b/swad_course.c @@ -705,45 +705,53 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year) /* Course year */ HTM_TD_Begin ("class=\"CT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) - { - Frm_BeginForm (ActChgCrsYea); - ParCod_PutPar (ParCod_OthHie,Crs->HieCod); - HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, - "name=\"OthCrsYear\"" - " class=\"HIE_SEL_NARROW INPUT_%s\"", - The_GetSuffix ()); - for (YearAux = 0; - YearAux <= Deg_MAX_YEARS_PER_DEGREE; - YearAux++) // All the years are permitted - // because it's possible to move this course - // to another degree (with other active years) - HTM_OPTION (HTM_Type_UNSIGNED,&YearAux, - YearAux == Crs->Specific.Year ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",Txt_YEAR_OF_DEGREE[YearAux]); - HTM_SELECT_End (); - Frm_EndForm (); - } - else - HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]); + switch (ICanEdit) + { + case Usr_I_CAN: + Frm_BeginForm (ActChgCrsYea); + ParCod_PutPar (ParCod_OthHie,Crs->HieCod); + HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, + "name=\"OthCrsYear\"" + " class=\"HIE_SEL_NARROW INPUT_%s\"", + The_GetSuffix ()); + for (YearAux = 0; + YearAux <= Deg_MAX_YEARS_PER_DEGREE; + YearAux++) // All the years are permitted + // because it's possible to move this course + // to another degree (with other active years) + HTM_OPTION (HTM_Type_UNSIGNED,&YearAux, + YearAux == Crs->Specific.Year ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",Txt_YEAR_OF_DEGREE[YearAux]); + HTM_SELECT_End (); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]); + break; + } HTM_TD_End (); /* Institutional code of the course */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgInsCrsCod); - ParCod_PutPar (ParCod_OthHie,Crs->HieCod); - HTM_INPUT_TEXT ("InsCrsCod",Hie_MAX_CHARS_INSTITUTIONAL_COD, - Crs->InstitutionalCod,HTM_SUBMIT_ON_CHANGE, - "class=\"INPUT_INS_CODE INPUT_%s\"", - The_GetSuffix ()); - Frm_EndForm (); + case Usr_I_CAN: + Frm_BeginForm (ActChgInsCrsCod); + ParCod_PutPar (ParCod_OthHie,Crs->HieCod); + HTM_INPUT_TEXT ("InsCrsCod",Hie_MAX_CHARS_INSTITUTIONAL_COD, + Crs->InstitutionalCod,HTM_SUBMIT_ON_CHANGE, + "class=\"INPUT_INS_CODE INPUT_%s\"", + The_GetSuffix ()); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + HTM_Txt (Crs->InstitutionalCod); + break; } - else - HTM_Txt (Crs->InstitutionalCod); HTM_TD_End (); /* Course short name and full name */ diff --git a/swad_degree.c b/swad_degree.c index 45927e974..d8735770c 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -389,63 +389,69 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes) /* Degree type */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgDegTyp); - ParCod_PutPar (ParCod_OthHie,Deg->HieCod); - HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, - "name=\"OthDegTypCod\"" - " class=\"HIE_SEL_NARROW INPUT_%s\"", - The_GetSuffix ()); - for (NumDegTyp = 0; - NumDegTyp < DegTypes->Num; - NumDegTyp++) - { - DegTyp = &DegTypes->Lst[NumDegTyp]; - HTM_OPTION (HTM_Type_LONG,&DegTyp->DegTypCod, - DegTyp->DegTypCod == Deg->Specific.TypCod ? HTM_OPTION_SELECTED : - HTM_OPTION_UNSELECTED, - HTM_OPTION_ENABLED, - "%s",DegTyp->DegTypName); - } - HTM_SELECT_End (); - Frm_EndForm (); + case Usr_I_CAN: + Frm_BeginForm (ActChgDegTyp); + ParCod_PutPar (ParCod_OthHie,Deg->HieCod); + HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, + "name=\"OthDegTypCod\"" + " class=\"HIE_SEL_NARROW INPUT_%s\"", + The_GetSuffix ()); + for (NumDegTyp = 0; + NumDegTyp < DegTypes->Num; + NumDegTyp++) + { + DegTyp = &DegTypes->Lst[NumDegTyp]; + HTM_OPTION (HTM_Type_LONG,&DegTyp->DegTypCod, + DegTyp->DegTypCod == Deg->Specific.TypCod ? HTM_OPTION_SELECTED : + HTM_OPTION_UNSELECTED, + HTM_OPTION_ENABLED, + "%s",DegTyp->DegTypName); + } + HTM_SELECT_End (); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + for (NumDegTyp = 0; + NumDegTyp < DegTypes->Num; + NumDegTyp++) + { + DegTyp = &DegTypes->Lst[NumDegTyp]; + if (DegTyp->DegTypCod == Deg->Specific.TypCod) + HTM_Txt (DegTyp->DegTypName); + } + break; } - else - for (NumDegTyp = 0; - NumDegTyp < DegTypes->Num; - NumDegTyp++) - { - DegTyp = &DegTypes->Lst[NumDegTyp]; - if (DegTyp->DegTypCod == Deg->Specific.TypCod) - HTM_Txt (DegTyp->DegTypName); - } HTM_TD_End (); /* Degree WWW */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgDegWWW); - ParCod_PutPar (ParCod_OthHie,Deg->HieCod); - HTM_INPUT_URL ("WWW",Deg->WWW,HTM_SUBMIT_ON_CHANGE, - "class=\"INPUT_WWW INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - Str_Copy (WWW,Deg->WWW,sizeof (WWW) - 1); - HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); - HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" - " class=\"DAT_%s\"", - Deg->WWW, - Deg->WWW, - The_GetSuffix ()); - HTM_Txt (WWW); - HTM_A_End (); - HTM_DIV_End (); + case Usr_I_CAN: + Frm_BeginForm (ActChgDegWWW); + ParCod_PutPar (ParCod_OthHie,Deg->HieCod); + HTM_INPUT_URL ("WWW",Deg->WWW,HTM_SUBMIT_ON_CHANGE, + "class=\"INPUT_WWW INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Str_Copy (WWW,Deg->WWW,sizeof (WWW) - 1); + HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); + HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" + " class=\"DAT_%s\"", + Deg->WWW, + Deg->WWW, + The_GetSuffix ()); + HTM_Txt (WWW); + HTM_A_End (); + HTM_DIV_End (); + break; } HTM_TD_End (); diff --git a/swad_enrolment.c b/swad_enrolment.c index 16030a1a1..e88bb8ed7 100644 --- a/swad_enrolment.c +++ b/swad_enrolment.c @@ -2443,12 +2443,18 @@ void Enr_ReqRegRemTch (void) static void Enr_ReqRegRemUsr (Rol_Role_t Role) { - if (Adm_CheckIfICanAdminOtherUsrs () == Usr_I_CAN) - /***** Form to request the user's ID of another user *****/ - Enr_ReqAnotherUsrIDToRegisterRemove (Role); - else - /***** Form to request if register/remove me *****/ - Enr_AskIfRegRemMe (Role); + switch (Adm_CheckIfICanAdminOtherUsrs ()) + { + case Usr_I_CAN: + /***** Form to request the user's ID of another user *****/ + Enr_ReqAnotherUsrIDToRegisterRemove (Role); + break; + case Usr_I_CAN_NOT: + default: + /***** Form to request if register/remove me *****/ + Enr_AskIfRegRemMe (Role); + break; + } } /*****************************************************************************/ @@ -2672,12 +2678,16 @@ void Enr_ReqRemUsrFromCrs (void) { /***** Get user to be removed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN) - Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat); - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } + switch (Enr_CheckIfICanRemUsrFromCrs ()) + { + case Usr_I_CAN: + Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; + } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -2692,14 +2702,19 @@ void Enr_RemUsrFromCrs1 (void) { /***** Get user to be removed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN) - Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,&Gbl.Hierarchy.Node[Hie_CRS], - Enr_DO_NOT_REMOVE_USR_PRODUCTION, - Cns_VERBOSE); - else - Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); - } + switch (Enr_CheckIfICanRemUsrFromCrs ()) + { + case Usr_I_CAN: + Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat, + &Gbl.Hierarchy.Node[Hie_CRS], + Enr_DO_NOT_REMOVE_USR_PRODUCTION, + Cns_VERBOSE); + break; + case Usr_I_CAN_NOT: + default: + Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; + } else Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -2951,7 +2966,6 @@ void Enr_ModifyUsr1 (void) Grp_ChangeMyGrps (Cns_QUIET); break; case Usr_OTHER: - default: Grp_ChangeOtherUsrGrps (); break; } @@ -3206,7 +3220,6 @@ static void Enr_EffectivelyRemUsrFromCrs (struct Usr_Data *UsrDat, Rol_SetMyRoles (); break; case Usr_OTHER: - default: /* Now he/she does not belong to current course */ UsrDat->Accepted = false; UsrDat->Roles.InCurrentCrs = Rol_USR; diff --git a/swad_exam_database.c b/swad_exam_database.c index e2b504bfe..9da5d8b65 100644 --- a/swad_exam_database.c +++ b/swad_exam_database.c @@ -2325,7 +2325,6 @@ unsigned Exa_DB_GetResults (MYSQL_RES **mysql_res, Err_NotEnoughMemoryExit (); break; case Usr_OTHER: // A teacher/admin watching the results of other users - default: if (asprintf (&HidSesSubQuery,"%s","") < 0) Err_NotEnoughMemoryExit (); break; @@ -2368,7 +2367,6 @@ unsigned Exa_DB_GetResults (MYSQL_RES **mysql_res, Err_NotEnoughMemoryExit (); break; case Usr_OTHER: // A teacher/admin watching the results of other users - default: if (asprintf (&HidExaSubQuery,"%s","") < 0) Err_NotEnoughMemoryExit (); break; diff --git a/swad_exam_print.c b/swad_exam_print.c index 263cf8d0e..46a852d3a 100644 --- a/swad_exam_print.c +++ b/swad_exam_print.c @@ -178,55 +178,59 @@ void ExaPrn_ShowExamPrint (void) ExaSes_GetAndCheckPars (&Exams,&Session); /***** Check if I can access to this session *****/ - if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN) + switch (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session)) { - /***** Set basic data of exam print *****/ - Print.SesCod = Session.SesCod; - Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; - - /***** Get exam print data from database *****/ - ExaPrn_GetPrintDataBySesCodAndUsrCod (&Print); - - if (Print.PrnCod <= 0) // Exam print does not exists ==> create it - { - /***** Set again basic data of exam print *****/ + case Usr_I_CAN: + /***** Set basic data of exam print *****/ Print.SesCod = Session.SesCod; Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; - /***** Get questions from database *****/ - ExaPrn_GetQuestionsForNewPrintFromDB (&Print,Exams.Exam.ExaCod); + /***** Get exam print data from database *****/ + ExaPrn_GetPrintDataBySesCodAndUsrCod (&Print); - if (Print.NumQsts.All) + if (Print.PrnCod <= 0) // Exam print does not exists ==> create it { - /***** Create new exam print in database *****/ - ExaPrn_CreatePrint (&Print); + /***** Set again basic data of exam print *****/ + Print.SesCod = Session.SesCod; + Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; + + /***** Get questions from database *****/ + ExaPrn_GetQuestionsForNewPrintFromDB (&Print,Exams.Exam.ExaCod); + + if (Print.NumQsts.All) + { + /***** Create new exam print in database *****/ + ExaPrn_CreatePrint (&Print); + + /***** Set log print code and action *****/ + ExaLog_SetPrnCod (Print.PrnCod); + ExaLog_SetAction (ExaLog_START_EXAM); + ExaLog_SetIfCanAnswer (true); + } + } + else // Exam print exists + { + /***** Get exam print data from database *****/ + ExaPrn_GetPrintDataBySesCodAndUsrCod (&Print); + + /***** Get questions and current user's answers from database *****/ + ExaPrn_GetPrintQuestionsFromDB (&Print); /***** Set log print code and action *****/ ExaLog_SetPrnCod (Print.PrnCod); - ExaLog_SetAction (ExaLog_START_EXAM); + ExaLog_SetAction (ExaLog_RESUME_EXAM); ExaLog_SetIfCanAnswer (true); } - } - else // Exam print exists - { - /***** Get exam print data from database *****/ - ExaPrn_GetPrintDataBySesCodAndUsrCod (&Print); - /***** Get questions and current user's answers from database *****/ - ExaPrn_GetPrintQuestionsFromDB (&Print); - - /***** Set log print code and action *****/ - ExaLog_SetPrnCod (Print.PrnCod); - ExaLog_SetAction (ExaLog_RESUME_EXAM); - ExaLog_SetIfCanAnswer (true); - } - - /***** Show test to be answered *****/ - ExaPrn_ShowExamPrintToFillIt (&Exams,&Print); + /***** Show test to be answered *****/ + ExaPrn_ShowExamPrintToFillIt (&Exams,&Print); + break; + case Usr_I_CAN_NOT: // Session not open or accessible + default: + /***** Show warning *****/ + Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam); + break; } - else // Session not open or accessible - /***** Show warning *****/ - Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam); } /*****************************************************************************/ @@ -996,42 +1000,44 @@ void ExaPrn_ReceivePrintAnswer (void) ExaLog_SetQstInd (QstInd); /***** Check if session if visible and open *****/ - if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN) + switch (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session)) { - /***** Set log open to true ****/ - ExaLog_SetIfCanAnswer (true); + case Usr_I_CAN: + /***** Set log open to true ****/ + ExaLog_SetIfCanAnswer (true); - /***** Get questions and current user's answers of exam print from database *****/ - ExaPrn_GetPrintQuestionsFromDB (&Print); + /***** Get questions and current user's answers of exam print from database *****/ + ExaPrn_GetPrintQuestionsFromDB (&Print); - /***** Get answers from form to assess a test *****/ - ExaPrn_GetAnswerFromForm (&Print,QstInd); + /***** Get answers from form to assess a test *****/ + ExaPrn_GetAnswerFromForm (&Print,QstInd); - /***** Update answer in database *****/ - /* Compute question score and store in database */ - ExaPrn_ComputeScoreAndStoreQuestionOfPrint (&Print,QstInd); + /***** Update answer in database *****/ + /* Compute question score and store in database */ + ExaPrn_ComputeScoreAndStoreQuestionOfPrint (&Print,QstInd); - /* Update exam print in database */ - Print.NumQsts.NotBlank = Exa_DB_GetNumQstsNotBlankInPrint (Print.PrnCod); - Print.Score.All = Exa_DB_ComputeTotalScoreOfPrint (Print.PrnCod); - Exa_DB_UpdatePrint (&Print); + /* Update exam print in database */ + Print.NumQsts.NotBlank = Exa_DB_GetNumQstsNotBlankInPrint (Print.PrnCod); + Print.Score.All = Exa_DB_ComputeTotalScoreOfPrint (Print.PrnCod); + Exa_DB_UpdatePrint (&Print); - /***** Show table with questions to answer *****/ - ExaPrn_ShowTableWithQstsToFill (&Exams,&Print); - } - else // Not accessible to answer - { - /***** Set log open to false ****/ - ExaLog_SetIfCanAnswer (false); + /***** Show table with questions to answer *****/ + ExaPrn_ShowTableWithQstsToFill (&Exams,&Print); + break; + case Usr_I_CAN_NOT: // Not accessible to answer + default: + /***** Set log open to false ****/ + ExaLog_SetIfCanAnswer (false); - /***** Show warning *****/ - Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam); + /***** Show warning *****/ + Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam); - /***** Form to end/close this exam print *****/ - Frm_BeginForm (ActEndExaPrn); - ExaSes_PutParsEdit (&Exams); - Btn_PutCreateButton (Txt_Continue); - Frm_EndForm (); + /***** Form to end/close this exam print *****/ + Frm_BeginForm (ActEndExaPrn); + ExaSes_PutParsEdit (&Exams); + Btn_PutCreateButton (Txt_Continue); + Frm_EndForm (); + break; } } diff --git a/swad_exam_result.c b/swad_exam_result.c index 569b7b9a8..f03ae9205 100644 --- a/swad_exam_result.c +++ b/swad_exam_result.c @@ -825,8 +825,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams, /* Write session title */ HTM_TD_Begin ("class=\"LT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); + The_GetSuffix (),The_GetColorRows ()); HTM_Txt (Session.Title); HTM_TD_End (); @@ -850,183 +849,224 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams, /* Write total number of questions */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - HTM_Unsigned (Print.NumQsts.All); - else - Ico_PutIconNotVisible (); + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + HTM_Unsigned (Print.NumQsts.All); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Valid questions */ HTM_TD_Begin ("class=\"RT DAT_GREEN_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Total) - HTM_Unsigned (Print.NumQsts.Valid.Total); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Total) + HTM_Unsigned (Print.NumQsts.Valid.Total); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Invalid questions */ HTM_TD_Begin ("class=\"RT DAT_RED_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - NumQstsInvalid = Print.NumQsts.All - Print.NumQsts.Valid.Total; - if (NumQstsInvalid) - HTM_Unsigned (NumQstsInvalid); - else - HTM_Light0 (); + case Usr_I_CAN: + NumQstsInvalid = Print.NumQsts.All - + Print.NumQsts.Valid.Total; + if (NumQstsInvalid) + HTM_Unsigned (NumQstsInvalid); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write number of correct questions */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Correct) - HTM_Unsigned (Print.NumQsts.Valid.Correct); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Correct) + HTM_Unsigned (Print.NumQsts.Valid.Correct); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write number of wrong questions */ HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Wrong.Negative) - HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Wrong.Negative) + HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Wrong.Zero) - HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Wrong.Zero) + HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Wrong.Positive) - HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Wrong.Positive) + HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write number of blank questions */ HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.Valid.Blank) - HTM_Unsigned (Print.NumQsts.Valid.Blank); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.Valid.Blank) + HTM_Unsigned (Print.NumQsts.Valid.Blank); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write score valid (taking into account only valid questions) */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - HTM_Double2Decimals (Print.Score.Valid); - HTM_Txt ("/"); - HTM_Unsigned (Print.NumQsts.Valid.Total); + case Usr_I_CAN: + HTM_Double2Decimals (Print.Score.Valid); + HTM_Txt ("/"); + HTM_Unsigned (Print.NumQsts.Valid.Total); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write average score per question (taking into account only valid questions) */ HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid / - (double) Print.NumQsts.Valid.Total : - 0.0); - else - Ico_PutIconNotVisible (); + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid / + (double) Print.NumQsts.Valid.Total : + 0.0); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Write grade over maximum grade (taking into account only valid questions) */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade); - TstPrn_ShowGrade (Grade,Exam.MaxGrade); - TotalGrade += Grade; + case Usr_I_CAN: + Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade); + TstPrn_ShowGrade (Grade,Exam.MaxGrade); + TotalGrade += Grade; + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Link to show this result */ - HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", - The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) + HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",The_GetColorRows ()); + switch (ICanView.Result) { - Exams->Exam.ExaCod = Session.ExaCod; - Exams->SesCod = Session.SesCod; - switch (MeOrOther) - { - case Usr_ME: - Frm_BeginForm (ActSeeOneExaResMe); - ExaSes_PutParsEdit (Exams); - Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneExaResMe); - break; - case Usr_OTHER: - Frm_BeginForm (ActSeeOneExaResOth); - ExaSes_PutParsEdit (Exams); - Usr_PutParOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod); - Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneExaResOth); - break; - } - Frm_EndForm (); + case Usr_I_CAN: + Exams->Exam.ExaCod = Session.ExaCod; + Exams->SesCod = Session.SesCod; + switch (MeOrOther) + { + case Usr_ME: + Frm_BeginForm (ActSeeOneExaResMe); + ExaSes_PutParsEdit (Exams); + Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneExaResMe); + break; + case Usr_OTHER: + Frm_BeginForm (ActSeeOneExaResOth); + ExaSes_PutParsEdit (Exams); + Usr_PutParOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod); + Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneExaResOth); + break; + } + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -1280,7 +1320,6 @@ void ExaRes_ShowOneExaResult (void) UsrDat = &Gbl.Usrs.Me.UsrDat; break; case Usr_OTHER: - default: UsrDat = &Gbl.Usrs.Other.UsrDat; Usr_GetParOtherUsrCodEncrypted (UsrDat); break; @@ -1403,12 +1442,18 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam, // 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 - if (ICanView->Result == Usr_I_CAN) - // Depends on 5 visibility icons associated to exam - ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN : - Usr_I_CAN_NOT; - else - ICanView->Score = Usr_I_CAN_NOT; + switch (ICanView->Result) + { + case Usr_I_CAN: + // Depends on 5 visibility icons associated to exam + ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN : + Usr_I_CAN_NOT; + break; + case Usr_I_CAN_NOT: + default: + ICanView->Score = Usr_I_CAN_NOT; + break; + } break; case Rol_NET: case Rol_TCH: @@ -1602,32 +1647,36 @@ static void ExaRes_ShowExamResultNumQsts (struct ExaPrn_Print *Print, /***** Number of questions *****/ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - if (ICanView->Result == Usr_I_CAN) + switch (ICanView->Result) { - HTM_TxtF ("%u",Print->NumQsts.All); - if (Print->NumQsts.All != Print->NumQsts.Valid.Total) - { - HTM_Txt (" ("); + case Usr_I_CAN: + HTM_TxtF ("%u",Print->NumQsts.All); + if (Print->NumQsts.All != Print->NumQsts.Valid.Total) + { + HTM_Txt (" ("); - /* Valid questions */ - HTM_SPAN_Begin ("class=\"DAT_GREEN_%s\"",The_GetSuffix ()); - HTM_TxtColonNBSP (Txt_QUESTIONS_valid); - HTM_Unsigned (Print->NumQsts.Valid.Total); - HTM_SPAN_End (); + /* Valid questions */ + HTM_SPAN_Begin ("class=\"DAT_GREEN_%s\"",The_GetSuffix ()); + HTM_TxtColonNBSP (Txt_QUESTIONS_valid); + HTM_Unsigned (Print->NumQsts.Valid.Total); + HTM_SPAN_End (); - HTM_TxtF ("; "); + HTM_TxtF ("; "); - /* Invalid questions */ - HTM_SPAN_Begin ("class=\"DAT_RED_%s\"",The_GetSuffix ()); - HTM_TxtColonNBSP (Txt_QUESTIONS_invalid); - HTM_Unsigned (Print->NumQsts.All - Print->NumQsts.Valid.Total); - HTM_SPAN_End (); + /* Invalid questions */ + HTM_SPAN_Begin ("class=\"DAT_RED_%s\"",The_GetSuffix ()); + HTM_TxtColonNBSP (Txt_QUESTIONS_invalid); + HTM_Unsigned (Print->NumQsts.All - Print->NumQsts.Valid.Total); + HTM_SPAN_End (); - HTM_Txt (")"); - } + HTM_Txt (")"); + } + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /***** Row end *****/ @@ -1656,19 +1705,25 @@ static void ExaRes_ShowExamResultNumAnss (struct ExaPrn_Print *Print, /***** Number of answers *****/ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - if (ICanView->Score == Usr_I_CAN) - HTM_TxtF ("%s(pi=1): %u; " - "%s(-1≤pi<0): %u; " - "%s(pi=0): %u; " - "%s(0<pi<1): %u; " - "%s(pi=0): %u", - Txt_ANSWERS_correct,Print->NumQsts.Valid.Correct, - Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Negative, - Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Zero, - Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Positive, - Txt_ANSWERS_blank ,Print->NumQsts.Valid.Blank); - else - Ico_PutIconNotVisible (); + switch (ICanView->Score) + { + case Usr_I_CAN: + HTM_TxtF ("%s(pi=1): %u; " + "%s(-1≤pi<0): %u; " + "%s(pi=0): %u; " + "%s(0<pi<1): %u; " + "%s(pi=0): %u", + Txt_ANSWERS_correct,Print->NumQsts.Valid.Correct, + Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Negative, + Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Zero, + Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Positive, + Txt_ANSWERS_blank ,Print->NumQsts.Valid.Blank); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /***** Row end *****/ @@ -1695,31 +1750,35 @@ static void ExaRes_ShowExamResultScore (struct ExaPrn_Print *Print, /***** Score *****/ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - if (ICanView->Score == Usr_I_CAN) + switch (ICanView->Score) { - /* Score counting all questions */ - if (Print->NumQsts.All == Print->NumQsts.Valid.Total) - HTM_STRONG_Begin (); - HTM_Double2Decimals (Print->Score.All); - HTM_Txt ("/"); - HTM_Unsigned (Print->NumQsts.All); - if (Print->NumQsts.All == Print->NumQsts.Valid.Total) - HTM_STRONG_End (); + case Usr_I_CAN: + /* Score counting all questions */ + if (Print->NumQsts.All == Print->NumQsts.Valid.Total) + HTM_STRONG_Begin (); + HTM_Double2Decimals (Print->Score.All); + HTM_Txt ("/"); + HTM_Unsigned (Print->NumQsts.All); + if (Print->NumQsts.All == Print->NumQsts.Valid.Total) + HTM_STRONG_End (); - /* Scoure counting only valid questions */ - if (Print->NumQsts.All != Print->NumQsts.Valid.Total) - { - HTM_Txt ("; "); - HTM_TxtColonNBSP (Txt_valid_score); - HTM_STRONG_Begin (); - HTM_Double2Decimals (Print->Score.Valid); - HTM_Txt ("/"); - HTM_Unsigned (Print->NumQsts.Valid.Total); - HTM_STRONG_End (); - } + /* Scoure counting only valid questions */ + if (Print->NumQsts.All != Print->NumQsts.Valid.Total) + { + HTM_Txt ("; "); + HTM_TxtColonNBSP (Txt_valid_score); + HTM_STRONG_Begin (); + HTM_Double2Decimals (Print->Score.Valid); + HTM_Txt ("/"); + HTM_Unsigned (Print->NumQsts.Valid.Total); + HTM_STRONG_End (); + } + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /***** Row end *****/ @@ -1747,27 +1806,33 @@ static void ExaRes_ShowExamResultGrade (const struct Exa_Exam *Exam, /***** Grade *****/ HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); - if (ICanView->Score == Usr_I_CAN) + switch (ICanView->Score) { - /* Grade counting all questions */ - if (Print->NumQsts.All == Print->NumQsts.Valid.Total) - HTM_STRONG_Begin (); - TstPrn_ComputeAndShowGrade (Print->NumQsts.All,Print->Score.All,Exam->MaxGrade); - if (Print->NumQsts.All == Print->NumQsts.Valid.Total) - HTM_STRONG_End (); + case Usr_I_CAN: + /* Grade counting all questions */ + if (Print->NumQsts.All == Print->NumQsts.Valid.Total) + HTM_STRONG_Begin (); + TstPrn_ComputeAndShowGrade (Print->NumQsts.All,Print->Score.All,Exam->MaxGrade); + if (Print->NumQsts.All == Print->NumQsts.Valid.Total) + HTM_STRONG_End (); - /* Grade counting only valid questions */ - if (Print->NumQsts.All != Print->NumQsts.Valid.Total) - { - HTM_Txt ("; "); - HTM_TxtColonNBSP (Txt_valid_grade); - HTM_STRONG_Begin (); - TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,Print->Score.Valid,Exam->MaxGrade); - HTM_STRONG_End (); - } + /* Grade counting only valid questions */ + if (Print->NumQsts.All != Print->NumQsts.Valid.Total) + { + HTM_Txt ("; "); + HTM_TxtColonNBSP (Txt_valid_grade); + HTM_STRONG_Begin (); + TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total, + Print->Score.Valid, + Exam->MaxGrade); + HTM_STRONG_End (); + } + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /***** Row end *****/ diff --git a/swad_exam_session.c b/swad_exam_session.c index b2ffb50a4..3360f3838 100644 --- a/swad_exam_session.c +++ b/swad_exam_session.c @@ -500,27 +500,29 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams, /***** Session title *****/ HTM_ARTICLE_Begin (Anchor); - if (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session) == Usr_I_CAN) + switch (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session)) { - Frm_BeginForm (ActSeeExaPrn); - Exa_PutPars (Exams); - ParCod_PutPar (ParCod_Ses,Session->SesCod); - HTM_BUTTON_Submit_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play : - Txt_Resume, - "class=\"LT BT_LINK %s_%s\"", - HidVis_TitleClass[Session->HiddenOrVisible], - The_GetSuffix ()); + case Usr_I_CAN: + Frm_BeginForm (ActSeeExaPrn); + Exa_PutPars (Exams); + ParCod_PutPar (ParCod_Ses,Session->SesCod); + HTM_BUTTON_Submit_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play : + Txt_Resume, + "class=\"LT BT_LINK %s_%s\"", + HidVis_TitleClass[Session->HiddenOrVisible], + The_GetSuffix ()); + HTM_Txt (Session->Title); + HTM_BUTTON_End (); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + HTM_SPAN_Begin ("class=\"%s_%s\"", + HidVis_TitleClass[Session->HiddenOrVisible], + The_GetSuffix ()); HTM_Txt (Session->Title); - HTM_BUTTON_End (); - Frm_EndForm (); - } - else - { - HTM_SPAN_Begin ("class=\"%s_%s\"", - HidVis_TitleClass[Session->HiddenOrVisible], - The_GetSuffix ()); - HTM_Txt (Session->Title); - HTM_SPAN_End (); + HTM_SPAN_End (); + break; } HTM_ARTICLE_End (); @@ -650,25 +652,27 @@ static void ExaSes_ListOneOrMoreSessionsResultTch (struct Exa_Exams *Exams, "trophy.svg",Ico_BLACK); /***** Check if visibility of session results can be changed *****/ - if (ExaSes_CheckIfICanChangeVisibilityOfResults (Session) == Usr_I_CAN) + switch (ExaSes_CheckIfICanChangeVisibilityOfResults (Session)) { - /***** Put form to change visibility of session results *****/ - if (Session->ShowUsrResults) - Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, - ExaSes_PutParsEdit,Exams, - "eye.svg",Ico_GREEN); - else - Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, - ExaSes_PutParsEdit,Exams, - "eye-slash.svg",Ico_RED); - } - else // Don't put form - { - /***** Put icon showing the current visibility of session results *****/ - if (Session->ShowUsrResults) - Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); - else - Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results); + case Usr_I_CAN: + /***** Put form to change visibility of session results *****/ + if (Session->ShowUsrResults) + Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, + ExaSes_PutParsEdit,Exams, + "eye.svg",Ico_GREEN); + else + Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, + ExaSes_PutParsEdit,Exams, + "eye-slash.svg",Ico_RED); + break; + case Usr_I_CAN_NOT: // Don't put form + default: + /***** Put icon showing the current visibility of session results *****/ + if (Session->ShowUsrResults) + Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); + else + Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results); + break; } } diff --git a/swad_exam_set.c b/swad_exam_set.c index 702f2e23e..a478b8913 100644 --- a/swad_exam_set.c +++ b/swad_exam_set.c @@ -588,11 +588,17 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams, The_GetColorRows ()); /* Put icon to remove the set */ - if (ICanEditSets == Usr_I_CAN) - Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL, - ExaSet_PutParsOneSet,Exams); - else - Ico_PutIconRemovalNotAllowed (); + switch (ICanEditSets) + { + case Usr_I_CAN: + Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL, + ExaSet_PutParsOneSet,Exams); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconRemovalNotAllowed (); + break; + } /* Put icon to move up the question */ 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 ()); /* Put icon to remove the question */ - if (ICanEditQuestions == Usr_I_CAN) - Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL, - ExaSet_PutParsOneQst,Exams); - else - Ico_PutIconRemovalNotAllowed (); + switch (ICanEditQuestions) + { + case Usr_I_CAN: + Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL, + ExaSet_PutParsOneQst,Exams); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconRemovalNotAllowed (); + break; + } /* Put icon to validate/invalidate the question */ 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) { - if (Exa_CheckIfICanEditExams () == Usr_I_CAN) - /***** Questions are editable only if exam has no sessions *****/ - return (Exam->NumSess == 0) ? Usr_I_CAN : // Exams with sessions should not be edited - Usr_I_CAN_NOT; - else - return Usr_I_CAN_NOT; // Sets of questions are not editable + switch (Exa_CheckIfICanEditExams ()) + { + case Usr_I_CAN: + /***** Questions are editable only if exam has no sessions *****/ + return (Exam->NumSess == 0) ? Usr_I_CAN : // Exams with sessions should not be edited + Usr_I_CAN_NOT; + break; + case Usr_I_CAN_NOT: + default: + return Usr_I_CAN_NOT; // Sets of questions are not editable + break; + } + + return Usr_I_CAN_NOT; } /*****************************************************************************/ diff --git a/swad_forum.c b/swad_forum.c index f55b0a4a1..fa6f923a9 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -1004,22 +1004,24 @@ static void For_ShowAForumPost (struct For_Forums *Forums, /***** Form to ban/unban post *****/ HTM_TD_Begin ("class=\"CONTEXT_COL\""); - if (ICanModerateForum == Usr_I_CAN) + switch (ICanModerateForum) { - NextAction = DisabledOrEnabled == Cns_ENABLED ? For_ActionsDisPstFor[Forums->Forum.Type] : - For_ActionsEnbPstFor[Forums->Forum.Type]; - Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID); - For_PutParsForum (Forums); - Ico_PutIconLink (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],NextAction); - Frm_EndForm (); - } - else - { - if (asprintf (&Title,*TxtAllowedBanned[DisabledOrEnabled],PstNum) < 0) - Err_NotEnoughMemoryExit (); - Ico_PutIcon (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],Title, - "ICO_HIDDEN ICO16x16"); - free (Title); + case Usr_I_CAN: + NextAction = DisabledOrEnabled == Cns_ENABLED ? For_ActionsDisPstFor[Forums->Forum.Type] : + For_ActionsEnbPstFor[Forums->Forum.Type]; + Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID); + For_PutParsForum (Forums); + Ico_PutIconLink (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],NextAction); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + if (asprintf (&Title,*TxtAllowedBanned[DisabledOrEnabled],PstNum) < 0) + Err_NotEnoughMemoryExit (); + Ico_PutIcon (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],Title, + "ICO_HIDDEN ICO16x16"); + free (Title); + break; } /***** Form to remove post *****/ @@ -1518,8 +1520,9 @@ static void For_WriteLinksToPlatformForums (const struct For_Forums *Forums, Forum.HieCod = -1L; Highlight = (Forums->Forum.Type == For_FORUM__SWAD__USRS) ? Lay_HIGHLIGHT : Lay_NO_HIGHLIGHT; - IsLastItemInLevel[1] = (IsLastForum && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : - Lay_NO_LAST_ITEM; + IsLastItemInLevel[1] = (IsLastForum && + ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : + Lay_NO_LAST_ITEM; For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel); /***** Link to forum of teachers about the platform *****/ @@ -1563,8 +1566,9 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums, Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_USRS && Forums->Forum.HieCod == InsCod) ? Lay_HIGHLIGHT : Lay_NO_HIGHLIGHT; - IsLastItemInLevel[2] = (IsLastIns && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : - Lay_NO_LAST_ITEM; + IsLastItemInLevel[2] = (IsLastIns && + ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : + Lay_NO_LAST_ITEM; For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel); /***** Link to forum of teachers from this institution *****/ @@ -1611,8 +1615,9 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums, Highlight = (Forums->Forum.Type == For_FORUM_CENTER_USRS && Forums->Forum.HieCod == CtrCod) ? Lay_HIGHLIGHT : Lay_NO_HIGHLIGHT; - IsLastItemInLevel[3] = (IsLastCtr && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : - Lay_NO_LAST_ITEM; + IsLastItemInLevel[3] = (IsLastCtr && + ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : + Lay_NO_LAST_ITEM; For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel); /***** Link to forum of teachers from this center *****/ @@ -1659,8 +1664,9 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums, Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_USRS && Forums->Forum.HieCod == DegCod) ? Lay_HIGHLIGHT : Lay_NO_HIGHLIGHT; - IsLastItemInLevel[4] = (IsLastDeg && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : - Lay_NO_LAST_ITEM; + IsLastItemInLevel[4] = (IsLastDeg && + ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : + Lay_NO_LAST_ITEM; For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel); /***** Link to forum of teachers from this degree *****/ diff --git a/swad_game.c b/swad_game.c index df177f56f..2f350b163 100644 --- a/swad_game.c +++ b/swad_game.c @@ -1636,16 +1636,24 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games) MYSQL_RES *mysql_res; unsigned NumQsts; 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 *****/ NumQsts = Gam_DB_GetGameQuestionsBasic (&mysql_res,Games->Game.GamCod); /***** Begin box *****/ Box_BoxBegin (Txt_Questions, - ICanEditQuestions == Usr_I_CAN ? Gam_PutIconToAddNewQuestions : - NULL, - ICanEditQuestions == Usr_I_CAN ? Games : - NULL, + FunctionToDrawContextualIcons[ICanEditQuestions], + Args[ICanEditQuestions], Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE); /***** Show table with questions *****/ @@ -1736,11 +1744,17 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games, HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); /* Put icon to remove the question */ - if (ICanEditQuestions == Usr_I_CAN) - Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL, - Gam_PutParsOneQst,Games); - else - Ico_PutIconRemovalNotAllowed (); + switch (ICanEditQuestions) + { + case Usr_I_CAN: + Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL, + Gam_PutParsOneQst,Games); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconRemovalNotAllowed (); + break; + } /* Put icon to move up the question */ 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) /***** Questions are editable only if game has no matches *****/ - return Game->NumMchs == 0 ? Usr_I_CAN : // Games with matches should not be edited - Usr_I_CAN_NOT; - else - return Usr_I_CAN_NOT; // Questions are not editable + if (Game->NumMchs == 0) + return Usr_I_CAN; + + return Usr_I_CAN_NOT; } /*****************************************************************************/ diff --git a/swad_group.c b/swad_group.c index 4f7d0a4ca..4adb797a2 100644 --- a/swad_group.c +++ b/swad_group.c @@ -349,6 +349,11 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction, extern const char *Txt_Update_users; unsigned NumGrpTyp; 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 *****/ 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 : Usr_I_CAN_NOT; Box_BoxBegin (Txt_Groups, - ICanEdit == Usr_I_CAN ? Grp_PutIconToEditGroups : - NULL, - NULL, + FunctionToDrawContextualIcons[ICanEdit],NULL, Hlp_USERS_Groups,Box_CLOSABLE); /***** Begin form to update the students listed @@ -630,50 +633,50 @@ void Grp_ChangeMyGrps (Cns_QuietOrVerbose_t QuietOrVerbose) bool ChangesMade; /***** 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 *****/ + Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); + + /***** Get the group codes which I want to join to *****/ + LstGrpsIWant.GrpCods = NULL; // Initialized to avoid bug reported by Coverity + LstGrpsIWant.NumGrps = 0; // Initialized to avoid bug reported by Coverity + Grp_GetLstCodsGrpWanted (&LstGrpsIWant); + + /***** A student can not be enroled in more than one group + if the type of group is of single enrolment *****/ + // As the form to register in groups of single enrolment... + // ...is a radio-based form and not a checkbox-based form... + // ...this check is made only to avoid problems... + // ...if the student manipulates the form + MySelectionIsValid = Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Gbl.Usrs.Me.Role.Logged,&LstGrpsIWant); + + /***** Free list of groups types and groups in this course *****/ + // The lists of group types and groups need to be freed here... + // ...in order to get them again when changing my groups atomically + Grp_FreeListGrpTypesAndGrps (); + + /***** Change my groups *****/ + if (MySelectionIsValid) { - /***** Get list of groups types and groups in this course *****/ - Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); - - /***** Get the group codes which I want to join to *****/ - LstGrpsIWant.GrpCods = NULL; // Initialized to avoid bug reported by Coverity - LstGrpsIWant.NumGrps = 0; // Initialized to avoid bug reported by Coverity - Grp_GetLstCodsGrpWanted (&LstGrpsIWant); - - /***** A student can not be enroled in more than one group - if the type of group is of single enrolment *****/ - // As the form to register in groups of single enrolment... - // ...is a radio-based form and not a checkbox-based form... - // ...this check is made only to avoid problems... - // ...if the student manipulates the form - MySelectionIsValid = Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Gbl.Usrs.Me.Role.Logged,&LstGrpsIWant); - - /***** Free list of groups types and groups in this course *****/ - // The lists of group types and groups need to be freed here... - // ...in order to get them again when changing my groups atomically - Grp_FreeListGrpTypesAndGrps (); - - /***** Change my groups *****/ - if (MySelectionIsValid) + ChangesMade = Grp_ChangeMyGrpsAtomically (&LstGrpsIWant); + if (QuietOrVerbose == Cns_VERBOSE) { - ChangesMade = Grp_ChangeMyGrpsAtomically (&LstGrpsIWant); - if (QuietOrVerbose == Cns_VERBOSE) - { - if (ChangesMade) - Ale_CreateAlert (Ale_SUCCESS,NULL, - Txt_The_requested_group_changes_were_successful); - else - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_There_has_been_no_change_in_groups); - } + if (ChangesMade) + Ale_CreateAlert (Ale_SUCCESS,NULL, + Txt_The_requested_group_changes_were_successful); + else + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_There_has_been_no_change_in_groups); } - else if (QuietOrVerbose == Cns_VERBOSE) - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group); - - /***** Free memory with the list of groups which I want to belong to *****/ - Grp_FreeListCodGrp (&LstGrpsIWant); } + else if (QuietOrVerbose == Cns_VERBOSE) + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group); + + /***** Free memory with the list of groups which I want to belong to *****/ + Grp_FreeListCodGrp (&LstGrpsIWant); } /*****************************************************************************/ @@ -689,36 +692,36 @@ void Grp_ChangeOtherUsrGrps (void) bool SelectionIsValid; /***** Can I change another user's groups? *****/ - if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN) - { - /***** Get list of groups types and groups in current course *****/ - Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); + if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN_NOT) + return; - /***** Get the list of groups to which register this user *****/ - LstGrpsUsrWants.GrpCods = NULL; // Initialized to avoid bug reported by Coverity - LstGrpsUsrWants.NumGrps = 0; // Initialized to avoid bug reported by Coverity - Grp_GetLstCodsGrpWanted (&LstGrpsUsrWants); + /***** Get list of groups types and groups in current course *****/ + Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); - /***** A student can not be enroled in more than one group - if the type of group is of single enrolment *****/ - SelectionIsValid = Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs, - &LstGrpsUsrWants); + /***** Get the list of groups to which register this user *****/ + LstGrpsUsrWants.GrpCods = NULL; // Initialized to avoid bug reported by Coverity + LstGrpsUsrWants.NumGrps = 0; // Initialized to avoid bug reported by Coverity + Grp_GetLstCodsGrpWanted (&LstGrpsUsrWants); - /***** Free list of groups types and groups in this course *****/ - // The lists of group types and groups need to be freed here... - // ...in order to get them again when changing groups atomically - Grp_FreeListGrpTypesAndGrps (); + /***** A student can not be enroled in more than one group + if the type of group is of single enrolment *****/ + SelectionIsValid = Grp_CheckIfSelectionGrpsSingleEnrolmentIsValid (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs, + &LstGrpsUsrWants); - /***** Register user in the selected groups *****/ - if (SelectionIsValid) - Grp_ChangeGrpsOtherUsrAtomically (&LstGrpsUsrWants); - else - Ale_CreateAlert (Ale_WARNING,NULL, - Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group); + /***** Free list of groups types and groups in this course *****/ + // The lists of group types and groups need to be freed here... + // ...in order to get them again when changing groups atomically + Grp_FreeListGrpTypesAndGrps (); - /***** Free memory with the list of groups to/from which register/remove users *****/ - Grp_FreeListCodGrp (&LstGrpsUsrWants); - } + /***** Register user in the selected groups *****/ + if (SelectionIsValid) + Grp_ChangeGrpsOtherUsrAtomically (&LstGrpsUsrWants); + else + Ale_CreateAlert (Ale_WARNING,NULL, + Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group); + + /***** Free memory with the list of groups to/from which register/remove users *****/ + Grp_FreeListCodGrp (&LstGrpsUsrWants); } /*****************************************************************************/ @@ -1714,6 +1717,11 @@ void Grp_ShowLstGrpsToChgMyGrps (void) Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : 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 { @@ -1728,9 +1736,7 @@ void Grp_ShowLstGrpsToChgMyGrps (void) /***** Begin box *****/ Box_BoxBegin (Txt_My_groups, - ICanEdit == Usr_I_CAN ? Grp_PutIconToEditGroups : - NULL, - NULL, + FunctionToDrawContextualIcons[ICanEdit],NULL, Hlp_USERS_Groups,Box_NOT_CLOSABLE); 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 { 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++) { 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 /* 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; - NumGrpThisType < GrpTyp->NumGrps && ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT; + NumGrpThisType < GrpTyp->NumGrps && + ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT; NumGrpThisType++) { Grp = &(GrpTyp->LstGrps[NumGrpThisType]); @@ -1920,23 +1928,27 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp, IBelongToThisGroup = Grp_CheckIfGrpIsInList (Grp->GrpCod,&LstGrpsIBelong); /* 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 { - ICanChangeMySelectionForThisGrp = Usr_I_CAN; - if (Gbl.Usrs.Me.Role.Logged == Rol_STD) - { - if (Grp->Open) // If group is open + case Usr_I_CAN: + ICanChangeMySelectionForThisGrp = Usr_I_CAN; + if (Gbl.Usrs.Me.Role.Logged == Rol_STD) { - if (!IBelongToThisGroup && // I don't belong to group - Grp->NumUsrs[Rol_STD] >= Grp->MaxStudents) // Group is full + if (Grp->Open) // If group is open + { + if (!IBelongToThisGroup && // I don't belong to group + Grp->NumUsrs[Rol_STD] >= Grp->MaxStudents) // Group is full + ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; + } + else // If group is closed ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; } - else // If group is closed - ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; - } - } - else // I can not change my selection for this group type - ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; + break; + case Usr_I_CAN_NOT: // I can not change my selection for this group type + default: + ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; + break; + } /* Put radio item or checkbox to select the group */ HTM_TR_Begin (NULL); @@ -2188,22 +2200,26 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp) /* Write checkbox to select the group */ ICanSelUnselGroup = (Gbl.Usrs.Me.Role.Logged >= Rol_STD) ? Usr_I_CAN : Usr_I_CAN_NOT; - if (ICanSelUnselGroup == Usr_I_CAN) + switch (ICanSelUnselGroup) { - if (Gbl.Crs.Grps.AllGrps) - Checked = true; - else - for (NumGrpSel = 0, Checked = false; - NumGrpSel < Gbl.Crs.Grps.LstGrpsSel.NumGrps; - NumGrpSel++) - if (Gbl.Crs.Grps.LstGrpsSel.GrpCods[NumGrpSel] == -(GrpTyp->GrpTypCod)) - { - Checked = true; - break; - } + case Usr_I_CAN: + if (Gbl.Crs.Grps.AllGrps) + Checked = true; + else + for (NumGrpSel = 0, Checked = false; + NumGrpSel < Gbl.Crs.Grps.LstGrpsSel.NumGrps; + NumGrpSel++) + if (Gbl.Crs.Grps.LstGrpsSel.GrpCods[NumGrpSel] == -(GrpTyp->GrpTypCod)) + { + Checked = true; + break; + } + break; + case Usr_I_CAN_NOT: + default: + Checked = false; + break; } - else - Checked = false; HTM_TR_Begin (NULL); diff --git a/swad_info.c b/swad_info.c index 923e31d87..c98a4be90 100644 --- a/swad_info.c +++ b/swad_info.c @@ -127,23 +127,6 @@ static Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] = [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 *****************************/ /*****************************************************************************/ @@ -181,6 +164,13 @@ static bool Inf_CheckAndShowRichTxt (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_No_information; struct Syl_Syllabus Syllabus; @@ -190,16 +180,26 @@ void Inf_ShowInfo (void) Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN : Usr_I_CAN_NOT; 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, - [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, + [Usr_I_CAN_NOT] = NULL, + [Usr_I_CAN ] = Inf_PutIconToEditInfo, + }; + static void *Args[Usr_NUM_I_CAN] = + { + [Usr_I_CAN_NOT] = NULL, + [Usr_I_CAN ] = &Gbl.Crs.Info.Type, + }; + 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 *****/ @@ -245,11 +245,8 @@ void Inf_ShowInfo (void) /***** Begin box *****/ Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type], - (ICanEdit == Usr_I_CAN) ? Inf_PutIconToEditInfo : - NULL, - (ICanEdit == Usr_I_CAN) ? &Gbl.Crs.Info.Type : - NULL, - Help[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); + FunctionToDrawContextualIcons[ICanEdit],Args[ICanEdit], + *Help[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); /****** Form to select syllabus *****/ Syl_PutFormWhichSyllabus (Syllabus.WhichSyllabus); @@ -809,6 +806,13 @@ void Inf_SetInfoSrc (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_INFO_SRC_FULL_TEXT[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_URL ] = Inf_FormToSendURL, }; - const char *HelpEdit[Inf_NUM_TYPES] = + static const char **HelpEdit[Inf_NUM_TYPES] = { - [Inf_INFORMATION ] = Hlp_COURSE_Information_edit, - [Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, - [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, - [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, - [Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, - [Inf_FAQ ] = Hlp_COURSE_FAQ_edit, - [Inf_LINKS ] = Hlp_COURSE_Links_edit, - [Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, + [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit, + [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit, + [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit, + [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit, + [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit, + [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit, + [Inf_LINKS ] = &Hlp_COURSE_Links_edit, + [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit, }; /***** Reset syllabus context *****/ @@ -880,7 +884,7 @@ void Inf_FormsToSelSendInfo (void) /* Begin box and table */ Box_BoxTableBegin (Txt_Source_of_information, 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 */ for (InfoSrc = (Inf_Src_t) 0; @@ -1493,6 +1497,13 @@ static bool Inf_CheckAndShowRichTxt (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 const char *Txt_INFO_TITLE[Inf_NUM_TYPES]; extern const char *Txt_Save_changes; @@ -1509,16 +1520,16 @@ void Inf_EditPlainTxtInfo (void) [Inf_LINKS ] = {ActRcvPlaTxtCrsLnk,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_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, - [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, - [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, - [Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, - [Inf_FAQ ] = Hlp_COURSE_FAQ_edit, - [Inf_LINKS ] = Hlp_COURSE_Links_edit, - [Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, + [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit, + [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit, + [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit, + [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit, + [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit, + [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit, + [Inf_LINKS ] = &Hlp_COURSE_Links_edit, + [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit, }; /***** Reset syllabus context *****/ @@ -1532,7 +1543,7 @@ void Inf_EditPlainTxtInfo (void) if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars) 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, - HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); + *HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); switch (Gbl.Crs.Info.Type) { @@ -1569,6 +1580,13 @@ void Inf_EditPlainTxtInfo (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 const char *Txt_INFO_TITLE[Inf_NUM_TYPES]; extern const char *Txt_Save_changes; @@ -1585,16 +1603,16 @@ void Inf_EditRichTxtInfo (void) [Inf_LINKS ] = {ActRcvRchTxtCrsLnk,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_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, - [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, - [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, - [Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, - [Inf_FAQ ] = Hlp_COURSE_FAQ_edit, - [Inf_LINKS ] = Hlp_COURSE_Links_edit, - [Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, + [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit, + [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit, + [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit, + [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit, + [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit, + [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit, + [Inf_LINKS ] = &Hlp_COURSE_Links_edit, + [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit, }; /***** Reset syllabus context *****/ @@ -1608,7 +1626,7 @@ void Inf_EditRichTxtInfo (void) if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars) 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, - HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); + *HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); switch (Gbl.Crs.Info.Type) { diff --git a/swad_institution.c b/swad_institution.c index b612df22e..d83997872 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -950,28 +950,30 @@ static void Ins_ListInstitutionsForEdition (void) /* Institution WWW */ HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - Frm_BeginForm (ActChgInsWWW); - ParCod_PutPar (ParCod_OthHie,Ins->HieCod); - HTM_INPUT_URL ("WWW",Ins->WWW,HTM_SUBMIT_ON_CHANGE, - "class=\"INPUT_WWW INPUT_%s\"" - " required=\"required\"", - The_GetSuffix ()); - Frm_EndForm (); - } - else - { - Str_Copy (WWW,Ins->WWW,sizeof (WWW) - 1); - HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); - HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" - " class=\"DAT_%s\"", - Ins->WWW, - The_GetSuffix (), - Ins->WWW); - HTM_Txt (WWW); - HTM_A_End (); - HTM_DIV_End (); + case Usr_I_CAN: + Frm_BeginForm (ActChgInsWWW); + ParCod_PutPar (ParCod_OthHie,Ins->HieCod); + HTM_INPUT_URL ("WWW",Ins->WWW,HTM_SUBMIT_ON_CHANGE, + "class=\"INPUT_WWW INPUT_%s\"" + " required=\"required\"", + The_GetSuffix ()); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Str_Copy (WWW,Ins->WWW,sizeof (WWW) - 1); + HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); + HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" + " class=\"DAT_%s\"", + Ins->WWW, + The_GetSuffix (), + Ins->WWW); + HTM_Txt (WWW); + HTM_A_End (); + HTM_DIV_End (); + break; } HTM_TD_End (); diff --git a/swad_mail.c b/swad_mail.c index 9c94d934b..3a864c8dd 100644 --- a/swad_mail.c +++ b/swad_mail.c @@ -1296,18 +1296,20 @@ void Mai_RemoveOtherUsrEmail (void) { /***** Get other user's code from form and get user's data *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Remove user's email *****/ - Mai_RemoveEmail (&Gbl.Usrs.Other.UsrDat); + case Usr_I_CAN: + /***** Remove user's email *****/ + Mai_RemoveEmail (&Gbl.Usrs.Other.UsrDat); - /***** Show form again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show form again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -1321,24 +1323,28 @@ static void Mai_RemoveEmail (struct Usr_Data *UsrDat) extern const char *Txt_Email_X_removed; char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; - if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (UsrDat)) { - /***** Get new email from form *****/ - Par_GetParText ("Email",Email,Cns_MAX_BYTES_EMAIL_ADDRESS); + case Usr_I_CAN: + /***** Get new email from form *****/ + Par_GetParText ("Email",Email,Cns_MAX_BYTES_EMAIL_ADDRESS); - /***** Remove one of user's old email addresses *****/ - Mai_DB_RemoveEmail (UsrDat->UsrCod,Email); + /***** Remove one of user's old email addresses *****/ + Mai_DB_RemoveEmail (UsrDat->UsrCod,Email); - /***** Create alert *****/ - Ale_CreateAlert (Ale_SUCCESS,Mai_EMAIL_SECTION_ID, - Txt_Email_X_removed, - Email); + /***** Create alert *****/ + Ale_CreateAlert (Ale_SUCCESS,Mai_EMAIL_SECTION_ID, + Txt_Email_X_removed, + Email); - /***** Update list of emails *****/ - Mai_GetEmailFromUsrCod (UsrDat); + /***** Update list of emails *****/ + Mai_GetEmailFromUsrCod (UsrDat); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } /*****************************************************************************/ @@ -1362,19 +1368,21 @@ void Mai_ChangeOtherUsrEmail (void) { /***** Get other user's code from form and get user's data *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Change user's ID *****/ - Mai_ChangeUsrEmail (&Gbl.Usrs.Other.UsrDat, - Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); + case Usr_I_CAN: + /***** Change user's ID *****/ + Mai_ChangeUsrEmail (&Gbl.Usrs.Other.UsrDat, + Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); - /***** Show form again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show form again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -1391,49 +1399,53 @@ static void Mai_ChangeUsrEmail (struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOthe extern const char *Txt_The_email_address_entered_X_is_not_valid; char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; - if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (UsrDat)) { - /***** Get new email from form *****/ - Par_GetParText ("NewEmail",NewEmail,Cns_MAX_BYTES_EMAIL_ADDRESS); + case Usr_I_CAN: + /***** Get new email from form *****/ + Par_GetParText ("NewEmail",NewEmail,Cns_MAX_BYTES_EMAIL_ADDRESS); - if (Mai_CheckIfEmailIsValid (NewEmail)) // New email is valid - { - /***** Check if new email exists in database *****/ - if (UsrDat->EmailConfirmed && - !strcmp (UsrDat->Email,NewEmail)) // User's current confirmed email match exactly the new email - Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, - Txt_The_email_address_X_matches_one_previously_registered, - NewEmail); - else + if (Mai_CheckIfEmailIsValid (NewEmail)) // New email is valid { - if (Mai_UpdateEmailInDB (UsrDat,NewEmail)) - { - /***** Email updated sucessfully *****/ - Ale_CreateAlert (Ale_SUCCESS,Mai_EMAIL_SECTION_ID, - Txt_The_email_address_X_has_been_registered_successfully, - NewEmail); - - /***** Update list of emails *****/ - Mai_GetEmailFromUsrCod (UsrDat); - - /***** Send message via email - to confirm the new email address *****/ - if (MeOrOther == Usr_ME) - Mai_SendMailMsgToConfirmEmail (); - } - else + /***** Check if new email exists in database *****/ + if (UsrDat->EmailConfirmed && + !strcmp (UsrDat->Email,NewEmail)) // User's current confirmed email match exactly the new email Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, - Txt_The_email_address_X_had_been_registered_by_another_user, + Txt_The_email_address_X_matches_one_previously_registered, NewEmail); + else + { + if (Mai_UpdateEmailInDB (UsrDat,NewEmail)) + { + /***** Email updated sucessfully *****/ + Ale_CreateAlert (Ale_SUCCESS,Mai_EMAIL_SECTION_ID, + Txt_The_email_address_X_has_been_registered_successfully, + NewEmail); + + /***** Update list of emails *****/ + Mai_GetEmailFromUsrCod (UsrDat); + + /***** Send message via email + to confirm the new email address *****/ + if (MeOrOther == Usr_ME) + Mai_SendMailMsgToConfirmEmail (); + } + else + Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, + Txt_The_email_address_X_had_been_registered_by_another_user, + NewEmail); + } } - } - else // New email is not valid - Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, - Txt_The_email_address_entered_X_is_not_valid, - NewEmail); + else // New email is not valid + Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, + Txt_The_email_address_entered_X_is_not_valid, + NewEmail); + break; + case Usr_I_CAN_NOT: + default: + Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); } /*****************************************************************************/ diff --git a/swad_match.c b/swad_match.c index 7f44e71d4..e807c9cde 100644 --- a/swad_match.c +++ b/swad_match.c @@ -551,18 +551,22 @@ static void Mch_ListOneOrMoreMatchesIcons (struct Gam_Games *Games, { HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ()); - if (Mch_CheckIfICanEditThisMatch (Match) == Usr_I_CAN) + switch (Mch_CheckIfICanEditThisMatch (Match)) { - Games->MchCod = Match->MchCod; + case Usr_I_CAN: + Games->MchCod = Match->MchCod; - /***** Put icon to remove the match *****/ - Ico_PutContextualIconToRemove (ActReqRemMch,NULL,Mch_PutParsEdit,Games); + /***** Put icon to remove the match *****/ + Ico_PutContextualIconToRemove (ActReqRemMch,NULL,Mch_PutParsEdit,Games); - /***** Put icon to edit the match *****/ - Ico_PutContextualIconToEdit (ActReqChgMch,Anchor,Mch_PutParsEdit,Games); + /***** Put icon to edit the match *****/ + Ico_PutContextualIconToEdit (ActReqChgMch,Anchor,Mch_PutParsEdit,Games); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconRemovalNotAllowed (); + break; } - else - Ico_PutIconRemovalNotAllowed (); HTM_TD_End (); } @@ -835,25 +839,27 @@ static void Mch_ListOneOrMoreMatchesResultTch (struct Gam_Games *Games, "trophy.svg",Ico_BLACK); /***** Check if visibility of session results can be changed *****/ - if (Mch_CheckIfICanChangeVisibilityOfResults (Match) == Usr_I_CAN) + switch (Mch_CheckIfICanChangeVisibilityOfResults (Match)) { - /* I can edit visibility */ - if (Match->Status.ShowUsrResults) - Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, - Mch_PutParsEdit,Games, - "eye.svg",Ico_GREEN); - else - Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, - Mch_PutParsEdit,Games, - "eye-slash.svg",Ico_RED); - } - else - { - /* I can not edit visibility */ - if (Match->Status.ShowUsrResults) - Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); - else - Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results ); + case Usr_I_CAN: + /* I can edit visibility */ + if (Match->Status.ShowUsrResults) + Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, + Mch_PutParsEdit,Games, + "eye.svg",Ico_GREEN); + else + Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, + Mch_PutParsEdit,Games, + "eye-slash.svg",Ico_RED); + break; + case Usr_I_CAN_NOT: + default: + /* I can not edit visibility */ + if (Match->Status.ShowUsrResults) + Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); + else + Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results ); + break; } } diff --git a/swad_match_result.c b/swad_match_result.c index 940d0cd5d..f9a18700e 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -761,8 +761,7 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games, (unsigned) StartEndTime,UniqueId) < 0) Err_NotEnoughMemoryExit (); HTM_TD_Begin ("id=\"%s\" class=\"LT DAT_%s %s\"", - Id,The_GetSuffix (), - The_GetColorRows ()); + Id,The_GetSuffix (),The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, true,true,false,0x7); @@ -772,8 +771,7 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games, /* Write match title */ HTM_TD_Begin ("class=\"LT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); + The_GetSuffix (),The_GetColorRows ()); HTM_Txt (Match.Title); HTM_TD_End (); @@ -787,110 +785,137 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games, /* Write number of questions */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - HTM_Unsigned (Print.NumQsts.All); - else - Ico_PutIconNotVisible (); + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + HTM_Unsigned (Print.NumQsts.All); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Write number of non-blank answers */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - if (Print.NumQsts.NotBlank) - HTM_Unsigned (Print.NumQsts.NotBlank); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.NotBlank) + HTM_Unsigned (Print.NumQsts.NotBlank); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write number of blank answers */ HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); + The_GetSuffix (),The_GetColorRows ()); NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank; - if (ICanView.Score == Usr_I_CAN) + switch (ICanView.Score) { - if (NumQstsBlank) - HTM_Unsigned (NumQstsBlank); - else - HTM_Light0 (); + case Usr_I_CAN: + if (NumQstsBlank) + HTM_Unsigned (NumQstsBlank); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write score */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - HTM_Double2Decimals (Print.Score); - HTM_Txt ("/"); - HTM_Unsigned (Print.NumQsts.All); + case Usr_I_CAN: + HTM_Double2Decimals (Print.Score); + HTM_Txt ("/"); + HTM_Unsigned (Print.NumQsts.All); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write average score per question */ HTM_TD_Begin ("class=\"RT DAT_%s %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / - (double) Print.NumQsts.All : - 0.0); - else - Ico_PutIconNotVisible (); + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / + (double) Print.NumQsts.All : + 0.0); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Write grade over maximum grade */ HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", - The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - Grade = TstPrn_ComputeGrade (Print.NumQsts.All,Print.Score,Games->Game.MaxGrade); - TstPrn_ShowGrade (Grade,Games->Game.MaxGrade); - TotalGrade += Grade; + case Usr_I_CAN: + Grade = TstPrn_ComputeGrade (Print.NumQsts.All,Print.Score, + Games->Game.MaxGrade); + TstPrn_ShowGrade (Grade,Games->Game.MaxGrade); + TotalGrade += Grade; + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Link to show this result */ HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) + switch (ICanView.Result) { - Games->Game.GamCod = Match.GamCod; - Games->MchCod = Match.MchCod; - switch (MeOrOther) - { - case Usr_ME: - Frm_BeginForm (ActSeeOneMchResMe); - Mch_PutParsEdit (Games); - Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneMchResMe); - break; - case Usr_OTHER: - Frm_BeginForm (ActSeeOneMchResOth); - Mch_PutParsEdit (Games); - Usr_PutParOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod); - Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneMchResOth); - break; - } - Frm_EndForm (); + case Usr_I_CAN: + Games->Game.GamCod = Match.GamCod; + Games->MchCod = Match.MchCod; + switch (MeOrOther) + { + case Usr_ME: + Frm_BeginForm (ActSeeOneMchResMe); + Mch_PutParsEdit (Games); + Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneMchResMe); + break; + case Usr_OTHER: + Frm_BeginForm (ActSeeOneMchResOth); + Mch_PutParsEdit (Games); + Usr_PutParOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod); + Ico_PutIconLink ("tasks.svg",Ico_BLACK,ActSeeOneMchResOth); + break; + } + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -1071,7 +1096,6 @@ void MchRes_ShowOneMchResult (void) UsrDat = &Gbl.Usrs.Me.UsrDat; break; case Usr_OTHER: - default: UsrDat = &Gbl.Usrs.Other.UsrDat; Usr_GetParOtherUsrCodEncrypted (UsrDat); break; @@ -1201,16 +1225,20 @@ void MchRes_ShowOneMchResult (void) HTM_TD_Begin ("class=\"LB DAT_%s\"", The_GetSuffix ()); - if (ICanView.Score == Usr_I_CAN) + switch (ICanView.Score) { - HTM_STRONG_Begin (); - HTM_Double2Decimals (Print.Score); - HTM_Txt ("/"); - HTM_Unsigned (Print.NumQsts.All); - HTM_STRONG_End (); + case Usr_I_CAN: + HTM_STRONG_Begin (); + HTM_Double2Decimals (Print.Score); + HTM_Txt ("/"); + HTM_Unsigned (Print.NumQsts.All); + HTM_STRONG_End (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -1225,14 +1253,19 @@ void MchRes_ShowOneMchResult (void) HTM_TD_Begin ("class=\"LB DAT_%s\"", The_GetSuffix ()); - if (ICanView.Score == Usr_I_CAN) + switch (ICanView.Score) { - HTM_STRONG_Begin (); - TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Games.Game.MaxGrade); - HTM_STRONG_End (); + case Usr_I_CAN: + HTM_STRONG_Begin (); + TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score, + Games.Game.MaxGrade); + HTM_STRONG_End (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -1287,12 +1320,18 @@ static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game, // 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 - if (ICanView->Result == Usr_I_CAN) - // Depends on 5 visibility icons associated to game - ICanView->Score = TstVis_IsVisibleTotalScore (Game->Visibility) ? Usr_I_CAN : - Usr_I_CAN_NOT; - else - ICanView->Score = Usr_I_CAN_NOT; + switch (ICanView->Result) + { + case Usr_I_CAN: + // Depends on 5 visibility icons associated to game + ICanView->Score = TstVis_IsVisibleTotalScore (Game->Visibility) ? Usr_I_CAN : + Usr_I_CAN_NOT; + break; + case Usr_I_CAN_NOT: + default: + ICanView->Score = Usr_I_CAN_NOT; + break; + } break; case Rol_NET: case Rol_TCH: diff --git a/swad_nickname.c b/swad_nickname.c index 514309ec6..c7eadf1c6 100644 --- a/swad_nickname.c +++ b/swad_nickname.c @@ -423,27 +423,29 @@ void Nck_RemoveOtherUsrNick (void) /***** Get user whose nick must be removed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Get nickname from form *****/ - Par_GetParText ("Nick",NickWithoutArr, - Nck_MAX_BYTES_NICK_WITHOUT_ARROBA); + case Usr_I_CAN: + /***** Get nickname from form *****/ + Par_GetParText ("Nick",NickWithoutArr, + Nck_MAX_BYTES_NICK_WITHOUT_ARROBA); - /***** Remove one of the old nicknames *****/ - Nck_DB_RemoveNickname (Gbl.Usrs.Other.UsrDat.UsrCod,NickWithoutArr); + /***** Remove one of the old nicknames *****/ + Nck_DB_RemoveNickname (Gbl.Usrs.Other.UsrDat.UsrCod,NickWithoutArr); - /***** Show message *****/ - Ale_CreateAlert (Ale_SUCCESS,Nck_NICKNAME_SECTION_ID, - Txt_Nickname_X_removed, - NickWithoutArr); + /***** Show message *****/ + Ale_CreateAlert (Ale_SUCCESS,Nck_NICKNAME_SECTION_ID, + Txt_Nickname_X_removed, + NickWithoutArr); - /***** Show user's account again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show user's account again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } @@ -469,18 +471,20 @@ void Nck_ChangeOtherUsrNick (void) { /***** Get user whose nick must be changed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) { - /***** Update user's nickname *****/ - Nck_ChangeUsrNick (&Gbl.Usrs.Other.UsrDat); + case Usr_I_CAN: + /***** Update user's nickname *****/ + Nck_ChangeUsrNick (&Gbl.Usrs.Other.UsrDat); - /***** Show user's account again *****/ - Acc_ShowFormChgOtherUsrAccount (); + /***** Show user's account again *****/ + Acc_ShowFormChgOtherUsrAccount (); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } diff --git a/swad_password.c b/swad_password.c index c3ecd5239..c591b496d 100644 --- a/swad_password.c +++ b/swad_password.c @@ -176,13 +176,17 @@ void Pwd_UpdateOtherUsrPwd (void) { /***** Get other user's code from form and get user's data *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) - /***** Check and update password *****/ - Pwd_CheckAndUpdateNewPwd (&Gbl.Usrs.Other.UsrDat); - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } + switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) + { + case Usr_I_CAN: + /***** Check and update password *****/ + Pwd_CheckAndUpdateNewPwd (&Gbl.Usrs.Other.UsrDat); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; + } else // User not found Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); } diff --git a/swad_photo.c b/swad_photo.c index 071ad6d00..4f8c678e9 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -198,7 +198,6 @@ void Pho_PutIconToChangeUsrPhoto (struct Usr_Data *UsrDat) "camera.svg",Ico_BLACK); break; case Usr_OTHER: - default: if (Pho_ICanChangeOtherUsrPhoto (UsrDat) == Usr_I_CAN) Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL, Rec_PutParUsrCodEncrypted,NULL, @@ -318,7 +317,6 @@ static void Pho_ReqPhoto (const struct Usr_Data *UsrDat) Frm_BeginForm (ActDetMyPho); break; case Usr_OTHER: - default: Frm_BeginForm (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs]); Usr_PutParUsrCodEncrypted (UsrDat->EnUsrCod); break; @@ -368,7 +366,6 @@ void Pho_SendPhotoUsr (void) Pho_ReqMyPhoto (); break; case Usr_OTHER: - default: /***** Form to send another user's photo *****/ Pho_ReqOtherUsrPhoto (); break; @@ -521,32 +518,34 @@ void Pho_ReqRemUsrPhoto (void) if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, Usr_DONT_GET_PREFS, Usr_DONT_GET_ROLE_IN_CRS)) - { - if (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) + switch (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat)) { - /***** Show current photo and help message *****/ - if (Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL)) - { - /***** Show question and button to remove user's photo *****/ - /* Begin alert */ - Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_photo_of_X, - Gbl.Usrs.Other.UsrDat.FullName); + case Usr_I_CAN: + /***** Show current photo and help message *****/ + if (Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL)) + { + /***** Show question and button to remove user's photo *****/ + /* Begin alert */ + Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_photo_of_X, + Gbl.Usrs.Other.UsrDat.FullName); - /* Show current photo */ - Pho_ShowUsrPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL, - ClassPhoto[Gbl.Prefs.PhotoShape],Pho_NO_ZOOM); + /* Show current photo */ + Pho_ShowUsrPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL, + ClassPhoto[Gbl.Prefs.PhotoShape],Pho_NO_ZOOM); - /* End alert */ - Ale_ShowAlertAndButtonEnd (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs],NULL,NULL, - Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod, - Btn_REMOVE_BUTTON,Txt_Remove); - } - else - Ale_ShowAlert (Ale_INFO,Txt_The_photo_no_longer_exists); + /* End alert */ + Ale_ShowAlertAndButtonEnd (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs],NULL,NULL, + Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod, + Btn_REMOVE_BUTTON,Txt_Remove); + } + else + Ale_ShowAlert (Ale_INFO,Txt_The_photo_no_longer_exists); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); diff --git a/swad_project.c b/swad_project.c index 46a375063..060ac0b2e 100644 --- a/swad_project.c +++ b/swad_project.c @@ -3050,34 +3050,36 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects, /***** Get user to be removed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Prj_CheckIfICanEditProject (&Projects->Prj) == Usr_I_CAN) + switch (Prj_CheckIfICanEditProject (&Projects->Prj)) { - /***** Show question and button to remove user as a role from project *****/ - /* Begin alert */ - Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)], - Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex], - Projects->Prj.Title); + case Usr_I_CAN: + /***** Show question and button to remove user as a role from project *****/ + /* Begin alert */ + Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)], + Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex], + Projects->Prj.Title); - /* Show user's record */ - Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); + /* Show user's record */ + Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); - /* Show form to request confirmation */ - Frm_BeginForm (ActionRemUsr[RoleInPrj]); - Prj_PutCurrentPars (Projects); - if (asprintf (&TxtButton,Txt_Remove_USER_from_this_project, - Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex]) < 0) - Err_NotEnoughMemoryExit (); - Btn_PutRemoveButton (TxtButton); - free (TxtButton); - Frm_EndForm (); + /* Show form to request confirmation */ + Frm_BeginForm (ActionRemUsr[RoleInPrj]); + Prj_PutCurrentPars (Projects); + if (asprintf (&TxtButton,Txt_Remove_USER_from_this_project, + Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex]) < 0) + Err_NotEnoughMemoryExit (); + Btn_PutRemoveButton (TxtButton); + free (TxtButton); + Frm_EndForm (); - /* End alert */ - Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,NULL,NULL,Btn_NO_BUTTON,NULL); + /* End alert */ + Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,NULL,NULL,Btn_NO_BUTTON,NULL); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); @@ -3128,25 +3130,27 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj) /***** Get user to be removed *****/ if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) - { - if (Prj_CheckIfICanEditProject (&Projects.Prj) == Usr_I_CAN) + switch (Prj_CheckIfICanEditProject (&Projects.Prj)) { - /***** Remove user from the table of project-users *****/ - Prj_DB_RemoveUsrFromPrj (Projects.Prj.PrjCod,RoleInPrj,Gbl.Usrs.Other.UsrDat.UsrCod); + case Usr_I_CAN: + /***** Remove user from the table of project-users *****/ + Prj_DB_RemoveUsrFromPrj (Projects.Prj.PrjCod,RoleInPrj,Gbl.Usrs.Other.UsrDat.UsrCod); - /***** Flush cache *****/ - if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_ME) - Prj_FlushCacheMyRolesInProject (); + /***** Flush cache *****/ + if (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_ME) + Prj_FlushCacheMyRolesInProject (); - /***** Show success alert *****/ - Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z, - Gbl.Usrs.Other.UsrDat.FullName, - Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex], - Projects.Prj.Title); + /***** Show success alert *****/ + Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z, + Gbl.Usrs.Other.UsrDat.FullName, + Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex], + Projects.Prj.Title); + break; + case Usr_I_CAN_NOT: + default: + Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); + break; } - else - Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); - } else Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); @@ -3208,17 +3212,21 @@ static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects, Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentPars,Projects); /***** Locked/unlocked project edition *****/ - if (PrjCfg_CheckIfICanConfig () == Usr_I_CAN) + switch (PrjCfg_CheckIfICanConfig ()) { - /* Icon to lock/unlock project edition */ - HTM_DIV_Begin ("id=\"prj_lck_%ld\" class=\"PRJ_LOCK\"", - Projects->Prj.PrjCod); - Prj_FormLockUnlock (&Projects->Prj); - HTM_DIV_End (); + case Usr_I_CAN: + /* Icon to lock/unlock project edition */ + HTM_DIV_Begin ("id=\"prj_lck_%ld\" class=\"PRJ_LOCK\"", + Projects->Prj.PrjCod); + Prj_FormLockUnlock (&Projects->Prj); + HTM_DIV_End (); + break; + case Usr_I_CAN_NOT: + default: + /* Icon to inform about locked/unlocked project edition */ + Prj_PutIconOffLockedUnlocked (&Projects->Prj); + break; } - else - /* Icon to inform about locked/unlocked project edition */ - Prj_PutIconOffLockedUnlocked (&Projects->Prj); /***** Link to get resource link *****/ if (Rsc_CheckIfICanGetLink () == Usr_I_CAN) @@ -4680,10 +4688,16 @@ void Prj_ChangeCriterionScore (void) Err_WrongRubricExit (); /***** Update review *****/ - if (Prj_CheckIfICanFillRubric (Prj.PrjCod,WhichRubric) == Usr_I_CAN) - Rub_DB_UpdateScore (Rsc_PROJECT,Prj.PrjCod,-1L,CriCod,Score); - else - Err_NoPermission (); + switch (Prj_CheckIfICanFillRubric (Prj.PrjCod,WhichRubric)) + { + case Usr_I_CAN: + Rub_DB_UpdateScore (Rsc_PROJECT,Prj.PrjCod,-1L,CriCod,Score); + break; + case Usr_I_CAN_NOT: + default: + Err_NoPermission (); + break; + } /***** Free memory of the project *****/ Prj_FreeMemProject (&Prj); diff --git a/swad_record.c b/swad_record.c index a57b9fe93..b0388c13f 100644 --- a/swad_record.c +++ b/swad_record.c @@ -1733,29 +1733,31 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT_STRONG_%s %s\"", The_GetSuffix (), The_GetColorRows ()); - if (ICanEditThisField == Usr_I_CAN) // Show with form + switch (ICanEditThisField) { - HTM_TEXTAREA_Begin ("name=\"Field%ld\" rows=\"%u\"" - " class=\"REC_C2_BOT_INPUT INPUT_%s\"", - Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod, - Gbl.Crs.Records.LstFields.Lst[NumField].NumLines, - The_GetSuffix ()); + case Usr_I_CAN: // Show with form + HTM_TEXTAREA_Begin ("name=\"Field%ld\" rows=\"%u\"" + " class=\"REC_C2_BOT_INPUT INPUT_%s\"", + Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod, + Gbl.Crs.Records.LstFields.Lst[NumField].NumLines, + The_GetSuffix ()); + if (ThisFieldHasText) + HTM_Txt (row[0]); + HTM_TEXTAREA_End (); + break; + case Usr_I_CAN_NOT: // Show without form + default: if (ThisFieldHasText) - HTM_Txt (row[0]); - HTM_TEXTAREA_End (); - } - else // Show without form - { - if (ThisFieldHasText) - { - Str_Copy (Text,row[0],sizeof (Text)); - Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, - Text,Cns_MAX_BYTES_TEXT, - Str_DONT_REMOVE_SPACES); - HTM_Txt (Text); - } - else - HTM_Hyphen (); + { + Str_Copy (Text,row[0],sizeof (Text)); + Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, + Text,Cns_MAX_BYTES_TEXT, + Str_DONT_REMOVE_SPACES); + HTM_Txt (Text); + } + else + HTM_Hyphen (); + break; } HTM_TD_End (); @@ -1767,17 +1769,21 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, } /***** End box *****/ - if (ICanEdit == Usr_I_CAN) + switch (ICanEdit) { - /* End table, send button and end box */ - Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_Save_changes); + case Usr_I_CAN: + /* End table, send button and end box */ + Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_Save_changes); - /* End form */ - Frm_EndForm (); + /* End form */ + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + /* End table and box */ + Box_BoxTableEnd (); + break; } - else - /* End table and box */ - Box_BoxTableEnd (); } /*****************************************************************************/ @@ -2254,7 +2260,6 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView, Grp_ShowLstGrpsToChgMyGrps (); break; case Usr_OTHER: - default: Grp_ShowLstGrpsToChgOtherUsrsGrps (UsrDat->UsrCod); break; } @@ -2679,20 +2684,21 @@ static void Rec_ShowEmail (struct Usr_Data *UsrDat) Frm_LabelColumn ("REC_C1_BOT RM",NULL,Txt_Email); /* Data */ - HTM_TD_Begin ("class=\"REC_C2_BOT LM DAT_STRONG_%s\"", - The_GetSuffix ()); + HTM_TD_Begin ("class=\"REC_C2_BOT LM DAT_STRONG_%s\"",The_GetSuffix ()); if (UsrDat->Email[0]) - { - if (Mai_ICanSeeOtherUsrEmail (UsrDat) == Usr_I_CAN) + switch (Mai_ICanSeeOtherUsrEmail (UsrDat)) { - HTM_A_Begin ("href=\"mailto:%s\" class=\"DAT_STRONG_%s\"", - UsrDat->Email,The_GetSuffix ()); - HTM_Txt (UsrDat->Email); - HTM_A_End (); + case Usr_I_CAN: + HTM_A_Begin ("href=\"mailto:%s\" class=\"DAT_STRONG_%s\"", + UsrDat->Email,The_GetSuffix ()); + HTM_Txt (UsrDat->Email); + HTM_A_End (); + break; + case Usr_I_CAN_NOT: + default: + HTM_Txt ("********"); + break; } - else - HTM_Txt ("********"); - } HTM_TD_End (); HTM_TR_End (); diff --git a/swad_rubric.c b/swad_rubric.c index a41c6f9eb..fe07ddd9b 100644 --- a/swad_rubric.c +++ b/swad_rubric.c @@ -246,6 +246,7 @@ Usr_ICan_t Rub_CheckIfICanEditRubrics (void) bool Rub_CheckIfEditable (void) { if (Rub_CheckIfICanEditRubrics () == Usr_I_CAN) + { /***** Rubric is editable only if ... *****/ // TODO: Change to control that a rubric is not edited in some circunstances? /* @@ -253,8 +254,9 @@ bool Rub_CheckIfEditable (void) Rubric->NumCriteria != 0; */ return true; - else - return false; // Questions are not editable + } + + return false; // Questions are not editable } /*****************************************************************************/ diff --git a/swad_test_print.c b/swad_test_print.c index 4ed04ca4d..d89e5e67f 100644 --- a/swad_test_print.c +++ b/swad_test_print.c @@ -60,8 +60,8 @@ struct TstRes_ICanView { - bool Result; - bool Score; + Usr_ICan_t Result; + Usr_ICan_t Score; }; /*****************************************************************************/ @@ -680,8 +680,7 @@ static void TstPrn_WriteQstAndAnsExam (struct Usr_Data *UsrDat, /* Write score retrieved from database */ if (ICanView[TstVis_VISIBLE_EACH_QST_SCORE] == Usr_I_CAN) { - HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"", - The_GetSuffix ()); + HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"",The_GetSuffix ()); HTM_TxtColonNBSP (Txt_Score); HTM_SPAN_Begin ("class=\"%s_%s\"", PrintedQuestions[QstInd].StrAnswers[0] ? @@ -1239,8 +1238,7 @@ static void TstPrn_WriteIntAnsPrint (struct Usr_Data *UsrDat, } else { - HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"", - The_GetSuffix ()); + HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); HTM_Txt ("?"); HTM_TD_End (); } @@ -1250,10 +1248,16 @@ static void TstPrn_WriteIntAnsPrint (struct Usr_Data *UsrDat, /***** Write the correct answer *****/ HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); - if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) - HTM_Long (Question->Answer.Integer); - else - Ico_PutIconNotVisible (); + switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER]) + { + case Usr_I_CAN: + HTM_Long (Question->Answer.Integer); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); HTM_TR_End (); @@ -1308,16 +1312,20 @@ static void TstPrn_WriteFltAnsPrint (struct Usr_Data *UsrDat, /***** Write the correct answer *****/ 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]) { - HTM_Txt ("["); - HTM_Double (Question->Answer.FloatingPoint[0]); - HTM_Txt ("; "); - HTM_Double (Question->Answer.FloatingPoint[1]); - HTM_Txt ("]"); + case Usr_I_CAN: + HTM_Txt ("["); + HTM_Double (Question->Answer.FloatingPoint[0]); + HTM_Txt ("; "); + HTM_Double (Question->Answer.FloatingPoint[1]); + HTM_Txt ("]"); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -1366,10 +1374,16 @@ static void TstPrn_WriteTF_AnsPrint (struct Usr_Data *UsrDat, /***** Write the correct answer *****/ HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); - if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) - Qst_WriteAnsTF (Question->Answer.TF); - else - Ico_PutIconNotVisible (); + switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER]) + { + case Usr_I_CAN: + Qst_WriteAnsTF (Question->Answer.TF); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); HTM_TR_End (); @@ -1430,25 +1444,26 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat, /* Draw icon depending on user's answer */ 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]) { - if (Question->Answer.Options[Indexes[NumOpt]].Correct) - { - Ans.Class = "Qst_ANS_OK"; // Correct - Ans.Str = "✓"; - } - else - { - Ans.Class = "Qst_ANS_BAD"; // Wrong - Ans.Str = "✗"; - } + case Usr_I_CAN: + if (Question->Answer.Options[Indexes[NumOpt]].Correct) + { + Ans.Class = "Qst_ANS_OK"; // Correct + Ans.Str = "✓"; + } + else + { + Ans.Class = "Qst_ANS_BAD"; // Wrong + Ans.Str = "✗"; + } + break; + case Usr_I_CAN_NOT: + default: + Ans.Class = "Qst_ANS_0"; // Blank answer + Ans.Str = "•"; + break; } - else - { - Ans.Class = "Qst_ANS_0"; // Blank answer - Ans.Str = "•"; - } - HTM_TD_Begin ("class=\"CT %s_%s\" title=\"%s\"", Ans.Class,The_GetSuffix (), Txt_TST_Answer_given_by_the_user); @@ -1459,47 +1474,50 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat, HTM_TD_Empty (1); /* Draw icon that indicates whether the answer is correct */ - if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) + switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER]) { - if (Question->Answer.Options[Indexes[NumOpt]].Correct) - { - HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\" title=\"%s\"", - The_GetSuffix (), - Txt_TST_Answer_given_by_the_teachers); - HTM_Txt ("•"); + case Usr_I_CAN: + if (Question->Answer.Options[Indexes[NumOpt]].Correct) + { + HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\" title=\"%s\"", + The_GetSuffix (), + Txt_TST_Answer_given_by_the_teachers); + HTM_Txt ("•"); + HTM_TD_End (); + } + else + HTM_TD_Empty (1); + break; + case Usr_I_CAN_NOT: + default: + HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",The_GetSuffix ()); + Ico_PutIconNotVisible (); HTM_TD_End (); - } - else - HTM_TD_Empty (1); - } - else - { - HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"", - The_GetSuffix ()); - Ico_PutIconNotVisible (); - HTM_TD_End (); + break; } /* Answer letter (a, b, c,...) */ - HTM_TD_Begin ("class=\"LT %s_%s\"", - ClassTxt,The_GetSuffix ()); + HTM_TD_Begin ("class=\"LT %s_%s\"",ClassTxt,The_GetSuffix ()); HTM_TxtF ("%c) ",'a' + (char) NumOpt); HTM_TD_End (); /* Answer text and feedback */ HTM_TD_Begin ("class=\"LT\""); - HTM_DIV_Begin ("class=\"%s_%s\"", - ClassTxt,The_GetSuffix ()); - if (ICanView[TstVis_VISIBLE_QST_ANS_TXT] == Usr_I_CAN) + HTM_DIV_Begin ("class=\"%s_%s\"",ClassTxt,The_GetSuffix ()); + switch (ICanView[TstVis_VISIBLE_QST_ANS_TXT]) { - HTM_Txt (Question->Answer.Options[Indexes[NumOpt]].Text); - Med_ShowMedia (&Question->Answer.Options[Indexes[NumOpt]].Media, - "Tst_MED_SHOW_CONT", - "Tst_MED_SHOW"); + case Usr_I_CAN: + HTM_Txt (Question->Answer.Options[Indexes[NumOpt]].Text); + Med_ShowMedia (&Question->Answer.Options[Indexes[NumOpt]].Media, + "Tst_MED_SHOW_CONT", + "Tst_MED_SHOW"); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_DIV_End (); if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) @@ -1593,55 +1611,57 @@ static void TstPrn_WriteTxtAnsPrint (struct Usr_Data *UsrDat, HTM_TD_Empty (1); /***** Write the correct answers *****/ - if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) + switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER]) { - HTM_TD_Begin ("class=\"CT\""); - HTM_TABLE_BeginPadding (2); + case Usr_I_CAN: + HTM_TD_Begin ("class=\"CT\""); + HTM_TABLE_BeginPadding (2); - for (NumOpt = 0; - NumOpt < Question->Answer.NumOptions; - NumOpt++) - { - HTM_TR_Begin (NULL); + for (NumOpt = 0; + NumOpt < Question->Answer.NumOptions; + NumOpt++) + { + HTM_TR_Begin (NULL); - /* Answer letter (a, b, c,...) */ - HTM_TD_Begin ("class=\"LT Qst_ANS_0_%s\"", - The_GetSuffix ()); - HTM_TxtF ("%c) ",'a' + (char) NumOpt); - HTM_TD_End (); + /* Answer letter (a, b, c,...) */ + HTM_TD_Begin ("class=\"LT Qst_ANS_0_%s\"", + The_GetSuffix ()); + HTM_TxtF ("%c) ",'a' + (char) NumOpt); + HTM_TD_End (); - /* Answer text and feedback */ - HTM_TD_Begin ("class=\"LT\""); + /* Answer text and feedback */ + HTM_TD_Begin ("class=\"LT\""); - HTM_DIV_Begin ("class=\"Qst_ANS_0_%s\"", - The_GetSuffix ()); - HTM_Txt (Question->Answer.Options[NumOpt].Text); - HTM_DIV_End (); + HTM_DIV_Begin ("class=\"Qst_ANS_0_%s\"", + The_GetSuffix ()); + HTM_Txt (Question->Answer.Options[NumOpt].Text); + HTM_DIV_End (); - if (ICanView[TstVis_VISIBLE_FEEDBACK_TXT] == Usr_I_CAN) - if (Question->Answer.Options[NumOpt].Feedback) - if (Question->Answer.Options[NumOpt].Feedback[0]) - { - HTM_DIV_Begin ("class=\"Qst_TXT_LIGHT\""); - HTM_Txt (Question->Answer.Options[NumOpt].Feedback); - HTM_DIV_End (); - } + if (ICanView[TstVis_VISIBLE_FEEDBACK_TXT] == Usr_I_CAN) + if (Question->Answer.Options[NumOpt].Feedback) + if (Question->Answer.Options[NumOpt].Feedback[0]) + { + HTM_DIV_Begin ("class=\"Qst_TXT_LIGHT\""); + HTM_Txt (Question->Answer.Options[NumOpt].Feedback); + HTM_DIV_End (); + } - HTM_TD_End (); + HTM_TD_End (); - HTM_TR_End (); - } + HTM_TR_End (); + } - HTM_TABLE_End (); - HTM_TD_End (); - } - else - { - HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"", - The_GetSuffix ()); - Ico_PutIconNotVisible (); - HTM_TD_End (); + HTM_TABLE_End (); + HTM_TD_End (); + break; + case Usr_I_CAN_NOT: + default: + HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",The_GetSuffix ()); + Ico_PutIconNotVisible (); + HTM_TD_End (); + break; } + HTM_TR_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) Err_NotEnoughMemoryExit (); HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", - Id,ClassDat,The_GetSuffix (), - The_GetColorRows ()); + Id,ClassDat,The_GetSuffix (),The_GetColorRows ()); Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime], Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, true,true,false,0x7); @@ -1933,96 +1952,124 @@ static void TstPrn_ShowUsrPrints (struct Usr_Data *UsrDat) /* Write number of questions */ HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) - HTM_Unsigned (Print.NumQsts.All); - else - Ico_PutIconNotVisible (); + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Result) + { + case Usr_I_CAN: + HTM_Unsigned (Print.NumQsts.All); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Write number of non-blank answers */ HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Result) { - if (Print.NumQsts.NotBlank) - HTM_Unsigned (Print.NumQsts.NotBlank); - else - HTM_Light0 (); + case Usr_I_CAN: + if (Print.NumQsts.NotBlank) + HTM_Unsigned (Print.NumQsts.NotBlank); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write number of blank answers */ HTM_TD_Begin ("class=\"RT %s_%s %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Result) { - NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank; - if (NumQstsBlank) - HTM_Unsigned (NumQstsBlank); - else - HTM_Light0 (); + case Usr_I_CAN: + NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank; + if (NumQstsBlank) + HTM_Unsigned (NumQstsBlank); + else + HTM_Light0 (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write score */ HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) { - HTM_Double2Decimals (Print.Score); - HTM_Txt ("/"); - HTM_Unsigned (Print.NumQsts.All); + case Usr_I_CAN: + HTM_Double2Decimals (Print.Score); + HTM_Txt ("/"); + HTM_Unsigned (Print.NumQsts.All); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); /* Write average score per question */ HTM_TD_Begin ("class=\"RT %s_%s %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / - (double) Print.NumQsts.All : - 0.0); - else - Ico_PutIconNotVisible (); + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / + (double) Print.NumQsts.All : + 0.0); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Write grade */ HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", - ClassDat,The_GetSuffix (), - The_GetColorRows ()); - if (ICanView.Score == Usr_I_CAN) - TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Tst_SCORE_MAX); - else - Ico_PutIconNotVisible (); + ClassDat,The_GetSuffix (),The_GetColorRows ()); + switch (ICanView.Score) + { + case Usr_I_CAN: + TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score, + Tst_SCORE_MAX); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; + } HTM_TD_End (); /* Link to show this test */ - HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", - The_GetColorRows ()); - if (ICanView.Result == Usr_I_CAN) + HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",The_GetColorRows ()); + switch (ICanView.Result) { - Frm_BeginForm (Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : - ActSeeOneTstResOth); - ParCod_PutPar (ParCod_Prn,Print.PrnCod); - Ico_PutIconLink ("tasks.svg",Ico_BLACK, - Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : - ActSeeOneTstResOth); - Frm_EndForm (); + case Usr_I_CAN: + Frm_BeginForm (Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : + ActSeeOneTstResOth); + ParCod_PutPar (ParCod_Prn,Print.PrnCod); + Ico_PutIconLink ("tasks.svg",Ico_BLACK, + Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : + ActSeeOneTstResOth); + Frm_EndForm (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -2339,16 +2386,20 @@ void TstPrn_ShowOnePrint (void) HTM_TD_Begin ("class=\"LB DAT_%s\"", The_GetSuffix ()); - if (ICanView.Score == Usr_I_CAN) + switch (ICanView.Score) { - HTM_STRONG_Begin (); - HTM_Double2Decimals (Print.Score); - HTM_Txt ("/"); - HTM_Unsigned (Print.NumQsts.All); - HTM_STRONG_End (); + case Usr_I_CAN: + HTM_STRONG_Begin (); + HTM_Double2Decimals (Print.Score); + HTM_Txt ("/"); + HTM_Unsigned (Print.NumQsts.All); + HTM_STRONG_End (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -2363,14 +2414,19 @@ void TstPrn_ShowOnePrint (void) HTM_TD_Begin ("class=\"LB DAT_%s\"", The_GetSuffix ()); - if (ICanView.Score == Usr_I_CAN) + switch (ICanView.Score) { - HTM_STRONG_Begin (); - TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Tst_SCORE_MAX); - HTM_STRONG_End (); + case Usr_I_CAN: + HTM_STRONG_Begin (); + TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score, + Tst_SCORE_MAX); + HTM_STRONG_End (); + break; + case Usr_I_CAN_NOT: + default: + Ico_PutIconNotVisible (); + break; } - else - Ico_PutIconNotVisible (); HTM_TD_End (); HTM_TR_End (); @@ -2420,12 +2476,18 @@ static void TstRes_CheckIfICanSeePrintResult (const struct TstPrn_Print *Print, // if the print is not sent ==> I can not view results ICanView->Result = (Print->Sent && Usr_ItsMe (UsrCod) == Usr_ME) ? Usr_I_CAN : Usr_I_CAN_NOT; - if (ICanView->Result == Usr_I_CAN) - // Depends on 5 visibility icons associated to tests - ICanView->Score = TstVis_IsVisibleTotalScore (TstCfg_GetConfigVisibility ()) ? Usr_I_CAN : - Usr_I_CAN_NOT; - else - ICanView->Score = Usr_I_CAN_NOT; + switch (ICanView->Result) + { + case Usr_I_CAN: + // Depends on 5 visibility icons associated to tests + ICanView->Score = TstVis_IsVisibleTotalScore (TstCfg_GetConfigVisibility ()) ? Usr_I_CAN : + Usr_I_CAN_NOT; + break; + case Usr_I_CAN_NOT: + default: + ICanView->Score = Usr_I_CAN_NOT; + break; + } break; case Rol_NET: case Rol_TCH: diff --git a/swad_timeline_user.c b/swad_timeline_user.c index 865162a1c..61ec4a152 100644 --- a/swad_timeline_user.c +++ b/swad_timeline_user.c @@ -298,7 +298,6 @@ void TmlUsr_PutIconFavSha (TmlUsr_FavSha_t FavSha, TmlUsr_PutDisabledIconFavSha (FavSha,NumUsrs); break; case Usr_OTHER: // I am not the author - default: TmlFrm_PutFormToFavUnfShaUns (FavSha,Cod); break; }