Version 21.56.5: Nov 10, 2021 Code refactoring in switch statements.

This commit is contained in:
acanas 2021-11-10 23:05:08 +01:00
parent f9b4ab100b
commit 17e63e751c
15 changed files with 283 additions and 457 deletions

View File

@ -42,6 +42,7 @@
#define Act_MAX_CHARS_ACTION_TXT (256 - 1) // 255
#define Act_MAX_BYTES_ACTION_TXT Act_MAX_CHARS_ACTION_TXT // 255
#define Act_NUM_CONTENTS 2
typedef enum
{
Act_CONT_NORM,

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/
#define Log_PLATFORM_VERSION "SWAD 21.56.4 (2021-11-10)"
#define Log_PLATFORM_VERSION "SWAD 21.56.5 (2021-11-10)"
#define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js"
/*
TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 21.56.5: Nov 10, 2021 Code refactoring in switch statements. (319181 lines)
Version 21.56.4: Nov 10, 2021 Code refactoring in switch statements (until swad_network_database.c). (319362 lines)
Version 21.56.3: Nov 10, 2021 Code refactoring in switch statements (until swad_logo.c). (319403 lines)
Version 21.56.2: Nov 10, 2021 Code refactoring in pointers to text. (319501 lines)

View File

@ -161,12 +161,28 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
extern const char *Txt_New_nickname;
extern const char *Txt_Change_nickname;
extern const char *Txt_Save_changes;
static const struct
{
Act_Action_t Remove;
Act_Action_t Change;
} NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = {ActRemOldNicOth,ActChgNicOth},
[Rol_GST ] = {ActRemOldNicOth,ActChgNicOth},
[Rol_USR ] = {ActRemOldNicOth,ActChgNicOth},
[Rol_STD ] = {ActRemOldNicStd,ActChgNicStd},
[Rol_NET ] = {ActRemOldNicTch,ActChgNicTch},
[Rol_TCH ] = {ActRemOldNicTch,ActChgNicTch},
[Rol_DEG_ADM] = {ActRemOldNicOth,ActChgNicOth},
[Rol_CTR_ADM] = {ActRemOldNicOth,ActChgNicOth},
[Rol_INS_ADM] = {ActRemOldNicOth,ActChgNicOth},
[Rol_SYS_ADM] = {ActRemOldNicOth,ActChgNicOth},
};
MYSQL_RES *mysql_res;
MYSQL_ROW row;
char StrRecordWidth[Cns_MAX_DECIMAL_DIGITS_UINT + 2 + 1];
unsigned NumNicks;
unsigned NumNick;
Act_Action_t NextAction;
char NickWithArr[Nck_MAX_BYTES_NICK_WITH_ARROBA + 1];
const struct UsrData *UsrDat = (ItsMe ? &Gbl.Usrs.Me.UsrDat :
&Gbl.Usrs.Other.UsrDat);
@ -206,11 +222,11 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
/* The first nickname is the current one */
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("REC_C1_BOT RT",NULL,Txt_Current_nickname);
/* Label */
Frm_LabelColumn ("REC_C1_BOT RT",NULL,Txt_Current_nickname);
/* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LT USR_ID\"");
/* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LT USR_ID\"");
}
else // NumNick >= 2
{
@ -218,11 +234,11 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
{
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("REC_C1_BOT RT",NULL,Txt_Other_nicknames);
/* Label */
Frm_LabelColumn ("REC_C1_BOT RT",NULL,Txt_Other_nicknames);
/* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT\"");
/* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT\"");
}
/* Form to remove old nickname */
@ -230,23 +246,8 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
Ico_PutContextualIconToRemove (ActRemMyNck,Nck_NICKNAME_SECTION_ID,
Nck_PutParamsRemoveMyNick,row[0]);
else
{
switch (UsrDat->Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActRemOldNicStd;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActRemOldNicTch;
break;
default: // Guest, user or admin
NextAction = ActRemOldNicOth;
break;
}
Ico_PutContextualIconToRemove (NextAction,Nck_NICKNAME_SECTION_ID,
Ico_PutContextualIconToRemove (NextAction[UsrDat->Roles.InCurrentCrs].Remove,Nck_NICKNAME_SECTION_ID,
Nck_PutParamsRemoveOtherNick,row[0]);
}
}
/* Nickname */
@ -265,33 +266,20 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
Frm_BeginFormAnchor (ActChgMyNck,Nck_NICKNAME_SECTION_ID);
else
{
switch (UsrDat->Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActChgNicStd;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActChgNicTch;
break;
default: // Guest, user or admin
NextAction = ActChgNicOth;
break;
}
Frm_BeginFormAnchor (NextAction,Nck_NICKNAME_SECTION_ID);
Frm_BeginFormAnchor (NextAction[UsrDat->Roles.InCurrentCrs].Change,Nck_NICKNAME_SECTION_ID);
Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod);
}
snprintf (NickWithArr,sizeof (NickWithArr),"@%s",row[0]);
Par_PutHiddenParamString (NULL,"NewNick",NickWithArr); // Nickname
Btn_PutConfirmButtonInline (Txt_Use_this_nickname);
Btn_PutConfirmButtonInline (Txt_Use_this_nickname);
Frm_EndForm ();
}
if (NumNick == 1 ||
NumNick == NumNicks)
{
HTM_TD_End ();
HTM_TD_End ();
HTM_TR_End ();
}
else
@ -304,7 +292,7 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
/* Label */
Frm_LabelColumn ("REC_C1_BOT RT","NewNick",
NumNicks ? Txt_New_nickname : // A new nickname
Txt_Nickname); // The first nickname
Txt_Nickname); // The first nickname
/* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT\"");
@ -312,20 +300,7 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
Frm_BeginFormAnchor (ActChgMyNck,Nck_NICKNAME_SECTION_ID);
else
{
switch (UsrDat->Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActChgNicStd;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActChgNicTch;
break;
default: // Guest, user or admin
NextAction = ActChgNicOth;
break;
}
Frm_BeginFormAnchor (NextAction,Nck_NICKNAME_SECTION_ID);
Frm_BeginFormAnchor (NextAction[UsrDat->Roles.InCurrentCrs].Change,Nck_NICKNAME_SECTION_ID);
Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod);
}
snprintf (NickWithArr,sizeof (NickWithArr),"@%s",

View File

@ -909,51 +909,27 @@ void Ntf_GetNotifSummaryAndContent (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
void Ntf_MarkNotifOneFileAsRemoved (const char *Path)
{
extern const Brw_FileBrowser_t Brw_DB_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
static const Ntf_NotifyEvent_t NotifyEvent[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_DOC_CRS] = Ntf_EVENT_DOCUMENT_FILE,
[Brw_ADMI_DOC_GRP] = Ntf_EVENT_DOCUMENT_FILE,
[Brw_ADMI_TCH_CRS] = Ntf_EVENT_TEACHERS_FILE,
[Brw_ADMI_TCH_GRP] = Ntf_EVENT_TEACHERS_FILE,
[Brw_ADMI_SHR_CRS] = Ntf_EVENT_SHARED_FILE,
[Brw_ADMI_SHR_GRP] = Ntf_EVENT_SHARED_FILE,
[Brw_ADMI_MRK_CRS] = Ntf_EVENT_MARKS_FILE,
[Brw_ADMI_MRK_GRP] = Ntf_EVENT_MARKS_FILE,
};
Brw_FileBrowser_t FileBrowser = Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type];
long FilCod;
Ntf_NotifyEvent_t NotifyEvent;
switch (FileBrowser)
if (NotifyEvent[FileBrowser])
{
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP:
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_SHR_GRP:
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
/***** Get file code *****/
FilCod = Brw_DB_GetFilCodByPath (Path,false); // Any file, public or not
if (FilCod > 0)
{
/***** Set notification as removed *****/
switch (FileBrowser)
{
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
NotifyEvent = Ntf_EVENT_DOCUMENT_FILE;
break;
case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP:
NotifyEvent = Ntf_EVENT_TEACHERS_FILE;
break;
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_SHR_GRP:
NotifyEvent = Ntf_EVENT_SHARED_FILE;
break;
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
NotifyEvent = Ntf_EVENT_MARKS_FILE;
break;
default:
return;
}
Ntf_DB_MarkNotifAsRemoved (NotifyEvent,FilCod);
}
break;
default:
break;
/***** Get file code *****/
FilCod = Brw_DB_GetFilCodByPath (Path,false); // Any file, public or not
if (FilCod > 0)
/***** Set notification as removed *****/
Ntf_DB_MarkNotifAsRemoved (NotifyEvent[FileBrowser],FilCod);
}
}
@ -964,48 +940,24 @@ void Ntf_MarkNotifOneFileAsRemoved (const char *Path)
void Ntf_MarkNotifChildrenOfFolderAsRemoved (const char *Path)
{
extern const Brw_FileBrowser_t Brw_DB_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
Brw_FileBrowser_t FileBrowser = Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type];
Ntf_NotifyEvent_t NotifyEvent;
switch (FileBrowser)
static const Ntf_NotifyEvent_t NotifyEvent[Brw_NUM_TYPES_FILE_BROWSER] =
{
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP:
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_SHR_GRP:
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
/***** Set notification as removed *****/
switch (FileBrowser)
{
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
NotifyEvent = Ntf_EVENT_DOCUMENT_FILE;
break;
case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP:
NotifyEvent = Ntf_EVENT_TEACHERS_FILE;
break;
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_SHR_GRP:
NotifyEvent = Ntf_EVENT_SHARED_FILE;
break;
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
NotifyEvent = Ntf_EVENT_MARKS_FILE;
break;
default:
return;
}
Ntf_DB_MarkNotifChildrenOfFolderAsRemoved (NotifyEvent,FileBrowser,
Brw_GetCodForFileBrowser (),
Path);
break;
default:
break;
}
[Brw_ADMI_DOC_CRS] = Ntf_EVENT_DOCUMENT_FILE,
[Brw_ADMI_DOC_GRP] = Ntf_EVENT_DOCUMENT_FILE,
[Brw_ADMI_TCH_CRS] = Ntf_EVENT_TEACHERS_FILE,
[Brw_ADMI_TCH_GRP] = Ntf_EVENT_TEACHERS_FILE,
[Brw_ADMI_SHR_CRS] = Ntf_EVENT_SHARED_FILE,
[Brw_ADMI_SHR_GRP] = Ntf_EVENT_SHARED_FILE,
[Brw_ADMI_MRK_CRS] = Ntf_EVENT_MARKS_FILE,
[Brw_ADMI_MRK_GRP] = Ntf_EVENT_MARKS_FILE,
};
Brw_FileBrowser_t FileBrowser = Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type];
if (NotifyEvent[FileBrowser])
/***** Set notification as removed *****/
Ntf_DB_MarkNotifChildrenOfFolderAsRemoved (NotifyEvent[FileBrowser],FileBrowser,
Brw_GetCodForFileBrowser (),
Path);
}
/*****************************************************************************/
@ -1016,6 +968,29 @@ void Ntf_MarkNotifChildrenOfFolderAsRemoved (const char *Path)
unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
{
static unsigned (*GetUsrsBrowser[Brw_NUM_TYPES_FILE_BROWSER]) (MYSQL_RES **mysql_res) =
{
// Notify all users in course except me
[Brw_ADMI_DOC_CRS] = Enr_DB_GetUsrsFromCurrentCrsExceptMe,
[Brw_ADMI_SHR_CRS] = Enr_DB_GetUsrsFromCurrentCrsExceptMe,
[Brw_ADMI_MRK_CRS] = Enr_DB_GetUsrsFromCurrentCrsExceptMe,
// Notify all teachers in course except me
[Brw_ADMI_TCH_CRS] = Enr_DB_GetTchsFromCurrentCrsExceptMe,
// Notify all users in group except me
[Brw_ADMI_DOC_GRP] = Grp_DB_GetUsrsFromCurrentGrpExceptMe,
[Brw_ADMI_SHR_GRP] = Grp_DB_GetUsrsFromCurrentGrpExceptMe,
[Brw_ADMI_MRK_GRP] = Grp_DB_GetUsrsFromCurrentGrpExceptMe,
// Notify all teachers in group except me
[Brw_ADMI_TCH_GRP] = Grp_DB_GetTchsFromCurrentGrpExceptMe,
};
static unsigned (*GetUsrsForum[For_NUM_TYPES_FORUM]) (MYSQL_RES **mysql_res) =
{
[For_FORUM_COURSE_USRS] = Enr_DB_GetUsrsFromCurrentCrsExceptMe,
[For_FORUM_COURSE_TCHS] = Enr_DB_GetTchsFromCurrentCrsExceptMe,
};
MYSQL_RES *mysql_res;
unsigned NumUsrs = 0; // Initialized to avoid warning
unsigned NumUsr;
@ -1037,27 +1012,10 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
case Ntf_EVENT_TEACHERS_FILE:
case Ntf_EVENT_SHARED_FILE:
case Ntf_EVENT_MARKS_FILE:
switch (Gbl.FileBrowser.Type)
{
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_MRK_CRS: // Notify all users in course except me
NumUsrs = Enr_DB_GetUsrsFromCurrentCrsExceptMe (&mysql_res);
break;
case Brw_ADMI_TCH_CRS: // Notify all teachers in course except me
NumUsrs = Enr_DB_GetTchsFromCurrentCrsExceptMe (&mysql_res);
break;
case Brw_ADMI_DOC_GRP:
case Brw_ADMI_SHR_GRP:
case Brw_ADMI_MRK_GRP: // Notify all users in group except me
NumUsrs = Grp_DB_GetUsrsFromCurrentGrpExceptMe (&mysql_res);
break;
case Brw_ADMI_TCH_GRP: // Notify all teachers in group except me
NumUsrs = Grp_DB_GetTchsFromCurrentGrpExceptMe (&mysql_res);
break;
default: // This function should not be called in other cases
return 0;
}
if (GetUsrsBrowser[Gbl.FileBrowser.Type])
NumUsrs = GetUsrsBrowser[Gbl.FileBrowser.Type] (&mysql_res);
else
return 0;
break;
case Ntf_EVENT_ASSIGNMENT:
NumUsrs = Asg_DB_GetUsrsFromAssignmentExceptMe (&mysql_res,Cod);
@ -1096,17 +1054,10 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
// Check if forum is for users or for all users in the course
For_GetForumTypeAndLocationOfAPost (Cod,&ForumSelected);
switch (ForumSelected.Type)
{
case For_FORUM_COURSE_USRS:
NumUsrs = Enr_DB_GetUsrsFromCurrentCrsExceptMe (&mysql_res);
break;
case For_FORUM_COURSE_TCHS:
NumUsrs = Enr_DB_GetTchsFromCurrentCrsExceptMe (&mysql_res);
break;
default:
return 0;
}
if (GetUsrsForum[ForumSelected.Type])
NumUsrs = GetUsrsForum[ForumSelected.Type] (&mysql_res);
else
return 0;
break;
case Ntf_EVENT_FORUM_REPLY:
// Cod is the code of the post

View File

@ -214,20 +214,18 @@ List --> |Name.Start | -> |Name.Start |
void Par_CreateListOfParams (void)
{
static void (*CreateListOfParams[Act_NUM_CONTENTS]) (void) =
{
[Act_CONT_NORM] = Par_CreateListOfParamsFromQueryString,
[Act_CONT_DATA] = Par_CreateListOfParamsFromTmpFile,
};
/***** Initialize empty list of parameters *****/
Gbl.Params.List = NULL;
/***** Get list *****/
if (Gbl.Params.ContentLength)
switch (Gbl.ContentReceivedByCGI)
{
case Act_CONT_NORM:
Par_CreateListOfParamsFromQueryString ();
break;
case Act_CONT_DATA:
Par_CreateListOfParamsFromTmpFile ();
break;
}
CreateListOfParams[Gbl.ContentReceivedByCGI] ();
}
/*****************************************************************************/

View File

@ -730,7 +730,19 @@ void Pwd_ShowFormChgOtherUsrPwd (void)
{
extern const char *Txt_Password;
extern const char *Txt_Change_password;
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActChgPwdOth,
[Rol_GST ] = ActChgPwdOth,
[Rol_USR ] = ActChgPwdOth,
[Rol_STD ] = ActChgPwdStd,
[Rol_NET ] = ActChgPwdTch,
[Rol_TCH ] = ActChgPwdTch,
[Rol_DEG_ADM] = ActChgPwdOth,
[Rol_CTR_ADM] = ActChgPwdOth,
[Rol_INS_ADM] = ActChgPwdOth,
[Rol_SYS_ADM] = ActChgPwdOth,
};
/***** Begin section *****/
HTM_SECTION_Begin (Pwd_PASSWORD_SECTION_ID);
@ -745,20 +757,7 @@ void Pwd_ShowFormChgOtherUsrPwd (void)
/***** Form to change password *****/
/* Begin form */
switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActChgPwdStd;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActChgPwdTch;
break;
default: // Guest, user or admin
NextAction = ActChgPwdOth;
break;
}
Frm_BeginFormAnchor (NextAction,Pwd_PASSWORD_SECTION_ID);
Frm_BeginFormAnchor (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs],Pwd_PASSWORD_SECTION_ID);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EnUsrCod);
/* New password */

