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

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

View File

@ -5261,20 +5261,22 @@ int swad__getLastLocation (struct soap *soap,
The other user does not have to share any course with me,
but at least some course of each one has to share center.
*/
if (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode) == Usr_I_CAN)
switch (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode))
{
case Usr_I_CAN:
/***** Get list of locations *****/
NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode);
API_GetLocationData (soap,
&(getLastLocationOut->location),
&(getLastLocationOut->checkinTime), // Get check in time
&mysql_res,NumLocs);
}
else
{
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;

View File

@ -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)
switch (ICanSeeUsrID)
{
case Usr_I_CAN:
HTM_Txt (UsrDat->IDs.List[NumID].ID);
else
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,9 +698,9 @@ void ID_RemoveOtherUsrID (void)
{
/***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Remove user's ID *****/
ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat,
Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod));
@ -703,9 +710,11 @@ void ID_RemoveOtherUsrID (void)
/***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -720,19 +729,18 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
extern const char *Txt_ID_X_removed;
extern const char *Txt_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))
{
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
if (UsrDat->IDs.Num >= 2)
switch (MeOrOther)
{
case Usr_ME:
@ -741,27 +749,32 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
Usr_I_CAN;
break;
case Usr_OTHER:
default:
ICanRemove = Usr_I_CAN;
break;
}
if (ICanRemove == Usr_I_CAN)
switch (ICanRemove)
{
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);
}
else
Txt_ID_X_removed,UsrID);
break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID,
Txt_You_can_not_delete_this_ID);
break;
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
}
/*****************************************************************************/
@ -788,9 +801,9 @@ void ID_ChangeOtherUsrID (void)
{
/***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Change user's ID *****/
ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat,
Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod));
@ -800,9 +813,11 @@ void ID_ChangeOtherUsrID (void)
/***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -824,8 +839,9 @@ 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))
{
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
@ -880,9 +896,12 @@ static void ID_ChangeUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID,
Txt_The_ID_X_is_not_valid,
NewID);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
}
/*****************************************************************************/
@ -917,8 +936,9 @@ void ID_ConfirmOtherUsrID (void)
ICanConfirm = Usr_I_CAN;
}
if (ICanConfirm == Usr_I_CAN)
switch (ICanConfirm)
{
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
@ -956,9 +976,12 @@ void ID_ConfirmOtherUsrID (void)
}
else // User's ID not found
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
}
else // I can not confirm
break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
/***** Show one or multiple records *****/
switch (Gbl.Action.Original)

View File

@ -487,9 +487,9 @@ void Acc_ShowFormChgOtherUsrAccount (void)
{
/***** Get user whose account must be changed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Get user's nickname and email address
It's necessary because nickname or email could be just updated *****/
Nck_DB_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname);
@ -514,11 +514,13 @@ void Acc_ShowFormChgOtherUsrAccount (void)
ID_ShowFormChangeOtherUsrID ();
HTM_DIV_End ();
/***** Begin container for this user *****/
/***** End container for this user *****/
HTM_DIV_End ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -770,13 +772,17 @@ void Acc_GetUsrCodAndRemUsrGbl (void)
bool Error = false;
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod))
{
if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN)
case Usr_I_CAN:
Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR);
else
break;
case Usr_I_CAN_NOT:
default:
Error = true;
break;
}
else
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,

View File

@ -102,8 +102,9 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT;
if (ICanRegister == Usr_I_CAN)
switch (ICanRegister)
{
case Usr_I_CAN:
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree
{
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y,
@ -126,9 +127,12 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE);
}
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
}
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)
{
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
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
}
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -314,8 +322,9 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT;
if (ICanRemove == Usr_I_CAN)
switch (ICanRemove)
{
case Usr_I_CAN:
/* Check if the other user is an admin of the current institution/center/degree */
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
@ -333,9 +342,12 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y,
Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[Level].FullName);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
}
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -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,10 +408,9 @@ 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);
@ -433,9 +431,13 @@ void Agd_ShowUsrAgenda (void)
/***** End box *****/
Box_BoxEnd ();
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
if (Error)
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
}

View File

@ -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)
{
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 ();
}
else // Show without form
{
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);
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)
{
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 ();
}
else if (Event->CommentTchVisible) // Show without form
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 *****/

View File