View File

@ -177,7 +177,19 @@ void Pho_PutIconToChangeUsrPhoto (void)
bool PhotoExists;
char PhotoURL[PATH_MAX + 1];
const char *TitleText;
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActReqOthPho,
[Rol_GST ] = ActReqOthPho,
[Rol_USR ] = ActReqOthPho,
[Rol_STD ] = ActReqStdPho,
[Rol_NET ] = ActReqTchPho,
[Rol_TCH ] = ActReqTchPho,
[Rol_DEG_ADM] = ActReqOthPho,
[Rol_CTR_ADM] = ActReqOthPho,
[Rol_INS_ADM] = ActReqOthPho,
[Rol_SYS_ADM] = ActReqOthPho,
};
bool ItsMe = Usr_ItsMe (Gbl.Record.UsrDat->UsrCod);
/***** Link for changing / uploading the photo *****/
@ -196,20 +208,7 @@ void Pho_PutIconToChangeUsrPhoto (void)
PhotoExists = Pho_BuildLinkToPhoto (Gbl.Record.UsrDat,PhotoURL);
TitleText = PhotoExists ? Txt_Change_photo :
Txt_Upload_photo;
switch (Gbl.Record.UsrDat->Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActReqStdPho;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActReqTchPho;
break;
default: // Guest, user or admin
NextAction = ActReqOthPho;
break;
}
Lay_PutContextualLinkOnlyIcon (NextAction,NULL,
Lay_PutContextualLinkOnlyIcon (NextAction[Gbl.Record.UsrDat->Roles.InCurrentCrs],NULL,
Rec_PutParamUsrCodEncrypted,NULL,
"camera.svg",
TitleText);
@ -241,30 +240,27 @@ static void Pho_PutIconToRequestRemoveOtherUsrPhoto (__attribute__((unused)) voi
extern const char *Txt_Remove_photo;
char PhotoURL[PATH_MAX + 1];
bool PhotoExists;
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActReqRemOthPho,
[Rol_GST ] = ActReqRemOthPho,
[Rol_USR ] = ActReqRemOthPho,
[Rol_STD ] = ActReqRemStdPho,
[Rol_NET ] = ActReqRemTchPho,
[Rol_TCH ] = ActReqRemTchPho,
[Rol_DEG_ADM] = ActReqRemOthPho,
[Rol_CTR_ADM] = ActReqRemOthPho,
[Rol_INS_ADM] = ActReqRemOthPho,
[Rol_SYS_ADM] = ActReqRemOthPho,
};
/***** Link to request the removal of another user's photo *****/
PhotoExists = Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL);
if (PhotoExists)
{
switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActReqRemStdPho;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActReqRemTchPho;
break;
default: // Guest, user or admin
NextAction = ActReqRemOthPho;
break;
}
Lay_PutContextualLinkOnlyIcon (NextAction,NULL,
Lay_PutContextualLinkOnlyIcon (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs],NULL,
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
"trash.svg",
Txt_Remove_photo);
}
}
/*****************************************************************************/
@ -306,7 +302,19 @@ static void Pho_ReqPhoto (const struct UsrData *UsrDat)
extern const char *Txt_File_with_the_photo;
extern const char *Txt_Upload_photo;
bool ItsMe = Usr_ItsMe (UsrDat->UsrCod);
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActDetOthPho,
[Rol_GST ] = ActDetOthPho,
[Rol_USR ] = ActDetOthPho,
[Rol_STD ] = ActDetStdPho,
[Rol_NET ] = ActDetTchPho,
[Rol_TCH ] = ActDetTchPho,
[Rol_DEG_ADM] = ActDetOthPho,
[Rol_CTR_ADM] = ActDetOthPho,
[Rol_INS_ADM] = ActDetOthPho,
[Rol_SYS_ADM] = ActDetOthPho,
};
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Photo,
@ -319,20 +327,7 @@ static void Pho_ReqPhoto (const struct UsrData *UsrDat)
Frm_BeginForm (ActDetMyPho);
else
{
switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActDetStdPho;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActDetTchPho;
break;
default: // Guest, user or admin
NextAction = ActDetOthPho;
break;
}
Frm_BeginForm (NextAction);
Frm_BeginForm (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs]);
Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod);
}
@ -486,7 +481,19 @@ void Pho_ReqRemoveUsrPhoto (void)
extern const char *Txt_Remove_photo;
extern const char *Txt_The_photo_no_longer_exists;
char PhotoURL[PATH_MAX + 1];
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActRemOthPho,
[Rol_GST ] = ActRemOthPho,
[Rol_USR ] = ActRemOthPho,
[Rol_STD ] = ActRemStdPho,
[Rol_NET ] = ActRemTchPho,
[Rol_TCH ] = ActRemTchPho,
[Rol_DEG_ADM] = ActRemOthPho,
[Rol_CTR_ADM] = ActRemOthPho,
[Rol_INS_ADM] = ActRemOthPho,
[Rol_SYS_ADM] = ActRemOthPho,
};
/***** Get user's code from form *****/
Usr_GetParamOtherUsrCodEncryptedAndGetListIDs ();
@ -511,20 +518,7 @@ void Pho_ReqRemoveUsrPhoto (void)
"PHOTO186x248",Pho_NO_ZOOM,false);
/* End alert */
switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActRemStdPho;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActRemTchPho;
break;
default: // Guest, user or admin
NextAction = ActRemOthPho;
break;
}
Ale_ShowAlertAndButton2 (NextAction,NULL,NULL,
Ale_ShowAlertAndButton2 (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs],NULL,NULL,
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
Btn_REMOVE_BUTTON,Txt_Remove_photo);
}
@ -605,7 +599,19 @@ static bool Pho_ReceivePhotoAndDetectFaces (bool ItsMe,const struct UsrData *Usr
unsigned Radius;
unsigned BackgroundCode;
char StrFileName[NAME_MAX + 1];
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActUpdOthPho,
[Rol_GST ] = ActUpdOthPho,
[Rol_USR ] = ActUpdOthPho,
[Rol_STD ] = ActUpdStdPho,
[Rol_NET ] = ActUpdTchPho,
[Rol_TCH ] = ActUpdTchPho,
[Rol_DEG_ADM] = ActUpdOthPho,
[Rol_CTR_ADM] = ActUpdOthPho,
[Rol_INS_ADM] = ActUpdOthPho,
[Rol_SYS_ADM] = ActUpdOthPho,
};
char ErrorTxt[256];
/***** Creates directories if not exist *****/
@ -688,20 +694,7 @@ static bool Pho_ReceivePhotoAndDetectFaces (bool ItsMe,const struct UsrData *Usr
Frm_BeginForm (ActUpdMyPho);
else
{
switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActUpdStdPho;
break;
case Rol_NET:
case Rol_TCH:
NextAction = ActUpdTchPho;
break;
default: // Guest, user or admin
NextAction = ActUpdOthPho;
break;
}
Frm_BeginForm (NextAction);
Frm_BeginForm (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs]);
Usr_PutParamUsrCodEncrypted (UsrDat->EnUsrCod);
}
Par_PutHiddenParamString (NULL,"FileName",StrFileName);
@ -1582,6 +1575,12 @@ static void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
{
extern const char *Hlp_ANALYTICS_Degrees;
extern const char *Txt_Degrees;
static void (*ShowOrPrintDegrees[Set_NUM_USR_LIST_TYPES]) (struct Pho_DegPhotos *DegPhotos,
Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) =
{
[Set_USR_LIST_AS_CLASS_PHOTO] = Pho_ShowOrPrintClassPhotoDegrees,
[Set_USR_LIST_AS_LISTING ] = Pho_ShowOrPrintListDegrees,
};
struct Pho_DegPhotos DegPhotos;
/***** Get parameters from form *****/
@ -1633,17 +1632,8 @@ static void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint)
Pho_GetMaxStdsPerDegree (&DegPhotos);
/***** Draw the classphoto/list *****/
switch (Gbl.Usrs.Me.ListType)
{
case Set_USR_LIST_AS_CLASS_PHOTO:
Pho_ShowOrPrintClassPhotoDegrees (&DegPhotos,SeeOrPrint);
break;
case Set_USR_LIST_AS_LISTING:
Pho_ShowOrPrintListDegrees (&DegPhotos,SeeOrPrint);
break;
default:
break;
}
if (ShowOrPrintDegrees[Gbl.Usrs.Me.ListType])
ShowOrPrintDegrees[Gbl.Usrs.Me.ListType] (&DegPhotos,SeeOrPrint);
/***** End box *****/
Box_BoxEnd ();

View File

@ -3655,14 +3655,13 @@ static void Prj_UpdateProject (struct Prj_Project *Prj)
static bool Prj_CheckIfICanConfigAllProjects (void)
{
switch (Gbl.Usrs.Me.Role.Logged)
static const bool ICanConfigAllProjects[Rol_NUM_ROLES] =
{
case Rol_TCH:
case Rol_SYS_ADM:
return true;
default:
return false;
}
[Rol_TCH ] = true,
[Rol_SYS_ADM] = true,
};
return ICanConfigAllProjects[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/

View File

@ -2322,7 +2322,19 @@ static void Rec_PutIconsCommands (__attribute__((unused)) void *Args)
bool ItsMe = Usr_ItsMe (Gbl.Record.UsrDat->UsrCod);
bool ICanViewUsrProfile;
bool RecipientHasBannedMe;
Act_Action_t NextAction;
static const Act_Action_t NextAction[Rol_NUM_ROLES] =
{
[Rol_UNK ] = ActReqMdfOth,
[Rol_GST ] = ActReqMdfOth,
[Rol_USR ] = ActReqMdfOth,
[Rol_STD ] = ActReqMdfStd,
[Rol_NET ] = ActReqMdfNET,
[Rol_TCH ] = ActReqMdfTch,
[Rol_DEG_ADM] = ActReqMdfOth,
[Rol_CTR_ADM] = ActReqMdfOth,
[Rol_INS_ADM] = ActReqMdfOth,
[Rol_SYS_ADM] = ActReqMdfOth,
};
if (!Gbl.Form.Inside && // Only if not inside another form
Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB && // Only in main browser tab
@ -2380,27 +2392,10 @@ static void Rec_PutIconsCommands (__attribute__((unused)) void *Args)
Gbl.Usrs.Me.Role.Logged == Rol_CTR_ADM ||
Gbl.Usrs.Me.Role.Logged == Rol_INS_ADM ||
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)
{
switch (Gbl.Record.UsrDat->Roles.InCurrentCrs)
{
case Rol_STD:
NextAction = ActReqMdfStd;
break;
case Rol_NET:
NextAction = ActReqMdfNET;
break;
case Rol_TCH:
NextAction = ActReqMdfTch;
break;
default: // Guest, user or admin
NextAction = ActReqMdfOth;
break;
}
Lay_PutContextualLinkOnlyIcon (NextAction,NULL,
Lay_PutContextualLinkOnlyIcon (NextAction[Gbl.Record.UsrDat->Roles.InCurrentCrs],NULL,
Rec_PutParamUsrCodEncrypted,NULL,
"user-cog.svg",
Txt_Administer_user);
}
if (Gbl.Hierarchy.Level == HieLvl_CRS) // Course selected
{

View File

@ -307,18 +307,16 @@ static void Svy_ListAllSurveys (struct Svy_Surveys *Surveys)
static bool Svy_CheckIfICanCreateSvy (void)
{
switch (Gbl.Usrs.Me.Role.Logged)
static const bool ICanCreateSvy[Rol_NUM_ROLES] =
{
case Rol_TCH:
case Rol_DEG_ADM:
case Rol_CTR_ADM:
case Rol_INS_ADM:
case Rol_SYS_ADM:
return true;
default:
return false;
}
return false;
[Rol_TCH ] = true,
[Rol_DEG_ADM] = true,
[Rol_CTR_ADM] = true,
[Rol_INS_ADM] = true,
[Rol_SYS_ADM] = true,
};
return ICanCreateSvy[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/

View File

@ -997,6 +997,11 @@ static void Syl_ChangePlaceItemSyllabus (Syl_ChangePosItem_t UpOrDownPos)
FILE *NewFile;
unsigned NumItem;
struct MoveSubtrees Subtree;
static void (*CalculateSubtreeSyllabus[Syl_NUM_CHANGE_POS_ITEM]) (struct MoveSubtrees *Subtree,unsigned NumItem) =
{
[Syl_GET_UP ] = Syl_CalculateUpSubtreeSyllabus,
[Syl_GET_DOWN] = Syl_CalculateDownSubtreeSyllabus,
};
/***** Reset syllabus context *****/
Syl_ResetSyllabus (&Syllabus);
@ -1023,15 +1028,7 @@ static void Syl_ChangePlaceItemSyllabus (Syl_ChangePosItem_t UpOrDownPos)
Fil_CreateUpdateFile (PathFile,".old",PathOldFile,PathNewFile,&NewFile);
/***** Get up or get down position *****/
switch (UpOrDownPos)
{
case Syl_GET_UP:
Syl_CalculateUpSubtreeSyllabus (&Subtree,Syllabus.NumItem);
break;
case Syl_GET_DOWN:
Syl_CalculateDownSubtreeSyllabus (&Subtree,Syllabus.NumItem);
break;
}
CalculateSubtreeSyllabus[UpOrDownPos] (&Subtree,Syllabus.NumItem);
/***** Create the new XML file *****/
Syl_WriteStartFileSyllabus (NewFile);

View File

@ -35,6 +35,7 @@ typedef enum
} Syl_WhichSyllabus_t; // Which syllabus I want to see
#define Syl_DEFAULT_WHICH_SYLLABUS Syl_LECTURES
#define Syl_NUM_CHANGE_POS_ITEM 2
typedef enum
{
Syl_GET_UP,

View File

@ -53,6 +53,22 @@
extern struct Globals Gbl;
/*****************************************************************************/
/**************************** Private constants ******************************/
/*****************************************************************************/
static const Tml_Not_Type_t Tml_Not_NoteType[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_DOC_INS] = TL_NOTE_INS_DOC_PUB_FILE,
[Brw_ADMI_SHR_INS] = TL_NOTE_INS_SHA_PUB_FILE,
[Brw_ADMI_DOC_CTR] = TL_NOTE_CTR_DOC_PUB_FILE,
[Brw_ADMI_SHR_CTR] = TL_NOTE_CTR_SHA_PUB_FILE,
[Brw_ADMI_DOC_DEG] = TL_NOTE_DEG_DOC_PUB_FILE,
[Brw_ADMI_SHR_DEG] = TL_NOTE_DEG_SHA_PUB_FILE,
[Brw_ADMI_DOC_CRS] = TL_NOTE_CRS_DOC_PUB_FILE,
[Brw_ADMI_SHR_CRS] = TL_NOTE_CRS_SHA_PUB_FILE,
};
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
@ -931,57 +947,14 @@ void Tml_Not_MarkNoteOneFileAsUnavailable (const char *Path)
extern const Brw_FileBrowser_t Brw_DB_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
Brw_FileBrowser_t FileBrowser = Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type];
long FilCod;
Tml_Not_Type_t NoteType;
switch (FileBrowser)
if (Tml_Not_NoteType[FileBrowser])
{
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:
/***** Get file code *****/
FilCod = Brw_DB_GetFilCodByPath (Path,true); // Only if file is public
if (FilCod > 0)
{
/***** Mark possible note as unavailable *****/
switch (FileBrowser)
{
case Brw_ADMI_DOC_INS:
NoteType = TL_NOTE_INS_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_INS:
NoteType = TL_NOTE_INS_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_CTR:
NoteType = TL_NOTE_CTR_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_CTR:
NoteType = TL_NOTE_CTR_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_DEG:
NoteType = TL_NOTE_DEG_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_DEG:
NoteType = TL_NOTE_DEG_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_CRS:
NoteType = TL_NOTE_CRS_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_CRS:
NoteType = TL_NOTE_CRS_SHA_PUB_FILE;
break;
default:
return;
}
Tml_DB_MarkNoteAsUnavailable (NoteType,FilCod);
}
break;
default:
break;
/***** Get file code *****/
FilCod = Brw_DB_GetFilCodByPath (Path,true); // Only if file is public
if (FilCod > 0)
/***** Mark possible note as unavailable *****/
Tml_DB_MarkNoteAsUnavailable (Tml_Not_NoteType[FileBrowser],FilCod);
}
}
@ -993,55 +966,11 @@ void Tml_Not_MarkNotesChildrenOfFolderAsUnavailable (const char *Path)
{
extern const Brw_FileBrowser_t Brw_DB_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
Brw_FileBrowser_t FileBrowser = Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type];
Tml_Not_Type_t NoteType;
switch (FileBrowser)
{
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:
/***** Mark possible note as unavailable *****/
switch (FileBrowser)
{
case Brw_ADMI_DOC_INS:
NoteType = TL_NOTE_INS_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_INS:
NoteType = TL_NOTE_INS_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_CTR:
NoteType = TL_NOTE_CTR_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_CTR:
NoteType = TL_NOTE_CTR_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_DEG:
NoteType = TL_NOTE_DEG_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_DEG:
NoteType = TL_NOTE_DEG_SHA_PUB_FILE;
break;
case Brw_ADMI_DOC_CRS:
NoteType = TL_NOTE_CRS_DOC_PUB_FILE;
break;
case Brw_ADMI_SHR_CRS:
NoteType = TL_NOTE_CRS_SHA_PUB_FILE;
break;
default:
return;
}
Tml_DB_MarkNotesChildrenOfFolderAsUnavailable (NoteType,FileBrowser,
Brw_GetCodForFileBrowser (),
Path);
break;
default:
break;
}
if (Tml_Not_NoteType[FileBrowser])
Tml_DB_MarkNotesChildrenOfFolderAsUnavailable (Tml_Not_NoteType[FileBrowser],FileBrowser,
Brw_GetCodForFileBrowser (),
Path);
}
/*****************************************************************************/