@ -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 (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);
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);
Ico_PutContextualIconToRemove (Brw_ActRemoveFolder[Gbl.FileBrowser.Type],
NULL,
Brw_PutImplicitParsFileBrowser,
&Gbl.FileBrowser.FilFolLnk);
break;
default:
break;
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed ();
break;
}
HTM_TD_End ();
}
@ -4232,17 +4242,20 @@ 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 *****/
switch (Brw_CheckIfCanPasteIn (Level))
{
/* Icon to paste */
if (Brw_CheckIfCanPasteIn (Level) == Usr_I_CAN)
{
/***** Form to paste the content of the clipboard *****/
case Usr_I_CAN:
/* Form to paste the content of the clipboard */
Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type],
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk);
}
else
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;
}
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
{
case Usr_I_CAN:
if (IconSubtree == Brw_ICON_TREE_EXPAND)
{
/***** Visible icon with folder closed *****/
/* Visible icon with folder closed */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
false, // Closed
HidVis_VISIBLE); // Visible
/***** Hidden icon with folder open *****/
/* Hidden icon with folder open */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
true, // Open
HidVis_HIDDEN); // Hidden
}
else
{
/***** Hidden icon with folder closed *****/
/* Hidden icon with folder closed */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
false, // Closed
HidVis_HIDDEN); // Hidden
/***** Visible icon with folder open *****/
/* Visible icon with folder open */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
true, // Open
HidVis_VISIBLE); // Visible
}
}
else // I can't create a new file or folder
{
break;
case Usr_I_CAN_NOT:
default:
if (IconSubtree == Brw_ICON_TREE_EXPAND)
{
/***** Visible icon with folder closed *****/
/* Visible icon with folder closed */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed
HidVis_VISIBLE);
/***** Hidden icon with folder open *****/
/* Hidden icon with folder open */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open
HidVis_HIDDEN);
}
else
{
/***** Hidden icon with folder closed *****/
/* Hidden icon with folder closed */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed
HidVis_HIDDEN);
/***** Visible icon with folder open *****/
/* Visible icon with folder open */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open
HidVis_VISIBLE);
}
break;
}
/***** End cell *****/
@ -4720,12 +4735,14 @@ 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?
{
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_INPUT_TEXT ("NewFolderName",Brw_MAX_CHARS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Name,
HTM_SUBMIT_ON_CHANGE,
"class=\"LST_EDIT %s_%s %s\"",
InputStyle,
@ -4733,9 +4750,9 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
Gbl.FileBrowser.Clipboard.IsThisFile ? "LIGHT_GREEN" :
The_GetColorRows ());
Frm_EndForm ();
}
else
{
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);
@ -4747,6 +4764,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
HTM_SPAN_End ();
break;
}
/***** End cell *****/
@ -4934,8 +4952,9 @@ 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?
{
case Usr_I_CAN:
/***** Show question and button to remove file/link *****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
Gbl.FileBrowser.Level,
@ -4946,9 +4965,12 @@ void Brw_AskRemFileFromTree (void)
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk,
Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X,
FileNameToShow);
}
else
break;
case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link);
break;
}
/***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
@ -4969,8 +4991,9 @@ 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?
{
case Usr_I_CAN:
snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder,
Gbl.FileBrowser.FilFolLnk.Full);
@ -5000,9 +5023,12 @@ void Brw_RemFileFromTree (void)
}
else // File / link not found
Err_FileFolderNotFoundExit ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link);
break;
}
/***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
@ -5022,8 +5048,9 @@ 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?
{
case Usr_I_CAN:
snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder,
Gbl.FileBrowser.FilFolLnk.Full);
@ -5053,9 +5080,12 @@ void Brw_RemFolderFromTree (void)
}
else // Folder not found
Err_FileFolderNotFoundExit ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_folder);
break;
}
/***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
@ -5769,8 +5799,9 @@ 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))
{
case Usr_I_CAN:
/***** Construct the relative path of the origin file or folder *****/
switch (Gbl.FileBrowser.Clipboard.FileBrowser)
{
@ -5949,9 +5980,13 @@ static void Brw_PasteClipboard (struct BrwSiz_BrowserSize *Size)
/***** Add path where new tree is pasted to table of expanded folders *****/
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full);
break;
case Usr_I_CAN_NOT:
default:
// It's difficult, but not impossible that a user sees this message
Err_ShowErrorAndExit (Txt_You_can_not_paste_file_or_folder_here);
break;
}
else
Err_ShowErrorAndExit (Txt_You_can_not_paste_file_or_folder_here); // It's difficult, but not impossible that a user sees this message
}
/*****************************************************************************/
@ -6190,8 +6225,9 @@ void Brw_ShowFormFileBrowser (void)
Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new folder or file is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN)
switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{
case Usr_I_CAN:
/***** Name of the folder to be shown ****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
Gbl.FileBrowser.Level,
@ -6221,13 +6257,14 @@ void Brw_ShowFormFileBrowser (void)
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
{
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 ();
break;
}
}
@ -6486,8 +6523,9 @@ 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))
{
case Usr_I_CAN:
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{
/* In Gbl.FileBrowser.NewFilFolLnkName is the name of the new folder */
@ -6560,9 +6598,13 @@ void Brw_RecFolderFileBrowser (void)
}
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,11 +6628,13 @@ 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?
{
case Usr_I_CAN:
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{
if (strcmp (Gbl.FileBrowser.FilFolLnk.Name,Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed
if (strcmp (Gbl.FileBrowser.FilFolLnk.Name,
Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed
{
/* Gbl.FileBrowser.FilFolLnk.Name holds the new name of the folder */
snprintf (OldPathInTree,sizeof (OldPathInTree),"%s/%s",
@ -6621,8 +6665,10 @@ void Brw_RenFolderFileBrowser (void)
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);
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.");
@ -6669,9 +6715,12 @@ void Brw_RenFolderFileBrowser (void)
}
else // Folder name not valid
Ale_ShowAlerts (NULL);
}
else
break;
case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_rename_this_folder);
break;
}
/***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
@ -6757,8 +6806,9 @@ 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))
{
case Usr_I_CAN:
/***** First, we save in disk the file received *****/
Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG,
SrcFileName,MIMEType);
@ -6901,10 +6951,14 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
else // Empty filename
Ale_CreateAlert (Ale_WARNING,NULL,
Txt_UPLOAD_FILE_You_must_specify_the_file_NO_HTML);
}
else // I do not have permission to create files here
break;
case Usr_I_CAN_NOT:
default:
// I do not have permission to create files here
Ale_CreateAlert (Ale_WARNING,NULL,
Txt_UPLOAD_FILE_Forbidden_NO_HTML);
break;
}
return UploadSucessful;
}
@ -6937,8 +6991,9 @@ 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))
{
case Usr_I_CAN:
/***** Create a new file to store URL ****/
Par_GetParText ("NewLinkURL",URL,PATH_MAX);
if ((LengthURL = strlen (URL)))
@ -7071,9 +7126,13 @@ void Brw_RecLinkFileBrowser (void)
}
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,8 +7372,9 @@ void Brw_ShowFileMetadata (void)
}
}
if (ICanView == Usr_I_CAN)
switch (ICanView)
{
case Usr_I_CAN:
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{
@ -7354,15 +7414,14 @@ void Brw_ShowFileMetadata (void)
/***** Begin box *****/
// Put icon to get link?
if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk &&
if ((Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk &&
(FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) &&
Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,&FileMetadata,
NULL);
Rsc_CheckIfICanGetLink ()) == Usr_I_CAN)
Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,
&FileMetadata,NULL);
else
Box_BoxShadowBegin (NULL,NULL,NULL,
NULL);
Box_BoxShadowBegin (NULL,NULL,NULL,NULL);
/***** Begin form to update the metadata of a file *****/
@ -7371,14 +7430,10 @@ void Brw_ShowFileMetadata (void)
/* 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:
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:
@ -7630,33 +7685,27 @@ void Brw_ShowFileMetadata (void)
/***** Add paths until file to table of expanded folders *****/
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path);
}
else // ICanView == Usr_I_CAN_NOT
{
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:
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:
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:
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:
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;
@ -7664,7 +7713,9 @@ void Brw_ShowFileMetadata (void)
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,8 +7843,9 @@ void Brw_DownloadFile (void)
}
}
if (ICanView == Usr_I_CAN)
switch (ICanView)
{
case Usr_I_CAN:
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{
@ -7851,33 +7903,27 @@ void Brw_DownloadFile (void)
Gbl.Layout.HTMLStartWritten =
Gbl.Layout.DivsEndWritten =
Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all
}
else // ICanView == Usr_I_CAN_NOT
{
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:
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:
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:
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:
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;
@ -7889,6 +7935,7 @@ void Brw_DownloadFile (void)
/***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();
break;
}
}

View File

@ -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 *****/

View File

@ -793,8 +793,9 @@ 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)
{
case Usr_I_CAN:
Frm_BeginForm (ActChgCtrPlc);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL,
@ -819,13 +820,16 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
}
HTM_SELECT_End ();
Frm_EndForm ();
}
else
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;
}
HTM_TD_End ();
/* Center short name and full name */
@ -839,8 +843,9 @@ 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)
{
case Usr_I_CAN:
Frm_BeginForm (ActChgCtrWWW);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
HTM_INPUT_URL ("WWW",Ctr->WWW,HTM_SUBMIT_ON_CHANGE,
@ -848,9 +853,9 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
" required=\"required\"",
The_GetSuffix ());
Frm_EndForm ();
}
else
{
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\""
@ -861,6 +866,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
HTM_Txt (WWW);
HTM_A_End ();
HTM_DIV_End ();
break;
}
HTM_TD_End ();

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#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)