View File

@ -6098,25 +6098,16 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
unsigned NumUsr;
bool TRIsOpen = false;
bool UsrIsTheMsgSender;
const char *ClassPhoto = "PHOTO21x28"; // Default photo size
struct UsrData UsrDat;
static const char *ClassPhoto[Usr_NUM_CLASS_PHOTO_TYPE] =
{
[Usr_CLASS_PHOTO_SEL ] = "PHOTO21x28",
[Usr_CLASS_PHOTO_SEL_SEE] = "PHOTO45x60",
[Usr_CLASS_PHOTO_PRN ] = "PHOTO45x60",
};
if (Gbl.Usrs.LstUsrs[Role].NumUsrs)
{
/***** Set width and height of photos *****/
switch (ClassPhotoType)
{
case Usr_CLASS_PHOTO_SEL:
ClassPhoto = "PHOTO21x28";
break;
case Usr_CLASS_PHOTO_SEL_SEE:
ClassPhoto = "PHOTO45x60";
break;
case Usr_CLASS_PHOTO_PRN:
ClassPhoto = "PHOTO45x60";
break;
}
/***** Put a row to select all users *****/
if (PutCheckBoxToSelectUsr)
Usr_PutCheckboxToSelectAllUsers (Role,SelectedUsrs);
@ -6159,26 +6150,26 @@ static void Usr_DrawClassPhoto (Usr_ClassPhotoType_t ClassPhotoType,
SelectedUsrs);
/***** Show photo *****/
Pho_ShowUsrPhotoIfAllowed (&UsrDat,ClassPhoto,Pho_ZOOM,false);
Pho_ShowUsrPhotoIfAllowed (&UsrDat,ClassPhoto[ClassPhotoType],Pho_ZOOM,false);
/***** Photo foot *****/
HTM_DIV_Begin ("class=\"CLASSPHOTO_CAPTION\"");
/* Name */
if (UsrDat.FrstName[0])
HTM_Txt (UsrDat.FrstName);
else
HTM_NBSP ();
HTM_BR ();
if (UsrDat.Surname1[0])
HTM_Txt (UsrDat.Surname1);
else
HTM_NBSP ();
HTM_BR ();
if (UsrDat.Surname2[0])
HTM_Txt (UsrDat.Surname2);
else
HTM_NBSP ();
/* Name */
if (UsrDat.FrstName[0])
HTM_Txt (UsrDat.FrstName);
else
HTM_NBSP ();
HTM_BR ();
if (UsrDat.Surname1[0])
HTM_Txt (UsrDat.Surname1);
else
HTM_NBSP ();
HTM_BR ();
if (UsrDat.Surname2[0])
HTM_Txt (UsrDat.Surname2);
else
HTM_NBSP ();
HTM_DIV_End ();

View File

@ -113,6 +113,7 @@ typedef enum
// Don't change these numbers! They are used for user's sex in database
// Related with class photograph
#define Usr_NUM_CLASS_PHOTO_TYPE 3
typedef enum
{
Usr_CLASS_PHOTO_SEL, // Only for selection of users