View File

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

View File

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

View File

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

View File

@ -2443,12 +2443,18 @@ void Enr_ReqRegRemTch (void)
static void Enr_ReqRegRemUsr (Rol_Role_t Role)
{
if (Adm_CheckIfICanAdminOtherUsrs () == Usr_I_CAN)
switch (Adm_CheckIfICanAdminOtherUsrs ())
{
case Usr_I_CAN:
/***** Form to request the user's ID of another user *****/
Enr_ReqAnotherUsrIDToRegisterRemove (Role);
else
break;
case Usr_I_CAN_NOT:
default:
/***** Form to request if register/remove me *****/
Enr_AskIfRegRemMe (Role);
break;
}
}
/*****************************************************************************/
@ -2672,11 +2678,15 @@ void Enr_ReqRemUsrFromCrs (void)
{
/***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Enr_CheckIfICanRemUsrFromCrs ())
{
if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN)
case Usr_I_CAN:
Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat);
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -2692,13 +2702,18 @@ void Enr_RemUsrFromCrs1 (void)
{
/***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Enr_CheckIfICanRemUsrFromCrs ())
{
if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN)
Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,&Gbl.Hierarchy.Node[Hie_CRS],
case Usr_I_CAN:
Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,
&Gbl.Hierarchy.Node[Hie_CRS],
Enr_DO_NOT_REMOVE_USR_PRODUCTION,
Cns_VERBOSE);
else
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;

View File

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

View File

@ -178,8 +178,9 @@ 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))
{
case Usr_I_CAN:
/***** Set basic data of exam print *****/
Print.SesCod = Session.SesCod;
Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
@ -223,10 +224,13 @@ void ExaPrn_ShowExamPrint (void)
/***** Show test to be answered *****/
ExaPrn_ShowExamPrintToFillIt (&Exams,&Print);
}
else // Session not open or accessible
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;
}
}
/*****************************************************************************/
@ -996,8 +1000,9 @@ 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))
{
case Usr_I_CAN:
/***** Set log open to true ****/
ExaLog_SetIfCanAnswer (true);
@ -1018,9 +1023,9 @@ void ExaPrn_ReceivePrintAnswer (void)
/***** Show table with questions to answer *****/
ExaPrn_ShowTableWithQstsToFill (&Exams,&Print);
}
else // Not accessible to answer
{
break;
case Usr_I_CAN_NOT: // Not accessible to answer
default:
/***** Set log open to false ****/
ExaLog_SetIfCanAnswer (false);
@ -1032,6 +1037,7 @@ void ExaPrn_ReceivePrintAnswer (void)
ExaSes_PutParsEdit (&Exams);
Btn_PutCreateButton (Txt_Continue);
Frm_EndForm ();
break;
}
}

View File

@ -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,163 +849,201 @@ 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)
The_GetSuffix (),The_GetColorRows ());
switch (ICanView.Score)
{
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All);
else
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Total)
HTM_Unsigned (Print.NumQsts.Valid.Total);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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;
case Usr_I_CAN:
NumQstsInvalid = Print.NumQsts.All -
Print.NumQsts.Valid.Total;
if (NumQstsInvalid)
HTM_Unsigned (NumQstsInvalid);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Correct)
HTM_Unsigned (Print.NumQsts.Valid.Correct);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Negative)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Zero)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Positive)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (Print.NumQsts.Valid.Blank)
HTM_Unsigned (Print.NumQsts.Valid.Blank);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score.Valid);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.Valid.Total);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
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);
else
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)
{
case Usr_I_CAN:
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade);
TstPrn_ShowGrade (Grade,Exam.MaxGrade);
TotalGrade += Grade;
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
Exams->Exam.ExaCod = Session.ExaCod;
Exams->SesCod = Session.SesCod;
switch (MeOrOther)
@ -1024,9 +1061,12 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
break;
}
Frm_EndForm ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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,13 +1442,19 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam,
// Whether I belong or not to groups of session is not checked here...
// ...because I should be able to see old exams made in old groups to which I belonged
if (ICanView->Result == Usr_I_CAN)
switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to exam
ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN :
Usr_I_CAN_NOT;
else
break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT;
break;
}
break;
case Rol_NET:
case Rol_TCH:
case Rol_DEG_ADM:
@ -1602,8 +1647,9 @@ 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)
{
case Usr_I_CAN:
HTM_TxtF ("%u",Print->NumQsts.All);
if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
{
@ -1625,9 +1671,12 @@ static void ExaRes_ShowExamResultNumQsts (struct ExaPrn_Print *Print,
HTM_Txt (")");
}
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
/***** Row end *****/
@ -1656,7 +1705,9 @@ 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)
switch (ICanView->Score)
{
case Usr_I_CAN:
HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1):&nbsp;%u; "
"%s(-1&le;<em>p<sub>i</sub></em>&lt;0):&nbsp;%u; "
"%s(<em>p<sub>i</sub></em>=0):&nbsp;%u; "
@ -1667,8 +1718,12 @@ static void ExaRes_ShowExamResultNumAnss (struct ExaPrn_Print *Print,
Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Zero,
Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Positive,
Txt_ANSWERS_blank ,Print->NumQsts.Valid.Blank);
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
/***** Row end *****/
@ -1695,8 +1750,9 @@ 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)
{
case Usr_I_CAN:
/* Score counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
HTM_STRONG_Begin ();
@ -1717,9 +1773,12 @@ static void ExaRes_ShowExamResultScore (struct ExaPrn_Print *Print,
HTM_Unsigned (Print->NumQsts.Valid.Total);
HTM_STRONG_End ();
}
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
/***** Row end *****/
@ -1747,8 +1806,9 @@ 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)
{
case Usr_I_CAN:
/* Grade counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
HTM_STRONG_Begin ();
@ -1762,12 +1822,17 @@ static void ExaRes_ShowExamResultGrade (const struct Exa_Exam *Exam,
HTM_Txt ("; ");
HTM_TxtColonNBSP (Txt_valid_grade);
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,Print->Score.Valid,Exam->MaxGrade);
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,
Print->Score.Valid,
Exam->MaxGrade);
HTM_STRONG_End ();
}
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
/***** Row end *****/

View File

@ -500,8 +500,9 @@ 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))
{
case Usr_I_CAN:
Frm_BeginForm (ActSeeExaPrn);
Exa_PutPars (Exams);
ParCod_PutPar (ParCod_Ses,Session->SesCod);
@ -513,14 +514,15 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
HTM_Txt (Session->Title);
HTM_BUTTON_End ();
Frm_EndForm ();
}
else
{
break;
case Usr_I_CAN_NOT:
default:
HTM_SPAN_Begin ("class=\"%s_%s\"",
HidVis_TitleClass[Session->HiddenOrVisible],
The_GetSuffix ());
HTM_Txt (Session->Title);
HTM_SPAN_End ();
break;
}
HTM_ARTICLE_End ();
@ -650,8 +652,9 @@ 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))
{
case Usr_I_CAN:
/***** Put form to change visibility of session results *****/
if (Session->ShowUsrResults)
Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL,
@ -661,14 +664,15 @@ static void ExaSes_ListOneOrMoreSessionsResultTch (struct Exa_Exams *Exams,
Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL,
ExaSes_PutParsEdit,Exams,
"eye-slash.svg",Ico_RED);
}
else // Don't put form
{
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;
}
}

View File

@ -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)
switch (ICanEditSets)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL,
ExaSet_PutParsOneSet,Exams);
else
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)
switch (ICanEditQuestions)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL,
ExaSet_PutParsOneQst,Exams);
else
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)
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;
else
break;
case Usr_I_CAN_NOT:
default:
return Usr_I_CAN_NOT; // Sets of questions are not editable
break;
}
return Usr_I_CAN_NOT;
}
/*****************************************************************************/

View File

@ -1004,22 +1004,24 @@ static void For_ShowAForumPost (struct For_Forums *Forums,
/***** Form to ban/unban post *****/
HTM_TD_Begin ("class=\"CONTEXT_COL\"");
if (ICanModerateForum == Usr_I_CAN)
switch (ICanModerateForum)
{
case Usr_I_CAN:
NextAction = DisabledOrEnabled == Cns_ENABLED ? For_ActionsDisPstFor[Forums->Forum.Type] :
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
{
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,7 +1520,8 @@ 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 :
IsLastItemInLevel[1] = (IsLastForum &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel);
@ -1563,7 +1566,8 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_USRS &&
Forums->Forum.HieCod == InsCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT;
IsLastItemInLevel[2] = (IsLastIns && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
IsLastItemInLevel[2] = (IsLastIns &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel);
@ -1611,7 +1615,8 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_CENTER_USRS &&
Forums->Forum.HieCod == CtrCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT;
IsLastItemInLevel[3] = (IsLastCtr && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
IsLastItemInLevel[3] = (IsLastCtr &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel);
@ -1659,7 +1664,8 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_USRS &&
Forums->Forum.HieCod == DegCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT;
IsLastItemInLevel[4] = (IsLastDeg && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
IsLastItemInLevel[4] = (IsLastDeg &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel);

View File

@ -1636,16 +1636,24 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games)
MYSQL_RES *mysql_res;
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)
switch (ICanEditQuestions)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL,
Gam_PutParsOneQst,Games);
else
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;
}
/*****************************************************************************/

View File

@ -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,8 +633,9 @@ 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);
@ -674,7 +678,6 @@ void Grp_ChangeMyGrps (Cns_QuietOrVerbose_t QuietOrVerbose)
/***** Free memory with the list of groups which I want to belong to *****/
Grp_FreeListCodGrp (&LstGrpsIWant);
}
}
/*****************************************************************************/
/********************** Change groups of another user ************************/
@ -689,8 +692,9 @@ void Grp_ChangeOtherUsrGrps (void)
bool SelectionIsValid;
/***** Can I change another user's groups? *****/
if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN)
{
if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN_NOT)
return;
/***** Get list of groups types and groups in current course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -719,7 +723,6 @@ void Grp_ChangeOtherUsrGrps (void)
/***** Free memory with the list of groups to/from which register/remove users *****/
Grp_FreeListCodGrp (&LstGrpsUsrWants);
}
}
/*****************************************************************************/
/********************** Change my groups atomically **************************/
@ -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,8 +1928,9 @@ 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
{
case Usr_I_CAN:
ICanChangeMySelectionForThisGrp = Usr_I_CAN;
if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
{
@ -1934,9 +1943,12 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
else // If group is closed
ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT;
}
}
else // I can not change my selection for this group type
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,8 +2200,9 @@ 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)
{
case Usr_I_CAN:
if (Gbl.Crs.Grps.AllGrps)
Checked = true;
else
@ -2201,9 +2214,12 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp)
Checked = true;
break;
}
}
else
break;
case Usr_I_CAN_NOT:
default:
Checked = false;
break;
}
HTM_TR_Begin (NULL);

View File

@ -127,23 +127,6 @@ static Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_URL ][Inf_ASSESSMENT ] = ActRcvURLAss,
};
/***** 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)
{

View File

@ -950,8 +950,9 @@ static void Ins_ListInstitutionsForEdition (void)
/* Institution WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN)
switch (ICanEdit)
{
case Usr_I_CAN:
Frm_BeginForm (ActChgInsWWW);
ParCod_PutPar (ParCod_OthHie,Ins->HieCod);
HTM_INPUT_URL ("WWW",Ins->WWW,HTM_SUBMIT_ON_CHANGE,
@ -959,9 +960,9 @@ static void Ins_ListInstitutionsForEdition (void)
" required=\"required\"",
The_GetSuffix ());
Frm_EndForm ();
}
else
{
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\""
@ -972,6 +973,7 @@ static void Ins_ListInstitutionsForEdition (void)
HTM_Txt (WWW);
HTM_A_End ();
HTM_DIV_End ();
break;
}
HTM_TD_End ();

View File

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

View File

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

View File

@ -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,90 +785,114 @@ 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)
The_GetSuffix (),The_GetColorRows ());
switch (ICanView.Score)
{
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All);
else
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)
{
case Usr_I_CAN:
if (Print.NumQsts.NotBlank)
HTM_Unsigned (Print.NumQsts.NotBlank);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
if (NumQstsBlank)
HTM_Unsigned (NumQstsBlank);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
The_GetSuffix (),The_GetColorRows ());
switch (ICanView.Score)
{
case Usr_I_CAN:
HTM_Double2Decimals (Print.NumQsts.All ? Print.Score /
(double) Print.NumQsts.All :
0.0);
else
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);
case Usr_I_CAN:
Grade = TstPrn_ComputeGrade (Print.NumQsts.All,Print.Score,
Games->Game.MaxGrade);
TstPrn_ShowGrade (Grade,Games->Game.MaxGrade);
TotalGrade += Grade;
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
Games->Game.GamCod = Match.GamCod;
Games->MchCod = Match.MchCod;
switch (MeOrOther)
@ -888,9 +910,12 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
break;
}
Frm_EndForm ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All);
HTM_STRONG_End ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Games.Game.MaxGrade);
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,
Games.Game.MaxGrade);
HTM_STRONG_End ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
HTM_TR_End ();
@ -1287,13 +1320,19 @@ static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game,
// Whether I belong or not to groups of match is not checked here...
// ...because I should be able to see old matches made in old groups to which I belonged
if (ICanView->Result == Usr_I_CAN)
switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to game
ICanView->Score = TstVis_IsVisibleTotalScore (Game->Visibility) ? Usr_I_CAN :
Usr_I_CAN_NOT;
else
break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT;
break;
}
break;
case Rol_NET:
case Rol_TCH:
case Rol_DEG_ADM:

View File

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

View File

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

View File

@ -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,9 +518,9 @@ void Pho_ReqRemUsrPhoto (void)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS))
switch (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat))
{
if (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Show current photo and help message *****/
if (Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL))
{
@ -543,9 +540,11 @@ void Pho_ReqRemUsrPhoto (void)
}
else
Ale_ShowAlert (Ale_INFO,Txt_The_photo_no_longer_exists);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -3050,9 +3050,9 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects,
/***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Prj_CheckIfICanEditProject (&Projects->Prj))
{
if (Prj_CheckIfICanEditProject (&Projects->Prj) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Show question and button to remove user as a role from project *****/
/* Begin alert */
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)],
@ -3074,9 +3074,11 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects,
/* End alert */
Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,NULL,NULL,Btn_NO_BUTTON,NULL);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -3128,9 +3130,9 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
/***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Prj_CheckIfICanEditProject (&Projects.Prj))
{
if (Prj_CheckIfICanEditProject (&Projects.Prj) == Usr_I_CAN)
{
case Usr_I_CAN:
/***** Remove user from the table of project-users *****/
Prj_DB_RemoveUsrFromPrj (Projects.Prj.PrjCod,RoleInPrj,Gbl.Usrs.Other.UsrDat.UsrCod);
@ -3143,9 +3145,11 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
Gbl.Usrs.Other.UsrDat.FullName,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex],
Projects.Prj.Title);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
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 ())
{
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 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
/* Icon to inform about locked/unlocked project edition */
Prj_PutIconOffLockedUnlocked (&Projects->Prj);
break;
}
/***** 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)
switch (Prj_CheckIfICanFillRubric (Prj.PrjCod,WhichRubric))
{
case Usr_I_CAN:
Rub_DB_UpdateScore (Rsc_PROJECT,Prj.PrjCod,-1L,CriCod,Score);
else
break;
case Usr_I_CAN_NOT:
default:
Err_NoPermission ();
break;
}
/***** Free memory of the project *****/
Prj_FreeMemProject (&Prj);

View File

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

View File

@ -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,7 +254,8 @@ bool Rub_CheckIfEditable (void)
Rubric->NumCriteria != 0;
*/
return true;
else
}
return false; // Questions are not editable
}

View File

@ -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)
switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{
case Usr_I_CAN:
HTM_Long (Question->Answer.Integer);
else
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])
{
case Usr_I_CAN:
HTM_Txt ("[");
HTM_Double (Question->Answer.FloatingPoint[0]);
HTM_Txt ("; ");
HTM_Double (Question->Answer.FloatingPoint[1]);
HTM_Txt ("]");
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{
case Usr_I_CAN:
Qst_WriteAnsTF (Question->Answer.TF);
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
HTM_TR_End ();
@ -1430,8 +1444,9 @@ 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])
{
case Usr_I_CAN:
if (Question->Answer.Options[Indexes[NumOpt]].Correct)
{
Ans.Class = "Qst_ANS_OK"; // Correct
@ -1442,13 +1457,13 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
Ans.Class = "Qst_ANS_BAD"; // Wrong
Ans.Str = "&cross;";
}
}
else
{
break;
case Usr_I_CAN_NOT:
default:
Ans.Class = "Qst_ANS_0"; // Blank answer
Ans.Str = "&bull;";
break;
}
HTM_TD_Begin ("class=\"CT %s_%s\" title=\"%s\"",
Ans.Class,The_GetSuffix (),
Txt_TST_Answer_given_by_the_user);
@ -1459,8 +1474,9 @@ 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])
{
case Usr_I_CAN:
if (Question->Answer.Options[Indexes[NumOpt]].Correct)
{
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\" title=\"%s\"",
@ -1471,35 +1487,37 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
}
else
HTM_TD_Empty (1);
}
else
{
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",
The_GetSuffix ());
break;
case Usr_I_CAN_NOT:
default:
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)&nbsp;",'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])
{
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");
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_DIV_End ();
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN)
@ -1593,8 +1611,9 @@ static void TstPrn_WriteTxtAnsPrint (struct Usr_Data *UsrDat,
HTM_TD_Empty (1);
/***** Write the correct answers *****/
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN)
switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{
case Usr_I_CAN:
HTM_TD_Begin ("class=\"CT\"");
HTM_TABLE_BeginPadding (2);
@ -1634,14 +1653,15 @@ static void TstPrn_WriteTxtAnsPrint (struct Usr_Data *UsrDat,
HTM_TABLE_End ();
HTM_TD_End ();
}
else
{
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",
The_GetSuffix ());
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,86 +1952,111 @@ 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)
ClassDat,The_GetSuffix (),The_GetColorRows ());
switch (ICanView.Result)
{
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All);
else
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)
{
case Usr_I_CAN:
if (Print.NumQsts.NotBlank)
HTM_Unsigned (Print.NumQsts.NotBlank);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank;
if (NumQstsBlank)
HTM_Unsigned (NumQstsBlank);
else
HTM_Light0 ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All);
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
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);
else
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
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)
{
case Usr_I_CAN:
Frm_BeginForm (Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe :
ActSeeOneTstResOth);
ParCod_PutPar (ParCod_Prn,Print.PrnCod);
@ -2020,9 +2064,12 @@ static void TstPrn_ShowUsrPrints (struct Usr_Data *UsrDat)
Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe :
ActSeeOneTstResOth);
Frm_EndForm ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score);
HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All);
HTM_STRONG_End ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
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)
{
case Usr_I_CAN:
HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Tst_SCORE_MAX);
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,
Tst_SCORE_MAX);
HTM_STRONG_End ();
}
else
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible ();
break;
}
HTM_TD_End ();
HTM_TR_End ();
@ -2420,13 +2476,19 @@ static void TstRes_CheckIfICanSeePrintResult (const struct TstPrn_Print *Print,
// if the print is not sent ==> I can not view results
ICanView->Result = (Print->Sent && Usr_ItsMe (UsrCod) == Usr_ME) ? Usr_I_CAN :
Usr_I_CAN_NOT;
if (ICanView->Result == Usr_I_CAN)
switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to tests
ICanView->Score = TstVis_IsVisibleTotalScore (TstCfg_GetConfigVisibility ()) ? Usr_I_CAN :
Usr_I_CAN_NOT;
else
break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT;
break;
}
break;
case Rol_NET:
case Rol_TCH:
case Rol_DEG_ADM:

View File

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