Compare commits

...

4 Commits

180 changed files with 2073 additions and 2025 deletions

View File

@ -264,7 +264,7 @@ static void API_CopyListUsers (struct soap *soap,
struct swad__getUsersOutput *getUsersOut); struct swad__getUsersOutput *getUsersOut);
static void API_CopyUsrData (struct soap *soap, static void API_CopyUsrData (struct soap *soap,
struct swad__user *Usr,struct Usr_Data *UsrDat, struct swad__user *Usr,struct Usr_Data *UsrDat,
bool UsrIDIsVisible); Usr_ICan_t ICanSeeUsrID);
static void API_GetListGrpsInAttendanceEventFromDB (struct soap *soap, static void API_GetListGrpsInAttendanceEventFromDB (struct soap *soap,
long AttCod,char **ListGroups); long AttCod,char **ListGroups);
@ -1195,7 +1195,7 @@ int swad__getCourseInfo (struct soap *soap,
int Result = SOAP_OK; int Result = SOAP_OK;
const char *NamesInWSForInfoType[Inf_NUM_TYPES] = const char *NamesInWSForInfoType[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = "introduction", [Inf_INFORMATION ] = "introduction",
[Inf_TEACHING_GUIDE] = "guide", [Inf_TEACHING_GUIDE] = "guide",
[Inf_LECTURES ] = "lectures", [Inf_LECTURES ] = "lectures",
[Inf_PRACTICALS ] = "practicals", [Inf_PRACTICALS ] = "practicals",
@ -1743,7 +1743,7 @@ static void API_CopyListUsers (struct soap *soap,
unsigned NumUsrs; unsigned NumUsrs;
unsigned NumUsr; unsigned NumUsr;
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
bool ICanSeeUsrID; Usr_ICan_t ICanSeeUsrID;
/***** Initialize result *****/ /***** Initialize result *****/
getUsersOut->numUsers = 0; getUsersOut->numUsers = 0;
@ -2191,7 +2191,7 @@ int swad__sendMyGroups (struct soap *soap,
static void API_CopyUsrData (struct soap *soap, static void API_CopyUsrData (struct soap *soap,
struct swad__user *Usr,struct Usr_Data *UsrDat, struct swad__user *Usr,struct Usr_Data *UsrDat,
bool UsrIDIsVisible) Usr_ICan_t ICanSeeUsrID)
{ {
char PhotoURL[Cns_MAX_BYTES_WWW + 1]; char PhotoURL[Cns_MAX_BYTES_WWW + 1];
const char *FirstID; const char *FirstID;
@ -2206,7 +2206,7 @@ static void API_CopyUsrData (struct soap *soap,
Str_Copy (Usr->userNickname,UsrDat->Nickname,Length); Str_Copy (Usr->userNickname,UsrDat->Nickname,Length);
/* Copy user's first ID */ /* Copy user's first ID */
if (UsrIDIsVisible && UsrDat->IDs.List) if (ICanSeeUsrID == Usr_I_CAN && UsrDat->IDs.List)
FirstID = UsrDat->IDs.List[0].ID; FirstID = UsrDat->IDs.List[0].ID;
else // Hide user's ID else // Hide user's ID
FirstID = "********"; FirstID = "********";
@ -3262,7 +3262,7 @@ int swad__sendMessage (struct soap *soap,
API_CopyUsrData (soap, API_CopyUsrData (soap,
&(sendMessageOut->usersArray.__ptr[NumUsr]), &(sendMessageOut->usersArray.__ptr[NumUsr]),
&Gbl.Usrs.Other.UsrDat, &Gbl.Usrs.Other.UsrDat,
false); Usr_I_CAN_NOT);
} }
} }
} }
@ -4326,7 +4326,6 @@ int swad__getMatchStatus (struct soap *soap,
int ReturnCode; int ReturnCode;
struct Gam_Game Game; struct Gam_Game Game;
struct Mch_Match Match; struct Mch_Match Match;
bool ICanPlayThisMatchBasedOnGrps;
struct Mch_UsrAnswer UsrAnswer; struct Mch_UsrAnswer UsrAnswer;
/***** Reset game and match *****/ /***** Reset game and match *****/
@ -4395,8 +4394,7 @@ int swad__getMatchStatus (struct soap *soap,
"Requester must be a student in the course"); "Requester must be a student in the course");
/***** Can I play this match? *****/ /***** Can I play this match? *****/
ICanPlayThisMatchBasedOnGrps = Mch_CheckIfICanPlayThisMatchBasedOnGrps (&Match); if (Mch_CheckIfICanPlayThisMatchBasedOnGrps (&Match) == Usr_I_CAN_NOT)
if (!ICanPlayThisMatchBasedOnGrps)
return soap_receiver_fault (soap, return soap_receiver_fault (soap,
"Request forbidden", "Request forbidden",
"Requester can not join this match"); "Requester can not join this match");
@ -5263,7 +5261,7 @@ int swad__getLastLocation (struct soap *soap,
The other user does not have to share any course with me, The other user does not have to share any course with me,
but at least some course of each one has to share center. but at least some course of each one has to share center.
*/ */
if (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode)) if (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode) == Usr_I_CAN)
{ {
/***** Get list of locations *****/ /***** Get list of locations *****/
NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode); NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode);

View File

@ -308,7 +308,7 @@ static bool ID_CheckIfUsrIDIsValidUsingMinDigits (const char *UsrID,unsigned Min
void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor) void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor)
{ {
unsigned NumID; unsigned NumID;
bool ICanSeeUsrID = ID_ICanSeeOtherUsrIDs (UsrDat); bool ICanSeeUsrID = (ID_ICanSeeOtherUsrIDs (UsrDat) == Usr_I_CAN);
bool ICanConfirmUsrID = ICanSeeUsrID && bool ICanConfirmUsrID = ICanSeeUsrID &&
Usr_ItsMe (UsrDat->UsrCod) == Usr_OTHER && // Not me Usr_ItsMe (UsrDat->UsrCod) == Usr_OTHER && // Not me
!Frm_CheckIfInside () && // Not inside another form !Frm_CheckIfInside () && // Not inside another form
@ -343,11 +343,11 @@ void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor)
/***************** Check if I can see another user's IDs *********************/ /***************** Check if I can see another user's IDs *********************/
/*****************************************************************************/ /*****************************************************************************/
bool ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat) Usr_ICan_t ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat)
{ {
/***** Fast check: It's me? *****/ /***** Fast check: It's me? *****/
if (Usr_ItsMe (UsrDat->UsrCod) == Usr_ME) if (Usr_ItsMe (UsrDat->UsrCod) == Usr_ME)
return true; return Usr_I_CAN;
/***** Check if I have permission to see another user's IDs *****/ /***** Check if I have permission to see another user's IDs *****/
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
@ -356,12 +356,12 @@ bool ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat)
case Rol_TCH: case Rol_TCH:
/* Check 1: I can see the IDs of users who do not exist in database */ /* Check 1: I can see the IDs of users who do not exist in database */
if (UsrDat->UsrCod <= 0) // User does not exist (when creating a new user) if (UsrDat->UsrCod <= 0) // User does not exist (when creating a new user)
return true; return Usr_I_CAN;
/* Check 2: I can see the IDs of confirmed students */ /* Check 2: I can see the IDs of confirmed students */
if (UsrDat->Roles.InCurrentCrs == Rol_STD && // A student if (UsrDat->Roles.InCurrentCrs == Rol_STD && // A student
UsrDat->Accepted) // who accepted registration UsrDat->Accepted) // who accepted registration
return true; return Usr_I_CAN;
/* Check 3: I can see the IDs of users with user's data empty */ /* Check 3: I can see the IDs of users with user's data empty */
// This check is made to not view simultaneously: // This check is made to not view simultaneously:
@ -372,16 +372,16 @@ bool ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat)
!UsrDat->Surname2[0] && // and who has no surname 2 (nobody filled user's surname 2) !UsrDat->Surname2[0] && // and who has no surname 2 (nobody filled user's surname 2)
!UsrDat->FrstName[0] && // and who has no first name (nobody filled user's first name) !UsrDat->FrstName[0] && // and who has no first name (nobody filled user's first name)
!UsrDat->Email[0]) // and who has no email (nobody filled user's email) !UsrDat->Email[0]) // and who has no email (nobody filled user's email)
return true; return Usr_I_CAN;
return false; return Usr_I_CAN_NOT;
case Rol_DEG_ADM: case Rol_DEG_ADM:
case Rol_CTR_ADM: case Rol_CTR_ADM:
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return Usr_ICanEditOtherUsr (UsrDat); return Usr_CheckIfICanEditOtherUsr (UsrDat);
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }
@ -393,7 +393,7 @@ static void ID_PutLinkToConfirmID (struct Usr_Data *UsrDat,unsigned NumID,
const char *Anchor) const char *Anchor)
{ {
extern const char *Txt_Confirm_ID; extern const char *Txt_Confirm_ID;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_UNK ] = ActCnfID_Oth, [Rol_UNK ] = ActCnfID_Oth,
[Rol_GST ] = ActCnfID_Oth, [Rol_GST ] = ActCnfID_Oth,
@ -691,7 +691,7 @@ void ID_RemoveOtherUsrID (void)
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Usr_ICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Remove user's ID *****/ /***** Remove user's ID *****/
ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat, ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat,
@ -721,7 +721,7 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
char UsrID[ID_MAX_BYTES_USR_ID + 1]; char UsrID[ID_MAX_BYTES_USR_ID + 1];
bool ICanRemove; bool ICanRemove;
if (Usr_ICanEditOtherUsr (UsrDat)) if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN)
{ {
/***** Get user's ID from form *****/ /***** Get user's ID from form *****/
Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID);
@ -787,7 +787,7 @@ void ID_ChangeOtherUsrID (void)
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Usr_ICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Change user's ID *****/ /***** Change user's ID *****/
ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat, ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat,
@ -822,7 +822,7 @@ static void ID_ChangeUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
bool AlreadyExists; bool AlreadyExists;
unsigned NumIDFound = 0; // Initialized to avoid warning unsigned NumIDFound = 0; // Initialized to avoid warning
if (Usr_ICanEditOtherUsr (UsrDat)) if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN)
{ {
/***** Get new user's ID from form *****/ /***** Get new user's ID from form *****/
Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID); Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID);
@ -911,7 +911,7 @@ void ID_ConfirmOtherUsrID (void)
if (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs == Rol_STD) if (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs == Rol_STD)
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
if (ID_ICanSeeOtherUsrIDs (&Gbl.Usrs.Other.UsrDat)) if (ID_ICanSeeOtherUsrIDs (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
ICanConfirm = true; ICanConfirm = true;
} }

View File

@ -70,7 +70,7 @@ bool ID_CheckIfUsrIDIsValid (const char *UsrID);
bool ID_CheckIfUsrIDSeemsAValidID (const char *UsrID); bool ID_CheckIfUsrIDSeemsAValidID (const char *UsrID);
void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor); void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor);
bool ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat); Usr_ICan_t ID_ICanSeeOtherUsrIDs (const struct Usr_Data *UsrDat);
void ID_ShowFormChangeMyID (bool IShouldFillInID); void ID_ShowFormChangeMyID (bool IShouldFillInID);
void ID_ShowFormChangeOtherUsrID (void); void ID_ShowFormChangeOtherUsrID (void);

View File

@ -112,7 +112,7 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
ActCod = DB_GetNextCode (mysql_res); ActCod = DB_GetNextCode (mysql_res);
if ((Action = Act_GetActionFromActCod (ActCod)) != ActUnk) if ((Action = Act_GetActionFromActCod (ActCod)) != ActUnk)
if (Act_GetIndexInMenu (Action) >= 0) // MFU actions must be only actions shown on menu (database could contain wrong action numbers) if (Act_GetIndexInMenu (Action) >= 0) // MFU actions must be only actions shown on menu (database could contain wrong action numbers)
if (Act_CheckIfIHavePermissionToExecuteAction (Action)) if (Act_CheckIfICanExecuteAction (Action) == Usr_I_CAN)
ListMFUActions->Actions[ListMFUActions->NumActions++] = Action; ListMFUActions->Actions[ListMFUActions->NumActions++] = Action;
} }
@ -148,7 +148,7 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
if (ActCod >= 0 && ActCod <= ActLst_MAX_ACTION_COD) if (ActCod >= 0 && ActCod <= ActLst_MAX_ACTION_COD)
if ((Action = Act_GetActionFromActCod (ActCod)) >= 0) if ((Action = Act_GetActionFromActCod (ActCod)) >= 0)
if (Act_GetTab (Action) == Gbl.Action.Tab) if (Act_GetTab (Action) == Gbl.Action.Tab)
if (Act_CheckIfIHavePermissionToExecuteAction (Action)) if (Act_CheckIfICanExecuteAction (Action) == Usr_I_CAN)
{ {
MoreRecentActionInCurrentTab = Action; MoreRecentActionInCurrentTab = Action;
break; break;

View File

@ -146,7 +146,7 @@ void QR_ImageQRCode (const char *QRString)
void QR_LinkTo (unsigned Size,ParCod_Param_t ParCode,long Cod) void QR_LinkTo (unsigned Size,ParCod_Param_t ParCode,long Cod)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Shortcut; extern const char *Txt_Shortcut;
char *URL; char *URL;

View File

@ -488,7 +488,7 @@ void Acc_ShowFormChgOtherUsrAccount (void)
/***** Get user whose account must be changed *****/ /***** Get user whose account must be changed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Usr_ICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Get user's nickname and email address /***** Get user's nickname and email address
It's necessary because nickname or email could be just updated *****/ It's necessary because nickname or email could be just updated *****/
@ -530,7 +530,7 @@ void Acc_ShowFormChgOtherUsrAccount (void)
void Acc_PutLinkToRemoveMyAccount (__attribute__((unused)) void *Args) void Acc_PutLinkToRemoveMyAccount (__attribute__((unused)) void *Args)
{ {
if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Me.UsrDat.UsrCod)) if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Me.UsrDat.UsrCod) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (ActReqRemMyAcc,NULL, Lay_PutContextualLinkOnlyIcon (ActReqRemMyAcc,NULL,
Acc_PutParsToRemoveMyAccount,Gbl.Usrs.Me.UsrDat.EnUsrCod, Acc_PutParsToRemoveMyAccount,Gbl.Usrs.Me.UsrDat.EnUsrCod,
"trash.svg",Ico_RED); "trash.svg",Ico_RED);
@ -771,7 +771,7 @@ void Acc_GetUsrCodAndRemUsrGbl (void)
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN)
Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR);
else else
Error = true; Error = true;
@ -814,7 +814,7 @@ void Acc_ReqRemAccountOrRemAccount (Acc_ReqOrRemUsr_t RequestOrRemove)
/******** Check if I can eliminate completely another user's account *********/ /******** Check if I can eliminate completely another user's account *********/
/*****************************************************************************/ /*****************************************************************************/
bool Acc_CheckIfICanEliminateAccount (long UsrCod) Usr_ICan_t Acc_CheckIfICanEliminateAccount (long UsrCod)
{ {
Usr_MeOrOther_t MeOrOther = Usr_ItsMe (UsrCod); Usr_MeOrOther_t MeOrOther = Usr_ItsMe (UsrCod);
@ -823,10 +823,14 @@ bool Acc_CheckIfICanEliminateAccount (long UsrCod)
switch (MeOrOther) switch (MeOrOther)
{ {
case Usr_ME: case Usr_ME:
return (Gbl.Usrs.Me.Role.Available & (1 << Rol_SYS_ADM)) == 0; // I can not be system admin // A system admin can not eliminate him/herself
return (Gbl.Usrs.Me.Role.Available & (1 << Rol_SYS_ADM)) == 0 ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Usr_OTHER: case Usr_OTHER:
default: default:
return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM; // I am logged as system admin // 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;
} }
} }
@ -1076,7 +1080,7 @@ static void Acc_RemoveUsrBriefcase (struct Usr_Data *UsrDat)
void Acc_PutIconToChangeUsrAccount (struct Usr_Data *UsrDat) void Acc_PutIconToChangeUsrAccount (struct Usr_Data *UsrDat)
{ {
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_UNK ] = ActFrmAccOth, [Rol_UNK ] = ActFrmAccOth,
[Rol_GST ] = ActFrmAccOth, [Rol_GST ] = ActFrmAccOth,
@ -1100,7 +1104,7 @@ void Acc_PutIconToChangeUsrAccount (struct Usr_Data *UsrDat)
break; break;
case Usr_OTHER: case Usr_OTHER:
default: default:
if (Usr_ICanEditOtherUsr (UsrDat)) if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL, Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL,
Rec_PutParUsrCodEncrypted,NULL, Rec_PutParUsrCodEncrypted,NULL,
"at.svg",Ico_BLACK); "at.svg",Ico_BLACK);

View File

@ -62,7 +62,7 @@ void Acc_AfterCreationNewAccount (void);
void Acc_GetUsrCodAndRemUsrGbl (void); void Acc_GetUsrCodAndRemUsrGbl (void);
void Acc_ReqRemAccountOrRemAccount (Acc_ReqOrRemUsr_t RequestOrRemove); void Acc_ReqRemAccountOrRemAccount (Acc_ReqOrRemUsr_t RequestOrRemove);
bool Acc_CheckIfICanEliminateAccount (long UsrCod); Usr_ICan_t Acc_CheckIfICanEliminateAccount (long UsrCod);
void Acc_AskIfRemoveMyAccount (void); void Acc_AskIfRemoveMyAccount (void);
void Acc_RemoveMyAccount (void); void Acc_RemoveMyAccount (void);
void Acc_CompletelyEliminateAccount (struct Usr_Data *UsrDat, void Acc_CompletelyEliminateAccount (struct Usr_Data *UsrDat,

View File

@ -99,12 +99,12 @@ Act_Action_t Act_GetSuperAction (Act_Action_t Action)
/************* Check if I have permission to execute an action ***************/ /************* Check if I have permission to execute an action ***************/
/*****************************************************************************/ /*****************************************************************************/
bool Act_CheckIfIHavePermissionToExecuteAction (Act_Action_t Action) Usr_ICan_t Act_CheckIfICanExecuteAction (Act_Action_t Action)
{ {
unsigned Permission; unsigned Permission;
if ((unsigned) Action >= ActLst_NUM_ACTIONS) if ((unsigned) Action >= ActLst_NUM_ACTIONS)
return false; return Usr_I_CAN_NOT;
switch (Gbl.Hierarchy.Level) switch (Gbl.Hierarchy.Level)
{ {
@ -128,10 +128,11 @@ bool Act_CheckIfIHavePermissionToExecuteAction (Act_Action_t Action)
ActLst_Actions[Action].PermissionCrsIfIDontBelong; ActLst_Actions[Action].PermissionCrsIfIDontBelong;
break; break;
default: default:
return false; return Usr_I_CAN_NOT;
} }
return ((Permission & (1 << Gbl.Usrs.Me.Role.Logged)) != 0); return ((Permission & (1 << Gbl.Usrs.Me.Role.Logged)) != 0) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -240,7 +241,7 @@ const char *Act_GetActionText (Act_Action_t Action)
void Act_AdjustActionWhenNoUsrLogged (void) void Act_AdjustActionWhenNoUsrLogged (void)
{ {
static const Act_Action_t Actions[Hie_NUM_LEVELS] = static Act_Action_t Actions[Hie_NUM_LEVELS] =
{ {
[Hie_UNK] = ActUnk, // Unknown [Hie_UNK] = ActUnk, // Unknown
[Hie_SYS] = ActFrmLogIn, // System [Hie_SYS] = ActFrmLogIn, // System

View File

@ -35,6 +35,7 @@
#include "swad_language.h" #include "swad_language.h"
#include "swad_string.h" #include "swad_string.h"
#include "swad_tab.h" #include "swad_tab.h"
#include "swad_user_type.h"
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
@ -89,6 +90,13 @@ struct Act_Actions
void (*FunctionPosteriori) (); void (*FunctionPosteriori) ();
}; };
struct Act_ActionFunc
{
Act_Action_t NextAction;
void (*FuncPars) (void *Args);
void *Args;
};
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -98,7 +106,7 @@ long Act_GetActCod (Act_Action_t Action);
signed int Act_GetIndexInMenu (Act_Action_t Action); signed int Act_GetIndexInMenu (Act_Action_t Action);
Tab_Tab_t Act_GetTab (Act_Action_t Action); Tab_Tab_t Act_GetTab (Act_Action_t Action);
Act_Action_t Act_GetSuperAction (Act_Action_t Action); Act_Action_t Act_GetSuperAction (Act_Action_t Action);
bool Act_CheckIfIHavePermissionToExecuteAction (Act_Action_t Action); Usr_ICan_t Act_CheckIfICanExecuteAction (Act_Action_t Action);
Act_Content_t Act_GetContentType (Act_Action_t Action); Act_Content_t Act_GetContentType (Act_Action_t Action);
Act_BrowserTab_t Act_GetBrowserTab (Act_Action_t Action); Act_BrowserTab_t Act_GetBrowserTab (Act_Action_t Action);
void (*Act_GetFunctionPriori (Act_Action_t Action)) (void); void (*Act_GetFunctionPriori (Act_Action_t Action)) (void);

View File

@ -208,7 +208,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActMrkNtfSee ] = {1146,-1,TabUnk,ActSeeNtf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ntf_MarkAllNotifAsSeen }, [ActMrkNtfSee ] = {1146,-1,TabUnk,ActSeeNtf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ntf_MarkAllNotifAsSeen },
[ActSeeMai ] = { 855,-1,TabUnk,ActSeeNtf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Mai_SeeMailDomains }, [ActSeeMai ] = { 855,-1,TabUnk,ActSeeNtf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Mai_SeeMailDomains },
[ActEdiMai ] = { 856,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Mai_EditMailDomains }, [ActEdiMai ] = { 856,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Mai_EditMailDomains },
[ActNewMai ] = { 857,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_ReceiveFormNewMailDomain,Mai_ContEditAfterChgMai }, [ActNewMai ] = { 857,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_ReceiveNewMailDomain ,Mai_ContEditAfterChgMai },
[ActRemMai ] = { 860,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RemoveMailDomain ,Mai_ContEditAfterChgMai }, [ActRemMai ] = { 860,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RemoveMailDomain ,Mai_ContEditAfterChgMai },
[ActRenMaiSho ] = { 858,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RenameMailDomainShort ,Mai_ContEditAfterChgMai }, [ActRenMaiSho ] = { 858,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RenameMailDomainShort ,Mai_ContEditAfterChgMai },
[ActRenMaiFul ] = { 859,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RenameMailDomainFull ,Mai_ContEditAfterChgMai }, [ActRenMaiFul ] = { 859,-1,TabUnk,ActSeeNtf ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Mai_RenameMailDomainFull ,Mai_ContEditAfterChgMai },
@ -221,7 +221,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Countries // Countries
[ActSeeCty ] = { 862, 1,TabSys,ActSeeCty , 0, 0, 0, 0, 0, 0,0x3C7,Act_CONT_NORM,Act_1ST_TAB,Cty_ListCountries1 ,Cty_ListCountries2 }, [ActSeeCty ] = { 862, 1,TabSys,ActSeeCty , 0, 0, 0, 0, 0, 0,0x3C7,Act_CONT_NORM,Act_1ST_TAB,Cty_ListCountries1 ,Cty_ListCountries2 },
[ActEdiCty ] = { 863,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Cty_EditCountries }, [ActEdiCty ] = { 863,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Cty_EditCountries },
[ActNewCty ] = { 864,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_ReceiveFormNewCountry ,Cty_ContEditAfterChgCty }, [ActNewCty ] = { 864,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_ReceiveNewCountry ,Cty_ContEditAfterChgCty },
[ActRemCty ] = { 893,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_RemoveCountry ,Cty_ContEditAfterChgCty }, [ActRemCty ] = { 893,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_RemoveCountry ,Cty_ContEditAfterChgCty },
[ActRenCty ] = { 866,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_RenameCountry ,Cty_ContEditAfterChgCty }, [ActRenCty ] = { 866,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_RenameCountry ,Cty_ContEditAfterChgCty },
[ActChgCtyWWW ] = {1157,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_ChangeCtyWWW ,Cty_ContEditAfterChgCty }, [ActChgCtyWWW ] = {1157,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Cty_ChangeCtyWWW ,Cty_ContEditAfterChgCty },
@ -230,16 +230,16 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeePen ] = {1060, 2,TabSys,ActSeePen , 0, 0, 0, 0, 0, 0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hie_SeePending }, [ActSeePen ] = {1060, 2,TabSys,ActSeePen , 0, 0, 0, 0, 0, 0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hie_SeePending },
// Links // Links
[ActSeeLnk ] = { 748, 3,TabSys,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x3C7,Act_CONT_NORM,Act_1ST_TAB,NULL ,Lnk_SeeLinks }, [ActSeeLnk ] = { 748, 3,TabSys,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x3C7,Act_CONT_NORM,Act_1ST_TAB,NULL ,Lnk_SeeLinks },
[ActEdiLnk ] = { 749,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Lnk_EditLinks }, [ActEdiLnk ] = { 749,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Lnk_EditLinks },
[ActNewLnk ] = { 750,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_ReceiveFormNewLink ,Lnk_ContEditAfterChgLnk }, [ActNewLnk ] = { 750,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_ReceiveNewLink ,Lnk_ContEditAfterChgLnk },
[ActRemLnk ] = { 897,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RemoveLink ,Lnk_ContEditAfterChgLnk }, [ActRemLnk ] = { 897,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RemoveLink ,Lnk_ContEditAfterChgLnk },
[ActRenLnkSho ] = { 753,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RenameLinkShort ,Lnk_ContEditAfterChgLnk }, [ActRenLnkSho ] = { 753,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RenameLinkShort ,Lnk_ContEditAfterChgLnk },
[ActRenLnkFul ] = { 751,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RenameLinkFull ,Lnk_ContEditAfterChgLnk }, [ActRenLnkFul ] = { 751,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_RenameLinkFull ,Lnk_ContEditAfterChgLnk },
[ActChgLnkWWW ] = { 752,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_ChangeLinkWWW ,Lnk_ContEditAfterChgLnk }, [ActChgLnkWWW ] = { 752,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Lnk_ChangeLinkWWW ,Lnk_ContEditAfterChgLnk },
[ActSeeBan ] = {1137,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x3FF,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ban_ShowAllBanners }, [ActSeeBan ] = {1137,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x3FF,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ban_ShowAllBanners },
[ActEdiBan ] = {1138,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ban_EditBanners }, [ActEdiBan ] = {1138,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ban_EditBanners },
[ActNewBan ] = {1139,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_ReceiveFormNewBanner ,Ban_ContEditAfterChgBan }, [ActNewBan ] = {1139,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_ReceiveNewBanner ,Ban_ContEditAfterChgBan },
[ActRemBan ] = {1140,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_RemoveBanner ,Ban_ContEditAfterChgBan }, [ActRemBan ] = {1140,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_RemoveBanner ,Ban_ContEditAfterChgBan },
[ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_UnhideBanner ,Ban_ContEditAfterChgBan }, [ActUnhBan ] = {1212,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_UnhideBanner ,Ban_ContEditAfterChgBan },
[ActHidBan ] = {1213,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_HideBanner ,Ban_ContEditAfterChgBan }, [ActHidBan ] = {1213,-1,TabUnk,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Ban_HideBanner ,Ban_ContEditAfterChgBan },
@ -252,7 +252,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Plugins // Plugins
[ActSeePlg ] = { 777, 4,TabSys,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plg_ListPlugins }, [ActSeePlg ] = { 777, 4,TabSys,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plg_ListPlugins },
[ActEdiPlg ] = { 778,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plg_EditPlugins }, [ActEdiPlg ] = { 778,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plg_EditPlugins },
[ActNewPlg ] = { 779,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_ReceiveFormNewPlg ,Plg_ContEditAfterChgPlg }, [ActNewPlg ] = { 779,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_ReceiveNewPlg ,Plg_ContEditAfterChgPlg },
[ActRemPlg ] = { 889,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_RemovePlugin ,Plg_ContEditAfterChgPlg }, [ActRemPlg ] = { 889,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_RemovePlugin ,Plg_ContEditAfterChgPlg },
[ActRenPlg ] = { 782,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_RenamePlugin ,Plg_ContEditAfterChgPlg }, [ActRenPlg ] = { 782,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_RenamePlugin ,Plg_ContEditAfterChgPlg },
[ActChgPlgDes ] = { 888,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_ChangePlgDescription ,Plg_ContEditAfterChgPlg }, [ActChgPlgDes ] = { 888,-1,TabUnk,ActSeePlg , 0, 0, 0, 0, 0, 0,0x200,Act_CONT_NORM,Act_1ST_TAB,Plg_ChangePlgDescription ,Plg_ContEditAfterChgPlg },
@ -276,8 +276,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Institutions // Institutions
[ActSeeIns ] = { 696, 1,TabCty,ActSeeIns , 0, 0, 0, 0, 0,0x3C7, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ins_ShowInssOfCurrentCty }, [ActSeeIns ] = { 696, 1,TabCty,ActSeeIns , 0, 0, 0, 0, 0,0x3C7, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ins_ShowInssOfCurrentCty },
[ActEdiIns ] = { 697,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ins_EditInstitutions }, [ActEdiIns ] = { 697,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ins_EditInstitutions },
[ActReqIns ] = {1210,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_ReceiveFormReqIns ,Ins_ContEditAfterChgIns }, [ActReqIns ] = {1210,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_ReceiveReqIns ,Ins_ContEditAfterChgIns },
[ActNewIns ] = { 698,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x200, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_ReceiveFormNewIns ,Ins_ContEditAfterChgIns }, [ActNewIns ] = { 698,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x200, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_ReceiveNewIns ,Ins_ContEditAfterChgIns },
[ActRemIns ] = { 759,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RemoveInstitution ,Ins_ContEditAfterChgIns }, [ActRemIns ] = { 759,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RemoveInstitution ,Ins_ContEditAfterChgIns },
[ActRenInsSho ] = { 702,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RenameInsShort ,Ins_ContEditAfterChgIns }, [ActRenInsSho ] = { 702,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RenameInsShort ,Ins_ContEditAfterChgIns },
[ActRenInsFul ] = { 701,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RenameInsFull ,Ins_ContEditAfterChgIns }, [ActRenInsFul ] = { 701,-1,TabUnk,ActSeeIns , 0, 0, 0, 0, 0,0x3C6, 0,Act_CONT_NORM,Act_1ST_TAB,Ins_RenameInsFull ,Ins_ContEditAfterChgIns },
@ -299,8 +299,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Centers // Centers
[ActSeeCtr ] = { 676, 1,TabIns,ActSeeCtr , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ctr_ShowCtrsOfCurrentIns }, [ActSeeCtr ] = { 676, 1,TabIns,ActSeeCtr , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ctr_ShowCtrsOfCurrentIns },
[ActEdiCtr ] = { 681,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ctr_EditCenters }, [ActEdiCtr ] = { 681,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ctr_EditCenters },
[ActReqCtr ] = {1208,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ReceiveFormReqCtr ,Ctr_ContEditAfterChgCtr }, [ActReqCtr ] = {1208,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ReceiveReqCtr ,Ctr_ContEditAfterChgCtr },
[ActNewCtr ] = { 685,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ReceiveFormNewCtr ,Ctr_ContEditAfterChgCtr }, [ActNewCtr ] = { 685,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ReceiveNewCtr ,Ctr_ContEditAfterChgCtr },
[ActRemCtr ] = { 686,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_RemoveCenter ,Ctr_ContEditAfterChgCtr }, [ActRemCtr ] = { 686,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_RemoveCenter ,Ctr_ContEditAfterChgCtr },
[ActChgCtrPlc ] = { 706,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ChangeCtrPlc ,Ctr_ContEditAfterChgCtr }, [ActChgCtrPlc ] = { 706,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_ChangeCtrPlc ,Ctr_ContEditAfterChgCtr },
[ActRenCtrSho ] = { 682,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_RenameCenterShort ,Ctr_ContEditAfterChgCtr }, [ActRenCtrSho ] = { 682,-1,TabUnk,ActSeeCtr , 0, 0, 0, 0,0x3C6, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Ctr_RenameCenterShort ,Ctr_ContEditAfterChgCtr },
@ -311,7 +311,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Places // Places
[ActSeePlc ] = { 703, 2,TabIns,ActSeePlc , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plc_SeeAllPlaces }, [ActSeePlc ] = { 703, 2,TabIns,ActSeePlc , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plc_SeeAllPlaces },
[ActEdiPlc ] = { 704,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plc_EditPlaces }, [ActEdiPlc ] = { 704,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Plc_EditPlaces },
[ActNewPlc ] = { 705,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_ReceiveFormNewPlace ,Plc_ContEditAfterChgPlc }, [ActNewPlc ] = { 705,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_ReceiveNewPlace ,Plc_ContEditAfterChgPlc },
[ActRemPlc ] = { 776,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RemovePlace ,Plc_ContEditAfterChgPlc }, [ActRemPlc ] = { 776,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RemovePlace ,Plc_ContEditAfterChgPlc },
[ActRenPlcSho ] = { 894,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RenamePlaceShort ,Plc_ContEditAfterChgPlc }, [ActRenPlcSho ] = { 894,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RenamePlaceShort ,Plc_ContEditAfterChgPlc },
[ActRenPlcFul ] = { 895,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RenamePlaceFull ,Plc_ContEditAfterChgPlc }, [ActRenPlcFul ] = { 895,-1,TabUnk,ActSeePlc , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Plc_RenamePlaceFull ,Plc_ContEditAfterChgPlc },
@ -319,7 +319,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Departments // Departments
[ActSeeDpt ] = { 675, 3,TabIns,ActSeeDpt , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Dpt_SeeAllDepts }, [ActSeeDpt ] = { 675, 3,TabIns,ActSeeDpt , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Dpt_SeeAllDepts },
[ActEdiDpt ] = { 677,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Dpt_EditDepartments }, [ActEdiDpt ] = { 677,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Dpt_EditDepartments },
[ActNewDpt ] = { 687,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_ReceiveFormNewDpt ,Dpt_ContEditAfterChgDpt }, [ActNewDpt ] = { 687,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_ReceiveNewDpt ,Dpt_ContEditAfterChgDpt },
[ActRemDpt ] = { 690,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_RemoveDepartment ,Dpt_ContEditAfterChgDpt }, [ActRemDpt ] = { 690,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_RemoveDepartment ,Dpt_ContEditAfterChgDpt },
[ActChgDptIns ] = { 721,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_ChangeDepartIns ,Dpt_ContEditAfterChgDpt }, [ActChgDptIns ] = { 721,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_ChangeDepartIns ,Dpt_ContEditAfterChgDpt },
[ActRenDptSho ] = { 688,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_RenameDepartShort ,Dpt_ContEditAfterChgDpt }, [ActRenDptSho ] = { 688,-1,TabUnk,ActSeeDpt , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dpt_RenameDepartShort ,Dpt_ContEditAfterChgDpt },
@ -329,7 +329,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Holidays // Holidays
[ActSeeHld ] = { 707, 4,TabIns,ActSeeHld , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hld_SeeAllHolidays }, [ActSeeHld ] = { 707, 4,TabIns,ActSeeHld , 0, 0, 0, 0,0x3C7, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hld_SeeAllHolidays },
[ActEdiHld ] = { 713,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hld_EditHolidays }, [ActEdiHld ] = { 713,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Hld_EditHolidays },
[ActNewHld ] = { 714,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ReceiveFormNewHoliday ,Hld_ContEditAfterChgHld }, [ActNewHld ] = { 714,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ReceiveNewHoliday ,Hld_ContEditAfterChgHld },
[ActRemHld ] = { 716,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_RemoveHoliday ,Hld_ContEditAfterChgHld }, [ActRemHld ] = { 716,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_RemoveHoliday ,Hld_ContEditAfterChgHld },
[ActChgHldPlc ] = { 896,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ChangeHolidayPlace ,Hld_ContEditAfterChgHld }, [ActChgHldPlc ] = { 896,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ChangeHolidayPlace ,Hld_ContEditAfterChgHld },
[ActChgHldTyp ] = { 715,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ChangeHolidayType ,Hld_ContEditAfterChgHld }, [ActChgHldTyp ] = { 715,-1,TabUnk,ActSeeHld , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Hld_ChangeHolidayType ,Hld_ContEditAfterChgHld },
@ -359,8 +359,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Degrees // Degrees
[ActSeeDeg ] = {1011, 1,TabCtr,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Deg_ShowDegsOfCurrentCtr }, [ActSeeDeg ] = {1011, 1,TabCtr,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Deg_ShowDegsOfCurrentCtr },
[ActEdiDeg ] = { 536,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Deg_EditDegrees }, [ActEdiDeg ] = { 536,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Deg_EditDegrees },
[ActReqDeg ] = {1206,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ReceiveFormReqDeg ,Deg_ContEditAfterChgDeg }, [ActReqDeg ] = {1206,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ReceiveReqDeg ,Deg_ContEditAfterChgDeg },
[ActNewDeg ] = { 540,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ReceiveFormNewDeg ,Deg_ContEditAfterChgDeg }, [ActNewDeg ] = { 540,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ReceiveNewDeg ,Deg_ContEditAfterChgDeg },
[ActRemDeg ] = { 542,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RemoveDegree ,Deg_ContEditAfterChgDeg }, [ActRemDeg ] = { 542,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RemoveDegree ,Deg_ContEditAfterChgDeg },
[ActRenDegSho ] = { 546,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RenameDegreeShort ,Deg_ContEditAfterChgDeg }, [ActRenDegSho ] = { 546,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RenameDegreeShort ,Deg_ContEditAfterChgDeg },
[ActRenDegFul ] = { 547,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RenameDegreeFull ,Deg_ContEditAfterChgDeg }, [ActRenDegFul ] = { 547,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_RenameDegreeFull ,Deg_ContEditAfterChgDeg },
@ -369,14 +369,14 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActChgDegSta ] = {1207,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ChangeDegStatus ,Deg_ContEditAfterChgDeg }, [ActChgDegSta ] = {1207,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Deg_ChangeDegStatus ,Deg_ContEditAfterChgDeg },
[ActSeeDegTyp ] = {1013,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,DegTyp_SeeDegreeTypesInDegTab }, [ActSeeDegTyp ] = {1013,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,DegTyp_SeeDegreeTypesInDegTab },
[ActEdiDegTyp ] = { 573,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,DegTyp_GetAndEditDegreeTypes }, [ActEdiDegTyp ] = { 573,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,DegTyp_GetAndEditDegreeTypes },
[ActNewDegTyp ] = { 537,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_ReceiveFormNewDegreeType,DegTyp_ContEditAfterChgDegTyp}, [ActNewDegTyp ] = { 537,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_ReceiveNewDegreeType,DegTyp_ContEditAfterChgDegTyp },
[ActRemDegTyp ] = { 545,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_RemoveDegreeType ,DegTyp_ContEditAfterChgDegTyp }, [ActRemDegTyp ] = { 545,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_RemoveDegreeType ,DegTyp_ContEditAfterChgDegTyp },
[ActRenDegTyp ] = { 538,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_RenameDegreeType ,DegTyp_ContEditAfterChgDegTyp }, [ActRenDegTyp ] = { 538,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x200, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,DegTyp_RenameDegreeType ,DegTyp_ContEditAfterChgDegTyp },
// Buildings // Buildings
[ActSeeBld ] = {1838, 2,TabCtr,ActSeeBld , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Bld_SeeBuildings }, [ActSeeBld ] = {1838, 2,TabCtr,ActSeeBld , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Bld_SeeBuildings },
[ActEdiBld ] = {1839,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Bld_EditBuildings }, [ActEdiBld ] = {1839,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Bld_EditBuildings },
[ActNewBld ] = {1840,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_ReceiveFormNewBuilding ,Bld_ContEditAfterChgBuilding }, [ActNewBld ] = {1840,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_ReceiveNewBuilding ,Bld_ContEditAfterChgBuilding },
[ActRemBld ] = {1841,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RemoveBuilding ,Bld_ContEditAfterChgBuilding }, [ActRemBld ] = {1841,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RemoveBuilding ,Bld_ContEditAfterChgBuilding },
[ActRenBldSho ] = {1842,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RenameBuildingShort ,Bld_ContEditAfterChgBuilding }, [ActRenBldSho ] = {1842,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RenameBuildingShort ,Bld_ContEditAfterChgBuilding },
[ActRenBldFul ] = {1843,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RenameBuildingFull ,Bld_ContEditAfterChgBuilding }, [ActRenBldFul ] = {1843,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Bld_RenameBuildingFull ,Bld_ContEditAfterChgBuilding },
@ -385,7 +385,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Rooms // Rooms
[ActSeeRoo ] = {1744, 2,TabCtr,ActSeeRoo , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Roo_SeeRooms }, [ActSeeRoo ] = {1744, 2,TabCtr,ActSeeRoo , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Roo_SeeRooms },
[ActEdiRoo ] = {1745,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Roo_EditRooms }, [ActEdiRoo ] = {1745,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Roo_EditRooms },
[ActNewRoo ] = {1746,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ReceiveFormNewRoom ,Roo_ContEditAfterChgRoom }, [ActNewRoo ] = {1746,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ReceiveNewRoom ,Roo_ContEditAfterChgRoom },
[ActRemRoo ] = {1747,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_RemoveRoom ,Roo_ContEditAfterChgRoom }, [ActRemRoo ] = {1747,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_RemoveRoom ,Roo_ContEditAfterChgRoom },
[ActChgRooBld ] = {1845,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ChangeBuilding ,Roo_ContEditAfterChgRoom }, [ActChgRooBld ] = {1845,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ChangeBuilding ,Roo_ContEditAfterChgRoom },
[ActChgRooFlo ] = {1846,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ChangeFloor ,Roo_ContEditAfterChgRoom }, [ActChgRooFlo ] = {1846,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Roo_ChangeFloor ,Roo_ContEditAfterChgRoom },
@ -410,8 +410,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Courses // Courses
[ActSeeCrs ] = {1009, 1,TabDeg,ActSeeCrs , 0, 0,0x3C7, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Crs_ShowCrssOfCurrentDeg }, [ActSeeCrs ] = {1009, 1,TabDeg,ActSeeCrs , 0, 0,0x3C7, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Crs_ShowCrssOfCurrentDeg },
[ActEdiCrs ] = { 555,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Crs_EditCourses }, [ActEdiCrs ] = { 555,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Crs_EditCourses },
[ActReqCrs ] = {1053,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ReceiveFormReqCrs ,Crs_ContEditAfterChgCrs }, [ActReqCrs ] = {1053,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ReceiveReqCrs ,Crs_ContEditAfterChgCrs },
[ActNewCrs ] = { 556,-1,TabUnk,ActSeeCrs , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ReceiveFormNewCrs ,Crs_ContEditAfterChgCrs }, [ActNewCrs ] = { 556,-1,TabUnk,ActSeeCrs , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ReceiveNewCrs ,Crs_ContEditAfterChgCrs },
[ActRemCrs ] = { 560,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_RemoveCourse ,Crs_ContEditAfterChgCrs }, [ActRemCrs ] = { 560,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_RemoveCourse ,Crs_ContEditAfterChgCrs },
[ActChgInsCrsCod ] = {1025,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ChangeInsCrsCod ,Crs_ContEditAfterChgCrs }, [ActChgInsCrsCod ] = {1025,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ChangeInsCrsCod ,Crs_ContEditAfterChgCrs },
[ActChgCrsYea ] = { 561,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ChangeCrsYear ,Crs_ContEditAfterChgCrs }, [ActChgCrsYea ] = { 561,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Crs_ChangeCrsYear ,Crs_ContEditAfterChgCrs },
@ -446,8 +446,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeePrgItm ] = {1927,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ViewItemAfterEdit }, [ActSeePrgItm ] = {1927,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ViewItemAfterEdit },
[ActFrmChgPrgItm ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqChangeItem }, [ActFrmChgPrgItm ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqChangeItem },
[ActFrmNewPrgItm ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqCreateItem }, [ActFrmNewPrgItm ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqCreateItem },
[ActChgPrgItm ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReceiveFormChgItem }, [ActChgPrgItm ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReceiveChgItem },
[ActNewPrgItm ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReceiveFormNewItem }, [ActNewPrgItm ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReceiveNewItem },
[ActReqRemPrgItm ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqRemItem }, [ActReqRemPrgItm ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ReqRemItem },
[ActRemPrgItm ] = {1828,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_RemoveItem }, [ActRemPrgItm ] = {1828,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_RemoveItem },
[ActHidPrgItm ] = {1829,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_HideItem }, [ActHidPrgItm ] = {1829,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_HideItem },
@ -457,8 +457,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLftPrgItm ] = {1834,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_MoveLeftItem }, [ActLftPrgItm ] = {1834,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_MoveLeftItem },
[ActRgtPrgItm ] = {1833,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_MoveRightItem }, [ActRgtPrgItm ] = {1833,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_MoveRightItem },
[ActExpSeePrgItm ] = {1944,-1,TabUnk,ActSeePrg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ExpandItem }, [ActExpSeePrgItm ] = {1944,-1,TabUnk,ActSeePrg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ExpandItem },
[ActExpEdiPrgItm ] = {1946,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ExpandItem },
[ActConSeePrgItm ] = {1945,-1,TabUnk,ActSeePrg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ContractItem }, [ActConSeePrgItm ] = {1945,-1,TabUnk,ActSeePrg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ContractItem },
[ActExpEdiPrgItm ] = {1946,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ExpandItem },
[ActConEdiPrgItm ] = {1947,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ContractItem }, [ActConEdiPrgItm ] = {1947,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prg_ContractItem },
[ActSeeRscCli_InPrg ] = {1970,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,PrgRsc_ViewResourceClipboard }, [ActSeeRscCli_InPrg ] = {1970,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,PrgRsc_ViewResourceClipboard },
[ActRemRscCli_InPrg ] = {1971,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,PrgRsc_RemoveResourceClipboard }, [ActRemRscCli_InPrg ] = {1971,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,PrgRsc_RemoveResourceClipboard },
@ -580,8 +580,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActEdiOneAsg ] = { 814,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReqCreatOrEditAsg }, [ActEdiOneAsg ] = { 814,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReqCreatOrEditAsg },
[ActSeeOneAsg ] = {1942,-1,TabUnk,ActSeeAllAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_SeeOneAssignment }, [ActSeeOneAsg ] = {1942,-1,TabUnk,ActSeeAllAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_SeeOneAssignment },
[ActPrnOneAsg ] = {1637,-1,TabUnk,ActSeeAllAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Asg_PrintOneAssignment }, [ActPrnOneAsg ] = {1637,-1,TabUnk,ActSeeAllAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Asg_PrintOneAssignment },
[ActNewAsg ] = { 803,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReceiveFormAssignment }, [ActNewAsg ] = { 803,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReceiveAssignment },
[ActChgAsg ] = { 815,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReceiveFormAssignment }, [ActChgAsg ] = { 815,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReceiveAssignment },
[ActReqRemAsg ] = { 813,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReqRemAssignment }, [ActReqRemAsg ] = { 813,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_ReqRemAssignment },
[ActRemAsg ] = { 806,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_RemoveAssignment }, [ActRemAsg ] = { 806,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_RemoveAssignment },
[ActHidAsg ] = { 964,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_HideAssignment }, [ActHidAsg ] = { 964,-1,TabUnk,ActSeeAllAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Asg_HideAssignment },
@ -603,8 +603,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReqEditPrj }, [ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReqEditPrj },
[ActSeeOnePrj ] = {1949,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks }, [ActSeeOnePrj ] = {1949,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks },
[ActPrnOnePrj ] = {1677,-1,TabUnk,ActSeeAllPrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Prj_PrintOneProject }, [ActPrnOnePrj ] = {1677,-1,TabUnk,ActSeeAllPrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Prj_PrintOneProject },
[ActNewPrj ] = {1678,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReceiveFormProject }, [ActNewPrj ] = {1678,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReceiveProject },
[ActChgPrj ] = {1679,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReceiveFormProject }, [ActChgPrj ] = {1679,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReceiveProject },
[ActReqRemPrj ] = {1680,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReqRemProject }, [ActReqRemPrj ] = {1680,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_ReqRemProject },
[ActRemPrj ] = {1681,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_RemoveProject }, [ActRemPrj ] = {1681,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_RemoveProject },
[ActHidPrj ] = {1682,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_HideProject }, [ActHidPrj ] = {1682,-1,TabUnk,ActSeeAllPrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Prj_HideProject },
@ -637,7 +637,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolDocPrj ] = {1705,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolDocPrj ] = {1705,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkDocPrj ] = {1706,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkDocPrj ] = {1706,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolDocPrj ] = {1707,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolDocPrj ] = {1707,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilDocPrjDZ ] = {1708,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilDocPrjDZ ] = {1708,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilDocPrjCla ] = {1709,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilDocPrjCla ] = {1709,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpDocPrj ] = {1710,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpDocPrj ] = {1710,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConDocPrj ] = {1711,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConDocPrj ] = {1711,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -656,7 +656,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolAssPrj ] = {1724,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolAssPrj ] = {1724,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkAssPrj ] = {1725,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkAssPrj ] = {1725,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolAssPrj ] = {1726,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolAssPrj ] = {1726,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilAssPrjDZ ] = {1727,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilAssPrjDZ ] = {1727,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilAssPrjCla ] = {1728,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilAssPrjCla ] = {1728,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpAssPrj ] = {1729,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpAssPrj ] = {1729,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConAssPrj ] = {1730,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConAssPrj ] = {1730,-1,TabUnk,ActSeeAllPrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -679,7 +679,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqLnkCfe ] = {1934,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,CfeRsc_GetLinkToCallForExam }, [ActReqLnkCfe ] = {1934,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,CfeRsc_GetLinkToCallForExam },
// Questions // Questions
[ActEdiTstQst ] = { 104, 3,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToPastAndNow,Qst_ReqEditQsts }, [ActEdiTstQst ] = { 104, 3,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToPastAndNow ,Qst_ReqEditQsts },
[ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Qst_ShowFormEditOneQst }, [ActEdiOneTstQst ] = { 105,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Qst_ShowFormEditOneQst },
[ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,QstImp_ShowFormImpQstsFromXML }, [ActReqImpTstQst ] = {1007,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,QstImp_ShowFormImpQstsFromXML },
[ActImpTstQst ] = {1008,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,QstImp_ImpQstsFromXML }, [ActImpTstQst ] = {1008,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,QstImp_ImpQstsFromXML },
@ -703,10 +703,10 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActAssTst ] = { 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Tst_AssessTest }, [ActAssTst ] = { 98,-1,TabUnk,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Tst_AssessTest },
[ActCfgTst ] = { 451,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstCfg_CheckAndShowFormConfig }, [ActCfgTst ] = { 451,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstCfg_CheckAndShowFormConfig },
[ActRcvCfgTst ] = { 454,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstCfg_ReceiveConfigTst }, [ActRcvCfgTst ] = { 454,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstCfg_ReceiveConfigTst },
[ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToPastAndNow,TstPrn_SelDatesToSeeMyPrints}, [ActReqSeeMyTstRes ] = {1083,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToPastAndNow ,TstPrn_SelDatesToSeeMyPrints },
[ActSeeMyTstResCrs ] = {1084,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowMyPrints }, [ActSeeMyTstResCrs ] = {1084,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowMyPrints },
[ActSeeOneTstResMe ] = {1085,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowOnePrint }, [ActSeeOneTstResMe ] = {1085,-1,TabUnk,ActReqTst ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowOnePrint },
[ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToPastAndNow,TstPrn_SelUsrsToViewUsrsPrints}, [ActReqSeeUsrTstRes ] = {1080,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToPastAndNow ,TstPrn_SelUsrsToViewUsrsPrints},
[ActSeeUsrTstResCrs ] = {1081,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_GetUsrsAndShowPrints }, [ActSeeUsrTstResCrs ] = {1081,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_GetUsrsAndShowPrints },
[ActSeeOneTstResOth ] = {1082,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowOnePrint }, [ActSeeOneTstResOth ] = {1082,-1,TabUnk,ActReqTst ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,TstPrn_ShowOnePrint },
@ -715,21 +715,21 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeOneExa ] = {1849,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_SeeOneExam }, [ActSeeOneExa ] = {1849,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_SeeOneExam },
[ActFrmNewExa ] = {1877,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam }, [ActFrmNewExa ] = {1877,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam },
[ActEdiOneExa ] = {1878,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam }, [ActEdiOneExa ] = {1878,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam },
[ActNewExa ] = {1879,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReceiveFormExam }, [ActNewExa ] = {1879,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReceiveExam },
[ActChgExa ] = {1880,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReceiveFormExam }, [ActChgExa ] = {1880,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_ReceiveExam },
[ActReqRemExa ] = {1881,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_AskRemExam }, [ActReqRemExa ] = {1881,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_AskRemExam },
[ActRemExa ] = {1882,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_RemoveExam }, [ActRemExa ] = {1882,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_RemoveExam },
[ActHidExa ] = {1883,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_HideExam }, [ActHidExa ] = {1883,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_HideExam },
[ActUnhExa ] = {1884,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_UnhideExam }, [ActUnhExa ] = {1884,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Exa_UnhideExam },
[ActReqLnkExa ] = {1936,-1,TabUnk,ActSeeAllExa ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaRsc_GetLinkToExam }, [ActReqLnkExa ] = {1936,-1,TabUnk,ActSeeAllExa ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaRsc_GetLinkToExam },
[ActNewExaSet ] = {1898,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReceiveFormSet }, [ActNewExaSet ] = {1898,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReceiveSet },
[ActReqRemExaSet ] = {1893,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReqRemSet }, [ActReqRemExaSet ] = {1893,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReqRemSet },
[ActRemExaSet ] = {1894,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_RemoveSet }, [ActRemExaSet ] = {1894,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_RemoveSet },
[ActUp_ExaSet ] = {1895,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_MoveUpSet }, [ActUp_ExaSet ] = {1895,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_MoveUpSet },
[ActDwnExaSet ] = {1896,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_MoveDownSet }, [ActDwnExaSet ] = {1896,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_MoveDownSet },
[ActChgTitExaSet ] = {1897,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ChangeSetTitle }, [ActChgTitExaSet ] = {1897,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ChangeSetTitle },
[ActChgNumQstExaSet ] = {1899,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ChangeNumQstsToExam }, [ActChgNumQstExaSet ] = {1899,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ChangeNumQstsToExam },
[ActReqAddQstExaSet ] = {1885,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToPastAndNow,ExaSet_ReqSelectQstsToAddToSet}, [ActReqAddQstExaSet ] = {1885,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToPastAndNow ,ExaSet_ReqSelectQstsToAddToSet },
[ActLstTstQstForSet ] = {1886,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ListQstsToAddToSet }, [ActLstTstQstForSet ] = {1886,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ListQstsToAddToSet },
[ActAddQstToExa ] = {1887,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_AddQstsToSet }, [ActAddQstToExa ] = {1887,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_AddQstsToSet },
[ActReqRemSetQst ] = {1888,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReqRemQstFromSet }, [ActReqRemSetQst ] = {1888,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_ReqRemQstFromSet },
@ -738,8 +738,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActInvSetQst ] = {1910,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_InvalidateQst }, [ActInvSetQst ] = {1910,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSet_InvalidateQst },
[ActReqNewExaSes ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes }, [ActReqNewExaSes ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes },
[ActReqChgExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes }, [ActReqChgExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes },
[ActNewExaSes ] = {1853,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReceiveFormSession }, [ActNewExaSes ] = {1853,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReceiveSession },
[ActChgExaSes ] = {1903,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReceiveFormSession }, [ActChgExaSes ] = {1903,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReceiveSession },
[ActReqRemExaSes ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqRemSession }, [ActReqRemExaSes ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_ReqRemSession },
[ActRemExaSes ] = {1851,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_RemoveSession }, [ActRemExaSes ] = {1851,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_RemoveSession },
[ActHidExaSes ] = {1900,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_HideSession }, [ActHidExaSes ] = {1900,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,ExaSes_HideSession },
@ -793,13 +793,13 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstOneGam ] = {1912,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ListGame }, [ActLstOneGam ] = {1912,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ListGame },
[ActFrmNewGam ] = {1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame }, [ActFrmNewGam ] = {1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame },
[ActEdiOneGam ] = {1653,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame }, [ActEdiOneGam ] = {1653,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame },
[ActNewGam ] = {1654,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReceiveFormGame }, [ActNewGam ] = {1654,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReceiveGame },
[ActChgGam ] = {1655,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReceiveFormGame }, [ActChgGam ] = {1655,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReceiveGame },
[ActReqRemGam ] = {1656,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_AskRemGame }, [ActReqRemGam ] = {1656,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_AskRemGame },
[ActRemGam ] = {1657,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_RemoveGame }, [ActRemGam ] = {1657,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_RemoveGame },
[ActHidGam ] = {1660,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_HideGame }, [ActHidGam ] = {1660,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_HideGame },
[ActUnhGam ] = {1661,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_UnhideGame }, [ActUnhGam ] = {1661,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_UnhideGame },
[ActAddOneGamQst ] = {1662,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToPastAndNow,Gam_ReqSelectQstsToAddToGame}, [ActAddOneGamQst ] = {1662,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToPastAndNow ,Gam_ReqSelectQstsToAddToGame },
[ActGamLstTstQst ] = {1666,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ListQstsToAddToGame }, [ActGamLstTstQst ] = {1666,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ListQstsToAddToGame },
[ActAddTstQstToGam ] = {1667,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_AddQstsToGame }, [ActAddTstQstToGam ] = {1667,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_AddQstsToGame },
[ActReqRemGamQst ] = {1664,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqRemQstFromGame }, [ActReqRemGamQst ] = {1664,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Gam_ReqRemQstFromGame },
@ -813,14 +813,14 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeOneRub ] = {1952,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_SeeOneRubric }, [ActSeeOneRub ] = {1952,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_SeeOneRubric },
[ActFrmNewRub ] = {1953,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric }, [ActFrmNewRub ] = {1953,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric },
[ActEdiOneRub ] = {1954,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric }, [ActEdiOneRub ] = {1954,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric },
[ActNewRub ] = {1955,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReceiveFormRubric }, [ActNewRub ] = {1955,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReceiveRubric },
[ActChgRub ] = {1956,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReceiveFormRubric }, [ActChgRub ] = {1956,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_ReceiveRubric },
[ActReqRemRub ] = {1957,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_AskRemRubric }, [ActReqRemRub ] = {1957,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_AskRemRubric },
[ActRemRub ] = {1958,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_RemoveRubric }, [ActRemRub ] = {1958,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rub_RemoveRubric },
[ActReqLnkRub ] = {1969,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_GetLinkToRubric }, [ActReqLnkRub ] = {1969,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_GetLinkToRubric },
[ActSeeRscCli_InRub ] = {1972,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_ViewResourceClipboard }, [ActSeeRscCli_InRub ] = {1972,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_ViewResourceClipboard },
[ActRemRscCli_InRub ] = {1973,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_RemoveResourceClipboard }, [ActRemRscCli_InRub ] = {1973,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubRsc_RemoveResourceClipboard },
[ActNewRubCri ] = {1959,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_ReceiveFormCriterion }, [ActNewRubCri ] = {1959,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_ReceiveCriterion },
[ActReqRemRubCri ] = {1960,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_ReqRemCriterion }, [ActReqRemRubCri ] = {1960,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_ReqRemCriterion },
[ActRemRubCri ] = {1961,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_RemoveCriterion }, [ActRemRubCri ] = {1961,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_RemoveCriterion },
[ActUp_RubCri ] = {1962,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_MoveUpCriterion }, [ActUp_RubCri ] = {1962,-1,TabUnk,ActSeeAllRub ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,RubCri_MoveUpCriterion },
@ -853,7 +853,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolDocIns ] = {1324,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolDocIns ] = {1324,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkDocIns ] = {1325,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkDocIns ] = {1325,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolDocIns ] = {1326,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolDocIns ] = {1326,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilDocInsDZ ] = {1327,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilDocInsDZ ] = {1327,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilDocInsCla ] = {1328,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilDocInsCla ] = {1328,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpAdmDocIns ] = {1329,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpAdmDocIns ] = {1329,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConAdmDocIns ] = {1330,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConAdmDocIns ] = {1330,-1,TabUnk,ActSeeAdmDocIns , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -876,7 +876,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolShaIns ] = {1390,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolShaIns ] = {1390,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkShaIns ] = {1391,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkShaIns ] = {1391,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolShaIns ] = {1392,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolShaIns ] = {1392,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilShaInsDZ ] = {1393,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilShaInsDZ ] = {1393,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilShaInsCla ] = {1394,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilShaInsCla ] = {1394,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpShaIns ] = {1395,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpShaIns ] = {1395,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConShaIns ] = {1396,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConShaIns ] = {1396,-1,TabUnk,ActAdmShaIns , 0, 0, 0, 0,0x3C0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -906,7 +906,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolDocCtr ] = {1295,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolDocCtr ] = {1295,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkDocCtr ] = {1296,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkDocCtr ] = {1296,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolDocCtr ] = {1297,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolDocCtr ] = {1297,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilDocCtrDZ ] = {1298,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilDocCtrDZ ] = {1298,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilDocCtrCla ] = {1299,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilDocCtrCla ] = {1299,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpAdmDocCtr ] = {1300,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpAdmDocCtr ] = {1300,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConAdmDocCtr ] = {1301,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConAdmDocCtr ] = {1301,-1,TabUnk,ActSeeAdmDocCtr , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -929,7 +929,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolShaCtr ] = {1371,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolShaCtr ] = {1371,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkShaCtr ] = {1372,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkShaCtr ] = {1372,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolShaCtr ] = {1373,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolShaCtr ] = {1373,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilShaCtrDZ ] = {1374,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilShaCtrDZ ] = {1374,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilShaCtrCla ] = {1375,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilShaCtrCla ] = {1375,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpShaCtr ] = {1376,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpShaCtr ] = {1376,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConShaCtr ] = {1377,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConShaCtr ] = {1377,-1,TabUnk,ActAdmShaCtr , 0, 0, 0,0x3C0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -959,7 +959,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolDocDeg ] = {1266,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolDocDeg ] = {1266,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkDocDeg ] = {1267,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkDocDeg ] = {1267,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolDocDeg ] = {1268,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolDocDeg ] = {1268,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilDocDegDZ ] = {1269,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilDocDegDZ ] = {1269,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilDocDegCla ] = {1270,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilDocDegCla ] = {1270,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpAdmDocDeg ] = {1271,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpAdmDocDeg ] = {1271,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConAdmDocDeg ] = {1272,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConAdmDocDeg ] = {1272,-1,TabUnk,ActSeeAdmDocDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -982,7 +982,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActCreFolShaDeg ] = {1352,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser }, [ActCreFolShaDeg ] = {1352,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecFolderFileBrowser },
[ActCreLnkShaDeg ] = {1353,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser }, [ActCreLnkShaDeg ] = {1353,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RecLinkFileBrowser },
[ActRenFolShaDeg ] = {1354,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser }, [ActRenFolShaDeg ] = {1354,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Brw_RenFolderFileBrowser },
[ActRcvFilShaDegDZ ] = {1355,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ,NULL }, [ActRcvFilShaDegDZ ] = {1355,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_UPL_FIL,Brw_RcvFileInFileBrwDZ ,NULL },
[ActRcvFilShaDegCla ] = {1356,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic }, [ActRcvFilShaDegCla ] = {1356,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_1ST_TAB,NULL ,Brw_RcvFileInFileBrwClassic },
[ActExpShaDeg ] = {1357,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL }, [ActExpShaDeg ] = {1357,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ExpandFileTree ,NULL },
[ActConShaDeg ] = {1358,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL }, [ActConShaDeg ] = {1358,-1,TabUnk,ActAdmShaDeg , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_204_NOC,Brw_ContractFileTree ,NULL },
@ -1304,14 +1304,14 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqSelGrp ] = { 116, 0,TabUsr,ActReqSelGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRegisterInGrps }, [ActReqSelGrp ] = { 116, 0,TabUsr,ActReqSelGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRegisterInGrps },
[ActChgGrp ] = { 118,-1,TabUnk,ActReqSelGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMyGrpsAndShowChanges }, [ActChgGrp ] = { 118,-1,TabUnk,ActReqSelGrp ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMyGrpsAndShowChanges },
[ActReqEdiGrp ] = { 108,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqEditGroups }, [ActReqEdiGrp ] = { 108,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqEditGroups },
[ActNewGrpTyp ] = { 174,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReceiveFormNewGrpTyp }, [ActNewGrpTyp ] = { 174,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReceiveNewGrpTyp },
[ActReqRemGrpTyp ] = { 236,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRemGroupType }, [ActReqRemGrpTyp ] = { 236,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRemGroupType },
[ActRemGrpTyp ] = { 237,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RemoveGroupType }, [ActRemGrpTyp ] = { 237,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RemoveGroupType },
[ActRenGrpTyp ] = { 304,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RenameGroupType }, [ActRenGrpTyp ] = { 304,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RenameGroupType },
[ActChgMdtGrpTyp ] = { 303,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMandatGrpTyp }, [ActChgMdtGrpTyp ] = { 303,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMandatGrpTyp },
[ActChgMulGrpTyp ] = { 302,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMultiGrpTyp }, [ActChgMulGrpTyp ] = { 302,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeMultiGrpTyp },
[ActChgTimGrpTyp ] = {1061,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeOpenTimeGrpTyp }, [ActChgTimGrpTyp ] = {1061,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ChangeOpenTimeGrpTyp },
[ActNewGrp ] = { 122,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReceiveFormNewGrp }, [ActNewGrp ] = { 122,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReceiveNewGrp },
[ActReqRemGrp ] = { 107,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRemGroup }, [ActReqRemGrp ] = { 107,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_ReqRemGroup },
[ActRemGrp ] = { 175,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RemoveGroup }, [ActRemGrp ] = { 175,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_RemoveGroup },
[ActOpeGrp ] = { 322,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_OpenGroup }, [ActOpeGrp ] = { 322,-1,TabUnk,ActReqSelGrp ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Grp_OpenGroup },
@ -1327,7 +1327,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstStd ] = { 678, 1,TabUsr,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeStudents }, [ActLstStd ] = { 678, 1,TabUsr,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeStudents },
[ActLstStdAll ] = { 42,-1,TabUnk,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataStds }, [ActLstStdAll ] = { 42,-1,TabUnk,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataStds },
[ActPrnStdPho ] = { 120,-1,TabUnk,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeStdClassPhotoPrn }, [ActPrnStdPho ] = { 120,-1,TabUnk,ActLstStd ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeStdClassPhotoPrn },
[ActDoActOnSevStd ] = {1754,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 }, [Act_DoAct_OnSevStd ] = {1754,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 },
[ActSeeRecSevStd ] = { 89,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsStdsShow }, [ActSeeRecSevStd ] = { 89,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsStdsShow },
[ActPrnRecSevStd ] = { 111,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsStdsPrint }, [ActPrnRecSevStd ] = { 111,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsStdsPrint },
[ActReqMdfOneStd ] = {1415,-1,TabUnk,ActLstStd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemStd }, [ActReqMdfOneStd ] = {1415,-1,TabUnk,ActLstStd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemStd },
@ -1360,10 +1360,10 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUnfSevStd ] = {1762,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_UnfollowUsrs }, [ActUnfSevStd ] = {1762,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_UnfollowUsrs },
[ActSeeRecOneStd ] = {1174,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_GetUsrAndShowRecOneStdCrs }, [ActSeeRecOneStd ] = {1174,-1,TabUnk,ActLstStd ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_GetUsrAndShowRecOneStdCrs },
[ActReqEnrSevStd ] = {1426,-1,TabUnk,ActLstStd ,0x3E0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminStds }, [ActReqEnrSevStd ] = {1426,-1,TabUnk,ActLstStd ,0x3E0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminStds },
[ActRcvFrmEnrSevStd ] = {1428,-1,TabUnk,ActLstStd ,0x3E0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveFormAdminStds }, [ActRcvFrmEnrSevStd ] = {1428,-1,TabUnk,ActLstStd ,0x3E0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveAdminStds },
[ActRcvRecOthUsr ] = { 300,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_UpdateAndShowOtherCrsRecord}, [ActRcvRecOthUsr ] = { 300,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_UpdateAndShowOtherCrsRecord},
[ActEdiRecFie ] = { 292,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReqEditRecordFields }, [ActEdiRecFie ] = { 292,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReqEditRecordFields },
[ActNewFie ] = { 293,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReceiveFormField }, [ActNewFie ] = { 293,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReceiveField },
[ActReqRemFie ] = { 294,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReqRemField }, [ActReqRemFie ] = { 294,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ReqRemField },
[ActRemFie ] = { 295,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_RemoveField }, [ActRemFie ] = { 295,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_RemoveField },
[ActRenFie ] = { 296,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_RenameField }, [ActRenFie ] = { 296,-1,TabUnk,ActLstStd ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_RenameField },
@ -1375,7 +1375,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstTch ] = { 679, 2,TabUsr,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeTeachers }, [ActLstTch ] = { 679, 2,TabUsr,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeTeachers },
[ActLstTchAll ] = { 578,-1,TabUnk,ActLstTch ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataTchs }, [ActLstTchAll ] = { 578,-1,TabUnk,ActLstTch ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataTchs },
[ActPrnTchPho ] = { 443,-1,TabUnk,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeTchClassPhotoPrn }, [ActPrnTchPho ] = { 443,-1,TabUnk,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeTchClassPhotoPrn },
[ActDoActOnSevTch ] = {1755,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 }, [Act_DoAct_OnSevTch ] = {1755,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 },
[ActSeeRecSevTch ] = { 22,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsTchsShow }, [ActSeeRecSevTch ] = { 22,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsTchsShow },
[ActPrnRecSevTch ] = { 127,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsTchsPrint }, [ActPrnRecSevTch ] = { 127,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsTchsPrint },
[ActReqMdfOneTch ] = {1416,-1,TabUnk,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemTch }, [ActReqMdfOneTch ] = {1416,-1,TabUnk,ActLstTch ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemTch },
@ -1411,12 +1411,11 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqUnfSevTch ] = {1759,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_ReqUnfollowTchs }, [ActReqUnfSevTch ] = {1759,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_ReqUnfollowTchs },
[ActFolSevTch ] = {1761,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_FollowUsrs }, [ActFolSevTch ] = {1761,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_FollowUsrs },
[ActUnfSevTch ] = {1763,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_UnfollowUsrs }, [ActUnfSevTch ] = {1763,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Fol_UnfollowUsrs },
[ActSeeRecOneTch ] = {1175,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_GetUsrAndShowRecOneTchCrs }, [ActSeeRecOneTch ] = {1175,-1,TabUnk,ActLstTch ,0x3F8,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_GetUsrAndShowRecOneTchCrs },
[ActReqEnrSevNET ] = {1642,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminNonEditingTchs }, [ActReqEnrSevNET ] = {1642,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminNonEditingTchs },
[ActRcvFrmEnrSevNET ] = {1643,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveFormAdminNonEditTchs}, [ActRcvFrmEnrSevNET ] = {1643,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveAdminNonEditTchs },
[ActReqEnrSevTch ] = {1427,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminTchs }, [ActReqEnrSevTch ] = {1427,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqAdminTchs },
[ActRcvFrmEnrSevTch ] = {1429,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveFormAdminTchs }, [ActRcvFrmEnrSevTch ] = {1429,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReceiveAdminTchs },
[ActFrmLogInUsrAgd ] = {1614,-1,TabUnk,ActLstTch , 0,0x001,0x001,0x001,0x001,0x001,0x001,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_PutFormLogInToShowUsrAgenda}, [ActFrmLogInUsrAgd ] = {1614,-1,TabUnk,ActLstTch , 0,0x001,0x001,0x001,0x001,0x001,0x001,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_PutFormLogInToShowUsrAgenda},
[ActLogInUsrAgd ] = {1615,-1,TabUnk,ActLstTch ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ShowOtherAgendaAfterLogIn }, [ActLogInUsrAgd ] = {1615,-1,TabUnk,ActLstTch ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ShowOtherAgendaAfterLogIn },
[ActLogInUsrAgdLan ] = {1616,-1,TabUnk,ActLstTch ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ShowOtherAgendaAfterLogIn }, [ActLogInUsrAgdLan ] = {1616,-1,TabUnk,ActLstTch ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ShowOtherAgendaAfterLogIn },
@ -1432,7 +1431,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstGst ] = { 587,-1,TabUnk,ActLstOth ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeGuests }, [ActLstGst ] = { 587,-1,TabUnk,ActLstOth ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Usr_SeeGuests },
[ActLstGstAll ] = {1189,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataGsts }, [ActLstGstAll ] = {1189,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_ListAllDataGsts },
[ActPrnGstPho ] = {1190,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeGstClassPhotoPrn }, [ActPrnGstPho ] = {1190,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Usr_SeeGstClassPhotoPrn },
[ActDoActOnSevGst ] = {1753,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 }, [Act_DoAct_OnSevGst ] = {1753,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Usr_DoActionOnSeveralUsrs1 ,Usr_DoActionOnSeveralUsrs2 },
[ActSeeRecSevGst ] = {1187,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsGstsShow }, [ActSeeRecSevGst ] = {1187,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Rec_ListRecordsGstsShow },
[ActPrnRecSevGst ] = {1188,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsGstsPrint }, [ActPrnRecSevGst ] = {1188,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_NEW_TAB,NULL ,Rec_ListRecordsGstsPrint },
[ActReqMdfOneOth ] = {1414,-1,TabUnk,ActLstOth ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemOth }, [ActReqMdfOneOth ] = {1414,-1,TabUnk,ActLstOth ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Enr_ReqRegRemOth },
@ -1469,8 +1468,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActPrnLstUsrAtt ] = {1075,-1,TabUnk,ActSeeAllAtt ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Att_PrintUsrsAttendanceCrs }, [ActPrnLstUsrAtt ] = {1075,-1,TabUnk,ActSeeAllAtt ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_NEW_TAB,NULL ,Att_PrintUsrsAttendanceCrs },
[ActFrmNewAtt ] = {1063,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReqCreatOrEditEvent }, [ActFrmNewAtt ] = {1063,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReqCreatOrEditEvent },
[ActEdiOneAtt ] = {1064,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReqCreatOrEditEvent }, [ActEdiOneAtt ] = {1064,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReqCreatOrEditEvent },
[ActNewAtt ] = {1065,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReceiveFormEvent }, [ActNewAtt ] = {1065,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReceiveEvent },
[ActChgAtt ] = {1066,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReceiveFormEvent }, [ActChgAtt ] = {1066,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_ReceiveEvent },
[ActReqRemAtt ] = {1067,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_AskRemEvent }, [ActReqRemAtt ] = {1067,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_AskRemEvent },
[ActRemAtt ] = {1068,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_GetAndRemEvent }, [ActRemAtt ] = {1068,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_GetAndRemEvent },
[ActHidAtt ] = {1069,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_HideEvent }, [ActHidAtt ] = {1069,-1,TabUnk,ActSeeAllAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Att_HideEvent },
@ -1498,8 +1497,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeAnn ] = {1235, 0,TabMsg,ActSeeAnn ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ShowAllAnnouncements }, [ActSeeAnn ] = {1235, 0,TabMsg,ActSeeAnn ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ShowAllAnnouncements },
[ActWriAnn ] = {1237,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ShowFormAnnouncement }, [ActWriAnn ] = {1237,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ShowFormAnnouncement },
[ActNewAnn ] = {1238,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ReceiveAnnouncement }, [ActNewAnn ] = {1238,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_ReceiveAnnouncement },
[ActHidAnn ] = {1470,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Ann_HideActiveAnnouncement ,Ann_ShowAllAnnouncements }, [ActHidAnn ] = {1470,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Ann_HideAnnouncement ,Ann_ShowAllAnnouncements },
[ActUnhAnn ] = {1471,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Ann_RevealHiddenAnnouncement,Ann_ShowAllAnnouncements }, [ActUnhAnn ] = {1471,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,Ann_UnhideAnnouncement ,Ann_ShowAllAnnouncements },
[ActRemAnn ] = {1236,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_RemoveAnnouncement }, [ActRemAnn ] = {1236,-1,TabUnk,ActSeeAnn ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_1ST_TAB,NULL ,Ann_RemoveAnnouncement },
// Notices // Notices
@ -1507,8 +1506,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeOneNot ] = {1164,-1,TabUnk,ActSeeAllNot ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_GetHighLightedNotCod ,Not_ListFullNotices }, [ActSeeOneNot ] = {1164,-1,TabUnk,ActSeeAllNot ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_GetHighLightedNotCod ,Not_ListFullNotices },
[ActWriNot ] = { 59,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Not_ShowFormNotice }, [ActWriNot ] = { 59,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Not_ShowFormNotice },
[ActNewNot ] = { 60,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_ReceiveNotice ,Not_ListFullNotices }, [ActNewNot ] = { 60,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_ReceiveNotice ,Not_ListFullNotices },
[ActHidNot ] = { 763,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_HideActiveNotice ,Not_ListFullNotices }, [ActHidNot ] = { 763,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_HideNotice ,Not_ListFullNotices },
[ActUnhNot ] = { 764,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_RevealHiddenNotice ,Not_ListFullNotices }, [ActUnhNot ] = { 764,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_UnhideNotice ,Not_ListFullNotices },
[ActReqRemNot ] = {1472,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Not_ReqRemNotice }, [ActReqRemNot ] = {1472,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Not_ReqRemNotice },
[ActRemNot ] = { 73,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_RemoveNotice ,Not_ListNoticesAfterRemoval }, [ActRemNot ] = { 73,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Not_RemoveNotice ,Not_ListNoticesAfterRemoval },
@ -1698,8 +1697,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActAnsSvy ] = { 983,-1,TabUnk,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveSurveyAnswers }, [ActAnsSvy ] = { 983,-1,TabUnk,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveSurveyAnswers },
[ActFrmNewSvy ] = { 973,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy }, [ActFrmNewSvy ] = { 973,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy },
[ActEdiOneSvy ] = { 974,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy }, [ActEdiOneSvy ] = { 974,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy },
[ActNewSvy ] = { 968,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveFormSurvey }, [ActNewSvy ] = { 968,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveSurvey },
[ActChgSvy ] = { 975,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveFormSurvey }, [ActChgSvy ] = { 975,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_ReceiveSurvey },
[ActReqRemSvy ] = { 976,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_AskRemSurvey }, [ActReqRemSvy ] = { 976,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_AskRemSurvey },
[ActRemSvy ] = { 969,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_RemoveSurvey }, [ActRemSvy ] = { 969,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_RemoveSurvey },
[ActReqRstSvy ] = { 984,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_AskResetSurvey }, [ActReqRstSvy ] = { 984,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_AskResetSurvey },
@ -1714,9 +1713,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActRemSvyQst ] = { 981,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_RemoveQst }, [ActRemSvyQst ] = { 981,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Svy_RemoveQst },
// Visits // Visits
[ActReqAccGbl ] = { 591, 4,TabAna,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToRecentWeeks,Sta_AskShowGblHits }, [ActReqAccGbl ] = { 591, 4,TabAna,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToRecentWeeks ,Sta_AskShowGblHits },
[ActSeeAccGbl ] = { 79,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Sta_SeeGblAccesses }, [ActSeeAccGbl ] = { 79,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Sta_SeeGblAccesses },
[ActReqAccCrs ] = { 594,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetIniEndDatesToRecentWeeks,Sta_ReqCrsHits }, [ActReqAccCrs ] = { 594,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,Dat_SetDatesToRecentWeeks ,Sta_ReqCrsHits },
[ActSeeAccCrs ] = { 119,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Sta_SeeCrsAccesses }, [ActSeeAccCrs ] = { 119,-1,TabUnk,ActReqAccGbl ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_1ST_TAB,NULL ,Sta_SeeCrsAccesses },
[ActLstClk ] = { 989,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Log_ShowLastClicks }, [ActLstClk ] = { 989,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Log_ShowLastClicks },
[ActRefLstClk ] = { 994,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_AJAX_RF,NULL ,Lay_RefreshLastClicks }, [ActRefLstClk ] = { 994,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_AJAX_RF,NULL ,Lay_RefreshLastClicks },
@ -1747,8 +1746,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeMyAgd ] = {1602, 3,TabPrf,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_GetParsAndShowMyAgenda }, [ActSeeMyAgd ] = {1602, 3,TabPrf,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_GetParsAndShowMyAgenda },
[ActFrmNewEvtMyAgd ] = {1603,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent }, [ActFrmNewEvtMyAgd ] = {1603,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent },
[ActEdiOneEvtMyAgd ] = {1604,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent }, [ActEdiOneEvtMyAgd ] = {1604,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent },
[ActNewEvtMyAgd ] = {1605,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReceiveFormEvent }, [ActNewEvtMyAgd ] = {1605,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReceiveEvent },
[ActChgEvtMyAgd ] = {1606,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReceiveFormEvent }, [ActChgEvtMyAgd ] = {1606,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_ReceiveEvent },
[ActReqRemEvtMyAgd ] = {1607,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_AskRemEvent }, [ActReqRemEvtMyAgd ] = {1607,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_AskRemEvent },
[ActRemEvtMyAgd ] = {1608,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_RemoveEvent }, [ActRemEvtMyAgd ] = {1608,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_RemoveEvent },
[ActHidEvtMyAgd ] = {1612,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_HideEvent }, [ActHidEvtMyAgd ] = {1612,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_1ST_TAB,NULL ,Agd_HideEvent },
@ -2022,7 +2021,7 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActRenFolWrkCrs, // #208 ActRenFolWrkCrs, // #208
ActRemFilWrkCrs, // #209 ActRemFilWrkCrs, // #209
ActRemFolWrkCrs, // #210 ActRemFolWrkCrs, // #210
ActModIteSyl, // #211 ActModIteSyl, // #211
ActUnk, // #212 (obsolete action) ActUnk, // #212 (obsolete action)
ActUnk, // #213 (obsolete action) ActUnk, // #213 (obsolete action)
ActUnk, // #214 (obsolete action) ActUnk, // #214 (obsolete action)
@ -3564,9 +3563,9 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActChgRooMaxUsr, // #1750 ActChgRooMaxUsr, // #1750
ActUnk, // #1751 (obsolete action) ActUnk, // #1751 (obsolete action)
ActChgGrpRoo, // #1752 ActChgGrpRoo, // #1752
ActDoActOnSevGst, // #1753 Act_DoAct_OnSevGst, // #1753
ActDoActOnSevStd, // #1754 Act_DoAct_OnSevStd, // #1754
ActDoActOnSevTch, // #1755 Act_DoAct_OnSevTch, // #1755
ActReqFolSevStd, // #1756 ActReqFolSevStd, // #1756
ActReqFolSevTch, // #1757 ActReqFolSevTch, // #1757
ActReqUnfSevStd, // #1758 ActReqUnfSevStd, // #1758

View File

@ -1298,7 +1298,7 @@ typedef enum
ActLstStd, ActLstStd,
ActLstStdAll, ActLstStdAll,
ActPrnStdPho, ActPrnStdPho,
ActDoActOnSevStd, Act_DoAct_OnSevStd,
ActSeeRecSevStd, ActSeeRecSevStd,
ActPrnRecSevStd, ActPrnRecSevStd,
ActReqMdfOneStd, ActReqMdfOneStd,
@ -1347,7 +1347,7 @@ typedef enum
ActLstTch, ActLstTch,
ActLstTchAll, ActLstTchAll,
ActPrnTchPho, ActPrnTchPho,
ActDoActOnSevTch, Act_DoAct_OnSevTch,
ActSeeRecSevTch, ActSeeRecSevTch,
ActPrnRecSevTch, ActPrnRecSevTch,
ActReqMdfOneTch, ActReqMdfOneTch,
@ -1404,7 +1404,7 @@ typedef enum
ActLstGst, ActLstGst,
ActLstGstAll, ActLstGstAll,
ActPrnGstPho, ActPrnGstPho,
ActDoActOnSevGst, Act_DoAct_OnSevGst,
ActSeeRecSevGst, ActSeeRecSevGst,
ActPrnRecSevGst, ActPrnRecSevGst,
ActReqMdfOneOth, ActReqMdfOneOth,

View File

@ -34,20 +34,6 @@
#include "swad_global.h" #include "swad_global.h"
#include "swad_user_database.h" #include "swad_user_database.h"
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES] =
{
/* Users who can admin */
[Rol_TCH ] = true,
[Rol_DEG_ADM] = true,
[Rol_CTR_ADM] = true,
[Rol_INS_ADM] = true,
[Rol_SYS_ADM] = true,
};
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -66,6 +52,25 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,Hie_Level_t Level); static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,Hie_Level_t Level);
static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat,Hie_Level_t Level); static void Adm_EffectivelyRemAdm (struct Usr_Data *UsrDat,Hie_Level_t Level);
/*****************************************************************************/
/**************** Check if I can admin another user's account ****************/
/*****************************************************************************/
Usr_ICan_t Adm_CheckIfICanAdminOtherUsrs (void)
{
static Usr_ICan_t Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES] =
{
/* Users who can admin */
[Rol_TCH ] = Usr_I_CAN,
[Rol_DEG_ADM] = Usr_I_CAN,
[Rol_CTR_ADM] = Usr_I_CAN,
[Rol_INS_ADM] = Usr_I_CAN,
[Rol_SYS_ADM] = Usr_I_CAN,
};
return Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/ /*****************************************************************************/
/**** Ask if really wanted to add an administrator to current institution ****/ /**** Ask if really wanted to add an administrator to current institution ****/
/*****************************************************************************/ /*****************************************************************************/
@ -75,7 +80,7 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X; extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X;
extern const char *Txt_Register_user_IN_A_COURSE_OR_DEGREE; extern const char *Txt_Register_user_IN_A_COURSE_OR_DEGREE;
static const Act_Action_t Enr_ActNewAdm[Hie_NUM_LEVELS] = static Act_Action_t Enr_ActNewAdm[Hie_NUM_LEVELS] =
{ {
[Hie_UNK] = ActUnk, [Hie_UNK] = ActUnk,
[Hie_SYS] = ActUnk, [Hie_SYS] = ActUnk,
@ -85,7 +90,7 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
[Hie_DEG] = ActNewAdmDeg, [Hie_DEG] = ActNewAdmDeg,
[Hie_CRS] = ActUnk, [Hie_CRS] = ActUnk,
}; };
bool ICanRegister; Usr_ICan_t ICanRegister;
if (Gbl.Hierarchy.Node[Level].HieCod > 0) if (Gbl.Hierarchy.Node[Level].HieCod > 0)
{ {
@ -95,8 +100,9 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
/* Check if I am allowed to register user as administrator in institution/center/degree */ /* Check if I am allowed to register user as administrator in institution/center/degree */
ICanRegister = ((Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) || ICanRegister = ((Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)); (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
if (ICanRegister) Usr_I_CAN_NOT;
if (ICanRegister == Usr_I_CAN)
{ {
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree
{ {
@ -180,7 +186,7 @@ void Adm_GetAdmsLst (Hie_Level_t Level)
static void Adm_AddAdm (Hie_Level_t Level) static void Adm_AddAdm (Hie_Level_t Level)
{ {
bool ICanRegister; Usr_ICan_t ICanRegister;
if (Gbl.Hierarchy.Node[Level].HieCod > 0) if (Gbl.Hierarchy.Node[Level].HieCod > 0)
{ {
@ -190,8 +196,9 @@ static void Adm_AddAdm (Hie_Level_t Level)
/* Check if I am allowed to register user as administrator in institution/center/degree */ /* Check if I am allowed to register user as administrator in institution/center/degree */
ICanRegister = ((Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) || ICanRegister = ((Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)); (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
if (ICanRegister) Usr_I_CAN_NOT;
if (ICanRegister == Usr_I_CAN)
{ {
/***** Register administrator in current institution/center/degree in database *****/ /***** Register administrator in current institution/center/degree in database *****/
Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level); Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level);
@ -293,7 +300,7 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
{ {
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y; extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
bool ICanRemove; Usr_ICan_t ICanRemove;
if (Gbl.Hierarchy.Node[Level].HieCod > 0) if (Gbl.Hierarchy.Node[Level].HieCod > 0)
{ {
@ -305,8 +312,9 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
ICanRemove = (MeOrOther == Usr_ME || ICanRemove = (MeOrOther == Usr_ME ||
(Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) || (Level == Hie_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)); (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
if (ICanRemove) Usr_I_CAN_NOT;
if (ICanRemove == Usr_I_CAN)
{ {
/* Check if the other user is an admin of the current institution/center/degree */ /* Check if the other user is an admin of the current institution/center/degree */
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level))
@ -344,7 +352,7 @@ static void Adm_AskIfRemAdm (Usr_MeOrOther_t MeOrOther,Hie_Level_t Level)
extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X; extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X;
extern const char *Txt_Remove_me_as_an_administrator; extern const char *Txt_Remove_me_as_an_administrator;
extern const char *Txt_Remove_USER_as_an_administrator; extern const char *Txt_Remove_USER_as_an_administrator;
static const Act_Action_t ActRemAdm[Hie_NUM_LEVELS] = static Act_Action_t ActRemAdm[Hie_NUM_LEVELS] =
{ {
[Hie_UNK] = ActUnk, [Hie_UNK] = ActUnk,
[Hie_SYS] = ActUnk, [Hie_SYS] = ActUnk,

View File

@ -35,6 +35,8 @@
/****************************** Public prototypes ****************************/ /****************************** Public prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
Usr_ICan_t Adm_CheckIfICanAdminOtherUsrs (void);
void Adm_ReqAddAdm (Hie_Level_t Level); void Adm_ReqAddAdm (Hie_Level_t Level);
void Adm_AddAdmToIns (void); void Adm_AddAdmToIns (void);

View File

@ -121,6 +121,29 @@ static void Agd_FreeListEvents (struct Agd_Agenda *Agenda);
static void Agd_HideUnhideEvent (HidVis_HiddenOrVisible_t HiddenOrVisible); static void Agd_HideUnhideEvent (HidVis_HiddenOrVisible_t HiddenOrVisible);
/*****************************************************************************/
/******************* Check if I can view a user's agenda *********************/
/*****************************************************************************/
Usr_ICan_t Agd_CheckIfICanViewUsrAgenda (struct Usr_Data *UsrDat)
{
/***** 1. Fast check: Am I logged? *****/
if (!Gbl.Usrs.Me.Logged)
return Usr_I_CAN_NOT;
/***** 2. Fast check: It's me? *****/
if (Usr_ItsMe (UsrDat->UsrCod) == Usr_ME)
return Usr_I_CAN;
/***** 3. Fast check: Am I logged as system admin? *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)
return Usr_I_CAN;
/***** 4. Slow check: Get if user shares any course with me from database *****/
return Enr_CheckIfUsrSharesAnyOfMyCrs (UsrDat) ? Usr_I_CAN :
Usr_I_CAN_NOT;
}
/*****************************************************************************/ /*****************************************************************************/
/*************************** Reset agenda context ****************************/ /*************************** Reset agenda context ****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -386,7 +409,7 @@ void Agd_ShowUsrAgenda (void)
/***** Get user *****/ /***** Get user *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
if (Usr_CheckIfICanViewUsrAgenda (&Gbl.Usrs.Other.UsrDat)) if (Agd_CheckIfICanViewUsrAgenda (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
Error = false; Error = false;
@ -423,7 +446,7 @@ void Agd_ShowUsrAgenda (void)
void Agd_ShowOtherAgendaAfterLogIn (void) void Agd_ShowOtherAgendaAfterLogIn (void)
{ {
extern const char *Hlp_PROFILE_Agenda_public_agenda; extern const char *Hlp_PROFILE_Agenda_public_agenda;
extern const unsigned Txt_Current_CGI_SWAD_Language; extern unsigned Txt_Current_CGI_SWAD_Language;
extern const char *Txt_Public_agenda_USER; extern const char *Txt_Public_agenda_USER;
extern const char *Txt_Switching_to_LANGUAGE[1 + Lan_NUM_LANGUAGES]; extern const char *Txt_Switching_to_LANGUAGE[1 + Lan_NUM_LANGUAGES];
struct Agd_Agenda Agenda; struct Agd_Agenda Agenda;
@ -695,8 +718,7 @@ static void Agd_PutIconToCreateNewEvent (void *Agenda)
static void Agd_PutIconToViewEditMyFullAgenda (void *EncryptedUsrCod) static void Agd_PutIconToViewEditMyFullAgenda (void *EncryptedUsrCod)
{ {
Ico_PutContextualIconToEdit (ActSeeMyAgd,NULL, Ico_PutContextualIconToEdit (ActSeeMyAgd,NULL,NULL,EncryptedUsrCod);
NULL,EncryptedUsrCod);
} }
static void Agd_PutIconToShowQR (void) static void Agd_PutIconToShowQR (void)
@ -714,19 +736,19 @@ static void Agd_PutIconToShowQR (void)
static void Agd_PutIconsOtherPublicAgenda (void *EncryptedUsrCod) static void Agd_PutIconsOtherPublicAgenda (void *EncryptedUsrCod)
{ {
/***** Button to view user's public profile *****/ /***** Button to view user's public profile *****/
if (Pri_ShowingIsAllowed (Gbl.Usrs.Other.UsrDat.BaPrfVisibility, if (Pri_CheckIfICanView (Gbl.Usrs.Other.UsrDat.BaPrfVisibility,
&Gbl.Usrs.Other.UsrDat)) &Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (ActSeeOthPubPrf,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeOthPubPrf,NULL,
Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod, Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod,
"user.svg",Ico_BLACK); "user.svg",Ico_BLACK);
/***** Button to view user's record card *****/ /***** Button to view user's record card *****/
if (Usr_CheckIfICanViewRecordStd (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanViewRecordStd (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
/* View student's records: common record card and course record card */ /* View student's records: common record card and course record card */
Lay_PutContextualLinkOnlyIcon (ActSeeRecOneStd,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeRecOneStd,NULL,
Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod, Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod,
"address-card.svg",Ico_BLACK); "address-card.svg",Ico_BLACK);
else if (Usr_CheckIfICanViewRecordTch (&Gbl.Usrs.Other.UsrDat)) else if (Usr_CheckIfICanViewRecordTch (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (ActSeeRecOneTch,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeRecOneTch,NULL,
Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod, Usr_PutParOtherUsrCodEncrypted,EncryptedUsrCod,
"address-card.svg",Ico_BLACK); "address-card.svg",Ico_BLACK);
@ -855,7 +877,7 @@ static void Agd_PutFormsToRemEditOneEvent (struct Agd_Agenda *Agenda,
struct Agd_Event *AgdEvent, struct Agd_Event *AgdEvent,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhEvtMyAgd, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidEvtMyAgd, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidEvtMyAgd, // Visible ==> action to hide
@ -1449,7 +1471,7 @@ void Agd_ReqCreatOrEditEvent (void)
/********************* Receive form to create a new event ********************/ /********************* Receive form to create a new event ********************/
/*****************************************************************************/ /*****************************************************************************/
void Agd_ReceiveFormEvent (void) void Agd_ReceiveEvent (void)
{ {
extern const char *Txt_Created_new_event_X; extern const char *Txt_Created_new_event_X;
extern const char *Txt_The_event_has_been_modified; extern const char *Txt_The_event_has_been_modified;

View File

@ -101,6 +101,8 @@ typedef enum
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
Usr_ICan_t Agd_CheckIfICanViewUsrAgenda (struct Usr_Data *UsrDat);
void Agd_PutFormLogInToShowUsrAgenda (void); void Agd_PutFormLogInToShowUsrAgenda (void);
void Agd_PutParAgd (void); void Agd_PutParAgd (void);
@ -127,7 +129,7 @@ void Agd_UnhideEvent (void);
void Agd_MakeEventPrivate (void); void Agd_MakeEventPrivate (void);
void Agd_MakeEventPublic (void); void Agd_MakeEventPublic (void);
void Agd_ReceiveFormEvent (void); void Agd_ReceiveEvent (void);
void Agd_PrintAgdQRCode (void); void Agd_PrintAgdQRCode (void);

View File

@ -34,6 +34,7 @@
#include "swad_action_list.h" #include "swad_action_list.h"
#include "swad_alert.h" #include "swad_alert.h"
#include "swad_box.h"
#include "swad_error.h" #include "swad_error.h"
#include "swad_form.h" #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
@ -398,15 +399,15 @@ static void Ale_ShowFixAlertAndButtonBegin (Ale_AlertType_t AlertType,const char
{ {
extern const char *Txt_Close; extern const char *Txt_Close;
char IdAlert[Frm_MAX_BYTES_ID + 1]; char IdAlert[Frm_MAX_BYTES_ID + 1];
static const bool AlertClosable[Ale_NUM_ALERT_TYPES] = static Box_Closable_t AlertClosable[Ale_NUM_ALERT_TYPES] =
{ {
[Ale_NONE ] = false, [Ale_NONE ] = Box_NOT_CLOSABLE,
[Ale_CLIPBOARD] = true, [Ale_CLIPBOARD] = Box_CLOSABLE,
[Ale_INFO ] = true, [Ale_INFO ] = Box_CLOSABLE,
[Ale_SUCCESS ] = true, [Ale_SUCCESS ] = Box_CLOSABLE,
[Ale_QUESTION ] = true, [Ale_QUESTION ] = Box_CLOSABLE,
[Ale_WARNING ] = true, [Ale_WARNING ] = Box_CLOSABLE,
[Ale_ERROR ] = true, [Ale_ERROR ] = Box_CLOSABLE,
}; };
static const char *Ale_AlertIcons[Ale_NUM_ALERT_TYPES] = static const char *Ale_AlertIcons[Ale_NUM_ALERT_TYPES] =
{ {
@ -424,38 +425,49 @@ static void Ale_ShowFixAlertAndButtonBegin (Ale_AlertType_t AlertType,const char
Lay_WriteStartOfPage (); Lay_WriteStartOfPage ();
/***** Begin container *****/ /***** Begin container *****/
if (AlertClosable[AlertType]) switch (AlertClosable[AlertType])
{ {
/* Create unique id for alert */ case Box_NOT_CLOSABLE:
Frm_SetUniqueId (IdAlert); HTM_DIV_Begin ("class=\"CM\"");
HTM_DIV_Begin ("id=\"%s\" class=\"CM\"",IdAlert); break;
case Box_CLOSABLE:
/* Create unique id for alert */
Frm_SetUniqueId (IdAlert);
HTM_DIV_Begin ("id=\"%s\" class=\"CM\"",IdAlert);
break;
} }
else
HTM_DIV_Begin ("class=\"CM\"");
/***** Begin box *****/ /***** Begin box *****/
HTM_DIV_Begin ("class=\"ALERT ALERT_BG_%s\"",The_GetSuffix ()); HTM_DIV_Begin ("class=\"ALERT ALERT_BG_%s\"",The_GetSuffix ());
/***** Icon to close the alert *****/ /***** Icon to close the alert *****/
if (AlertClosable[AlertType]) switch (AlertClosable[AlertType])
{ {
HTM_DIV_Begin ("class=\"ALERT_CLOSE\""); case Box_NOT_CLOSABLE:
HTM_A_Begin ("href=\"\" onclick=\"toggleDisplay('%s');return false;\" /", break;
IdAlert); case Box_CLOSABLE:
Ico_PutIcon ("times.svg",Ico_BLACK,Txt_Close,"ICO16x16"); HTM_DIV_Begin ("class=\"ALERT_CLOSE\"");
HTM_A_End (); HTM_A_Begin ("href=\"\" onclick=\"toggleDisplay('%s');return false;\" /",
HTM_DIV_End (); IdAlert);
Ico_PutIcon ("times.svg",Ico_BLACK,Txt_Close,"ICO16x16");
HTM_A_End ();
HTM_DIV_End ();
break;
} }
/***** Write message *****/ /***** Write message *****/
if (AlertType == Ale_NONE) switch (AlertType)
HTM_DIV_Begin ("class=\"ALERT_TXT ALERT_TXT_%s\"", {
The_GetSuffix ()); case Ale_NONE:
else HTM_DIV_Begin ("class=\"ALERT_TXT ALERT_TXT_%s\"",The_GetSuffix ());
HTM_DIV_Begin ("class=\"ALERT_TXT ALERT_TXT_%s\"" break;
" style=\"background-image:url('%s/%s');\"", default:
The_GetSuffix (), HTM_DIV_Begin ("class=\"ALERT_TXT ALERT_TXT_%s\""
Cfg_URL_ICON_PUBLIC,Ale_AlertIcons[AlertType]); " style=\"background-image:url('%s/%s');\"",
The_GetSuffix (),
Cfg_URL_ICON_PUBLIC,Ale_AlertIcons[AlertType]);
break;
}
HTM_Txt (Txt); HTM_Txt (Txt);
HTM_DIV_End (); HTM_DIV_End ();
} }

View File

@ -234,7 +234,7 @@ static void Ann_DrawAnAnnouncement (struct Ann_Announcement *Announcement,
[Ann_ACTIVE_ANNOUNCEMENT ] = "NOTICE_BOX NOTICE_BOX_WIDE", [Ann_ACTIVE_ANNOUNCEMENT ] = "NOTICE_BOX NOTICE_BOX_WIDE",
[Ann_OBSOLETE_ANNOUNCEMENT] = "NOTICE_BOX NOTICE_BOX_WIDE LIGHT", [Ann_OBSOLETE_ANNOUNCEMENT] = "NOTICE_BOX NOTICE_BOX_WIDE LIGHT",
}; };
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhAnn, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhAnn, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidAnn, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidAnn, // Visible ==> action to hide
@ -429,7 +429,7 @@ void Ann_ReceiveAnnouncement (void)
/*********** Mark as hidden a global announcement that was active ************/ /*********** Mark as hidden a global announcement that was active ************/
/*****************************************************************************/ /*****************************************************************************/
void Ann_HideActiveAnnouncement (void) void Ann_HideAnnouncement (void)
{ {
long AnnCod; long AnnCod;
@ -444,7 +444,7 @@ void Ann_HideActiveAnnouncement (void)
/*********** Mark as active a global announcement that was hidden ************/ /*********** Mark as active a global announcement that was hidden ************/
/*****************************************************************************/ /*****************************************************************************/
void Ann_RevealHiddenAnnouncement (void) void Ann_UnhideAnnouncement (void)
{ {
long AnnCod; long AnnCod;

View File

@ -58,8 +58,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void);
void Ann_ShowFormAnnouncement (void); void Ann_ShowFormAnnouncement (void);
void Ann_ReceiveAnnouncement (void); void Ann_ReceiveAnnouncement (void);
void Ann_HideActiveAnnouncement (void); void Ann_HideAnnouncement (void);
void Ann_RevealHiddenAnnouncement (void); void Ann_UnhideAnnouncement (void);
void Ann_RemoveAnnouncement (void); void Ann_RemoveAnnouncement (void);
void Ann_MarkAnnouncementAsSeen (void); void Ann_MarkAnnouncementAsSeen (void);

View File

@ -56,6 +56,16 @@
#include "swad_setting.h" #include "swad_setting.h"
#include "swad_string.h" #include "swad_string.h"
/*****************************************************************************/
/******************************* Private types *******************************/
/*****************************************************************************/
typedef enum
{
Asg_ONE_ASSIGMENT,
Asg_MULTIPLE_ASSIGMENTS
} Asg_OneOrMultiple_t;
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -67,14 +77,15 @@ extern struct Globals Gbl;
/*****************************************************************************/ /*****************************************************************************/
static void Asg_PutHead (struct Asg_Assignments *Assignments, static void Asg_PutHead (struct Asg_Assignments *Assignments,
bool OnlyOneAssignment,Vie_ViewType_t ViewType); Asg_OneOrMultiple_t OneOrMultiple,
static bool Asg_CheckIfICanCreateAssignments (void); Vie_ViewType_t ViewType);
static Usr_ICan_t Asg_CheckIfICanCreateAssignments (void);
static void Asg_PutIconsListAssignments (void *Assignments); static void Asg_PutIconsListAssignments (void *Assignments);
static void Asg_PutIconToCreateNewAsg (void *Assignments); static void Asg_PutIconToCreateNewAsg (void *Assignments);
static void Asg_ParsWhichGroupsToShow (void *Assignments); static void Asg_ParsWhichGroupsToShow (void *Assignments);
static void Asg_PutIconsOneAsg (void *Assignments); static void Asg_PutIconsOneAsg (void *Assignments);
static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
bool OnlyOneAssignment, Asg_OneOrMultiple_t OneOrMultiple,
Vie_ViewType_t ViewType); Vie_ViewType_t ViewType);
static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg); static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg);
static void Asg_WriteAssignmentFolder (struct Asg_Assignment *Asg, static void Asg_WriteAssignmentFolder (struct Asg_Assignment *Asg,
@ -176,9 +187,7 @@ void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments)
HTM_TABLE_Begin ("TBL_SCROLL"); HTM_TABLE_Begin ("TBL_SCROLL");
/***** Table head *****/ /***** Table head *****/
Asg_PutHead (Assignments, Asg_PutHead (Assignments,Asg_MULTIPLE_ASSIGMENTS,Vie_VIEW);
false, // Not only this assignment in table
Vie_VIEW); // Not print view
/***** Write all assignments *****/ /***** Write all assignments *****/
for (NumAsg = Pagination.FirstItemVisible, The_ResetRowColor (); for (NumAsg = Pagination.FirstItemVisible, The_ResetRowColor ();
@ -187,9 +196,7 @@ void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments)
{ {
Assignments->Asg.AsgCod = Assignments->LstAsgCods[NumAsg - 1]; Assignments->Asg.AsgCod = Assignments->LstAsgCods[NumAsg - 1];
Asg_GetAssignmentDataByCod (&Assignments->Asg); Asg_GetAssignmentDataByCod (&Assignments->Asg);
Asg_ShowAssignmentRow (Assignments, Asg_ShowAssignmentRow (Assignments,Asg_MULTIPLE_ASSIGMENTS,Vie_VIEW);
false, // Not only this assignment in table
Vie_VIEW); // Not print view
} }
/***** End table *****/ /***** End table *****/
@ -214,7 +221,8 @@ void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments)
/*****************************************************************************/ /*****************************************************************************/
static void Asg_PutHead (struct Asg_Assignments *Assignments, static void Asg_PutHead (struct Asg_Assignments *Assignments,
bool OnlyOneAssignment,Vie_ViewType_t ViewType) Asg_OneOrMultiple_t OneOrMultiple,
Vie_ViewType_t ViewType)
{ {
extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME]; extern const char *Txt_START_END_TIME_HELP[Dat_NUM_START_END_TIME];
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
@ -225,7 +233,7 @@ static void Asg_PutHead (struct Asg_Assignments *Assignments,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
if (!OnlyOneAssignment) if (OneOrMultiple == Asg_MULTIPLE_ASSIGMENTS)
HTM_TH_Span (NULL,HTM_HEAD_CENTER,1,1,"CONTEXT_COL"); // Column for contextual icons HTM_TH_Span (NULL,HTM_HEAD_CENTER,1,1,"CONTEXT_COL"); // Column for contextual icons
for (Order = (Dat_StartEndTime_t) 0; for (Order = (Dat_StartEndTime_t) 0;
@ -279,10 +287,11 @@ static void Asg_PutHead (struct Asg_Assignments *Assignments,
/******************** Check if I can create assignments **********************/ /******************** Check if I can create assignments **********************/
/*****************************************************************************/ /*****************************************************************************/
static bool Asg_CheckIfICanCreateAssignments (void) static Usr_ICan_t Asg_CheckIfICanCreateAssignments (void)
{ {
return Gbl.Usrs.Me.Role.Logged == Rol_TCH || return (Gbl.Usrs.Me.Role.Logged == Rol_TCH ||
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM; Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -294,11 +303,11 @@ static void Asg_PutIconsListAssignments (void *Assignments)
/***** Put icon to create a new assignment *****/ /***** Put icon to create a new assignment *****/
if (Assignments) if (Assignments)
{ {
if (Asg_CheckIfICanCreateAssignments ()) if (Asg_CheckIfICanCreateAssignments () == Usr_I_CAN)
Asg_PutIconToCreateNewAsg (Assignments); Asg_PutIconToCreateNewAsg (Assignments);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
{ {
((struct Asg_Assignments *) Assignments)->Asg.AsgCod = -1L; ((struct Asg_Assignments *) Assignments)->Asg.AsgCod = -1L;
Ico_PutContextualIconToGetLink (ActReqLnkAsg,NULL, Ico_PutContextualIconToGetLink (ActReqLnkAsg,NULL,
@ -393,14 +402,10 @@ void Asg_PrintOneAssignment (void)
HTM_TABLE_BeginWideMarginPadding (2); HTM_TABLE_BeginWideMarginPadding (2);
/***** Table head *****/ /***** Table head *****/
Asg_PutHead (&Assignments, Asg_PutHead (&Assignments,Asg_ONE_ASSIGMENT,Vie_PRINT);
true, // Only this assignment in table
Vie_PRINT); // Print view
/***** Write assignment *****/ /***** Write assignment *****/
Asg_ShowAssignmentRow (&Assignments, Asg_ShowAssignmentRow (&Assignments,Asg_ONE_ASSIGMENT,Vie_PRINT);
true, // Only this assignment in table
Vie_PRINT); // Print view
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -425,14 +430,10 @@ void Asg_ShowOneAssignmentInBox (struct Asg_Assignments *Assignments)
HTM_TABLE_Begin ("TBL_SCROLL"); HTM_TABLE_Begin ("TBL_SCROLL");
/***** Table head *****/ /***** Table head *****/
Asg_PutHead (Assignments, Asg_PutHead (Assignments,Asg_ONE_ASSIGMENT,Vie_VIEW);
true, // Only this assignment in table
Vie_VIEW); // Not print view
/***** Write assignment *****/ /***** Write assignment *****/
Asg_ShowAssignmentRow (Assignments, Asg_ShowAssignmentRow (Assignments,Asg_ONE_ASSIGMENT,Vie_VIEW);
true, // Only this assignment in table
Vie_VIEW); // Not print view
/***** End table *****/ /***** End table *****/
HTM_TABLE_End (); HTM_TABLE_End ();
@ -467,7 +468,7 @@ static void Asg_PutIconsOneAsg (void *Assignments)
/*****************************************************************************/ /*****************************************************************************/
static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments, static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
bool OnlyOneAssignment, Asg_OneOrMultiple_t OneOrMultiple,
Vie_ViewType_t ViewType) Vie_ViewType_t ViewType)
{ {
extern const char *Txt_Actions[ActLst_NUM_ACTIONS]; extern const char *Txt_Actions[ActLst_NUM_ACTIONS];
@ -488,7 +489,7 @@ static void Asg_ShowAssignmentRow (struct Asg_Assignments *Assignments,
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Forms to remove/edit this assignment */ /* Forms to remove/edit this assignment */
if (!OnlyOneAssignment) if (OneOrMultiple == Asg_MULTIPLE_ASSIGMENTS)
{ {
HTM_TD_Begin ("rowspan=\"2\" class=\"CONTEXT_COL %s\"", HTM_TD_Begin ("rowspan=\"2\" class=\"CONTEXT_COL %s\"",
The_GetColorRows ()); The_GetColorRows ());
@ -744,7 +745,7 @@ Dat_StartEndTime_t Asg_GetParAsgOrder (void)
static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments, static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhAsg, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhAsg, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidAsg, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidAsg, // Visible ==> action to hide
@ -768,7 +769,7 @@ static void Asg_PutIconsToRemEditOneAsg (struct Asg_Assignments *Assignments,
Asg_PutPars,Assignments); Asg_PutPars,Assignments);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkAsg,NULL, Ico_PutContextualIconToGetLink (ActReqLnkAsg,NULL,
Asg_PutPars,Assignments); Asg_PutPars,Assignments);
/* falls through */ /* falls through */
@ -1357,7 +1358,7 @@ static void Asg_ShowLstGrpsToEditAssignment (long AsgCod)
/****************** Receive form to create a new assignment ******************/ /****************** Receive form to create a new assignment ******************/
/*****************************************************************************/ /*****************************************************************************/
void Asg_ReceiveFormAssignment (void) void Asg_ReceiveAssignment (void)
{ {
extern const char *Txt_Already_existed_an_assignment_with_the_title_X; extern const char *Txt_Already_existed_an_assignment_with_the_title_X;
extern const char *Txt_Already_existed_an_assignment_with_the_folder_X; extern const char *Txt_Already_existed_an_assignment_with_the_folder_X;
@ -1640,7 +1641,7 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
case Rol_TCH: case Rol_TCH:
// Students and teachers can do assignments depending on groups // Students and teachers can do assignments depending on groups
/***** Get if I can do an assignment from database *****/ /***** Get if I can do an assignment from database *****/
return Asg_DB_CheckIfICanDoAssignment (AsgCod); return (Asg_DB_CheckIfICanDoAssignment (AsgCod) == Usr_I_CAN);
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return true;
default: default:
@ -1703,31 +1704,32 @@ void Asg_WriteDatesAssignment (const struct Asg_Assignment *Asg)
/* Check if I have permission to create a file or folder into an assignment **/ /* Check if I have permission to create a file or folder into an assignment **/
/*****************************************************************************/ /*****************************************************************************/
bool Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg) Usr_ICan_t Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg)
{ {
/***** Trivial check 1: assignment is valid *****/ /***** Trivial check 1: assignment is valid *****/
if (Asg->AsgCod <= 0) if (Asg->AsgCod <= 0)
return false; return Usr_I_CAN_NOT;
/***** Check 2: Do not create anything in hidden assigments *****/ /***** Check 2: Do not create anything in hidden assigments *****/
if (Asg->HiddenOrVisible == HidVis_HIDDEN) if (Asg->HiddenOrVisible == HidVis_HIDDEN)
return false; return Usr_I_CAN_NOT;
/***** Check 3: If I do not belong to course / groups of this assignment, /***** Check 3: If I do not belong to course / groups of this assignment,
I can not create anything inside this assignment *****/ I can not create anything inside this assignment *****/
if (!Asg->IBelongToCrsOrGrps) if (!Asg->IBelongToCrsOrGrps)
return false; return Usr_I_CAN_NOT;
/***** Check 4: Depending on my role in this course... *****/ /***** Check 4: Depending on my role in this course... *****/
switch (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs) switch (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs)
{ {
case Rol_STD: // Students... case Rol_STD: // Students...
case Rol_NET: // ...and non-editing teachers... case Rol_NET: // ...and non-editing teachers...
return Asg->Open; // ...can create inside open assignments return Asg->Open ? Usr_I_CAN : // ...can create inside open assignments
case Rol_TCH: // Teachers... Usr_I_CAN_NOT;
return true; // ...can create inside open or closed assignments case Rol_TCH: // Teachers...
return Usr_I_CAN; // ...can create inside open or closed assignments
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }

View File

@ -102,11 +102,11 @@ void Asg_ReqRemAssignment (void);
void Asg_RemoveAssignment (void); void Asg_RemoveAssignment (void);
void Asg_HideAssignment (void); void Asg_HideAssignment (void);
void Asg_UnhideAssignment (void); void Asg_UnhideAssignment (void);
void Asg_ReceiveFormAssignment (void); void Asg_ReceiveAssignment (void);
void Asg_RemoveCrsAssignments (long CrsCod); void Asg_RemoveCrsAssignments (long CrsCod);
void Asg_WriteDatesAssignment (const struct Asg_Assignment *Asg); void Asg_WriteDatesAssignment (const struct Asg_Assignment *Asg);
bool Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg); Usr_ICan_t Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg);
void Asg_SetFolder (struct Asg_Assignment *Asg,unsigned Level); void Asg_SetFolder (struct Asg_Assignment *Asg,unsigned Level);
unsigned Asg_GetNumAssignments (Hie_Level_t Level,unsigned *NumNotif); unsigned Asg_GetNumAssignments (Hie_Level_t Level,unsigned *NumNotif);

View File

@ -331,7 +331,7 @@ void Asg_DB_RemoveAssignment (long AsgCod)
/********************* Check if I can do an assignment ***********************/ /********************* Check if I can do an assignment ***********************/
/*****************************************************************************/ /*****************************************************************************/
bool Asg_DB_CheckIfICanDoAssignment (long AsgCod) Usr_ICan_t Asg_DB_CheckIfICanDoAssignment (long AsgCod)
{ {
// Students and teachers can do assignments depending on groups // Students and teachers can do assignments depending on groups
return return
@ -355,7 +355,8 @@ bool Asg_DB_CheckIfICanDoAssignment (long AsgCod)
" AND asg_groups.GrpCod=grp_users.GrpCod)" " AND asg_groups.GrpCod=grp_users.GrpCod)"
"))", "))",
AsgCod, AsgCod,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -59,7 +59,7 @@ void Asg_DB_HideOrUnhideAssignment (long AsgCod,
void Asg_DB_RemoveAssignment (long AsgCod); void Asg_DB_RemoveAssignment (long AsgCod);
bool Asg_DB_CheckIfICanDoAssignment (long AsgCod); Usr_ICan_t Asg_DB_CheckIfICanDoAssignment (long AsgCod);
unsigned Asg_DB_GetGrps (MYSQL_RES **mysql_res,long AsgCod); unsigned Asg_DB_GetGrps (MYSQL_RES **mysql_res,long AsgCod);
void Asg_DB_CreateGroup (long AsgCod,long GrpCod); void Asg_DB_CreateGroup (long AsgCod,long GrpCod);

View File

@ -128,7 +128,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
static void Att_PutLinkEvent (struct Att_Event *Event, static void Att_PutLinkEvent (struct Att_Event *Event,
const char *Title,const char *Txt); const char *Title,const char *Txt);
static unsigned Att_GetNumUsrsFromAListWhoAreInEvent (long AttCod, static unsigned Att_GetNumUsrsFromAListWhoAreInEvent (long AttCod,
long LstSelectedUsrCods[], long *LstSelectedUsrCods,
unsigned NumUsrsInList); unsigned NumUsrsInList);
static bool Att_CheckIfUsrIsPresentInEvent (long AttCod,long UsrCod); static bool Att_CheckIfUsrIsPresentInEvent (long AttCod,long UsrCod);
static bool Att_CheckIfUsrIsPresentInEventAndGetComments (long AttCod,long UsrCod, static bool Att_CheckIfUsrIsPresentInEventAndGetComments (long AttCod,long UsrCod,
@ -338,14 +338,15 @@ static void Att_ParsWhichGroupsToShow (void *Events)
static void Att_PutIconsInListOfEvents (void *Events) static void Att_PutIconsInListOfEvents (void *Events)
{ {
bool ICanEdit; Usr_ICan_t ICanEdit;
if (Events) if (Events)
{ {
/***** Put icon to create a new attendance event *****/ /***** Put icon to create a new attendance event *****/
ICanEdit = (Gbl.Usrs.Me.Role.Logged == Rol_TCH || ICanEdit = (Gbl.Usrs.Me.Role.Logged == Rol_TCH ||
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM); Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN :
if (ICanEdit) Usr_I_CAN_NOT;
if (ICanEdit == Usr_I_CAN)
Att_PutIconToCreateNewEvent ((struct Att_Events *) Events); Att_PutIconToCreateNewEvent ((struct Att_Events *) Events);
/***** Put icon to show attendance list *****/ /***** Put icon to show attendance list *****/
@ -371,7 +372,7 @@ static void Att_PutIconsInListOfEvents (void *Events)
Usr_PutParMyUsrCodEncrypted,Gbl.Usrs.Me.UsrDat.EnUsrCod); Usr_PutParMyUsrCodEncrypted,Gbl.Usrs.Me.UsrDat.EnUsrCod);
/***** Put icon to get resource link *****/ /***** Put icon to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkAtt,NULL, Ico_PutContextualIconToGetLink (ActReqLnkAtt,NULL,
Att_PutPars,Events); Att_PutPars,Events);
} }
@ -573,13 +574,13 @@ static Dat_StartEndTime_t Att_GetParAttOrder (void)
static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events, static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhAtt, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhAtt, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidAtt, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidAtt, // Visible ==> action to hide
}; };
if (Att_CheckIfICanEditEvents ()) if (Att_CheckIfICanEditEvents () == Usr_I_CAN)
{ {
/***** Icon to remove attendance event *****/ /***** Icon to remove attendance event *****/
Ico_PutContextualIconToRemove (ActReqRemAtt,NULL, Ico_PutContextualIconToRemove (ActReqRemAtt,NULL,
@ -591,27 +592,24 @@ static void Att_PutFormsToRemEditOneEvent (struct Att_Events *Events,
Events->Event.HiddenOrVisible); Events->Event.HiddenOrVisible);
/***** Icon to edit attendance event *****/ /***** Icon to edit attendance event *****/
Ico_PutContextualIconToEdit (ActEdiOneAtt,NULL, Ico_PutContextualIconToEdit (ActEdiOneAtt,NULL,Att_PutPars,Events);
Att_PutPars,Events);
} }
/***** Icon to get resource link *****/ /***** Icon to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkAtt,NULL, Ico_PutContextualIconToGetLink (ActReqLnkAtt,NULL,Att_PutPars,Events);
Att_PutPars,Events);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************* Check if I can edit calls for exams *********************/ /******************* Check if I can edit calls for exams *********************/
/*****************************************************************************/ /*****************************************************************************/
bool Att_CheckIfICanEditEvents (void) Usr_ICan_t Att_CheckIfICanEditEvents (void)
{ {
static const bool ICanEditAttEvents[Rol_NUM_ROLES] = static Usr_ICan_t ICanEditAttEvents[Rol_NUM_ROLES] =
{ {
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanEditAttEvents[Gbl.Usrs.Me.Role.Logged]; return ICanEditAttEvents[Gbl.Usrs.Me.Role.Logged];
@ -1132,7 +1130,7 @@ static void Att_ShowLstGrpsToEditEvent (long AttCod)
/*************** Receive form to create a new attendance event ***************/ /*************** Receive form to create a new attendance event ***************/
/*****************************************************************************/ /*****************************************************************************/
void Att_ReceiveFormEvent (void) void Att_ReceiveEvent (void)
{ {
extern const char *Txt_Already_existed_an_event_with_the_title_X; extern const char *Txt_Already_existed_an_event_with_the_title_X;
extern const char *Txt_Created_new_event_X; extern const char *Txt_Created_new_event_X;
@ -1658,9 +1656,9 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
bool Present; bool Present;
char CommentStd[Cns_MAX_BYTES_TEXT + 1]; char CommentStd[Cns_MAX_BYTES_TEXT + 1];
char CommentTch[Cns_MAX_BYTES_TEXT + 1]; char CommentTch[Cns_MAX_BYTES_TEXT + 1];
bool ICanChangeStdAttendance; Usr_ICan_t ICanChangeStdAttendance;
bool ICanEditStdComment; Usr_ICan_t ICanEditStdComment;
bool ICanEditTchComment; Usr_ICan_t ICanEditTchComment;
/***** Set who can edit *****/ /***** Set who can edit *****/
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
@ -1669,24 +1667,25 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
// A student can see only her/his attendance // A student can see only her/his attendance
if (Usr_ItsMe (UsrDat->UsrCod) == Usr_OTHER) if (Usr_ItsMe (UsrDat->UsrCod) == Usr_OTHER)
Err_ShowErrorAndExit ("Wrong call."); Err_ShowErrorAndExit ("Wrong call.");
ICanChangeStdAttendance = false; ICanChangeStdAttendance = Usr_I_CAN_NOT;
ICanEditStdComment = Event->Open; // Attendance event is open ICanEditStdComment = Event->Open ? Usr_I_CAN : // Attendance event is open
ICanEditTchComment = false; Usr_I_CAN_NOT;
ICanEditTchComment = Usr_I_CAN_NOT;
break; break;
case Rol_TCH: case Rol_TCH:
ICanChangeStdAttendance = true; ICanChangeStdAttendance = Usr_I_CAN;
ICanEditStdComment = false; ICanEditStdComment = Usr_I_CAN_NOT;
ICanEditTchComment = true; ICanEditTchComment = Usr_I_CAN;
break; break;
case Rol_SYS_ADM: case Rol_SYS_ADM:
ICanChangeStdAttendance = true; ICanChangeStdAttendance = Usr_I_CAN;
ICanEditStdComment = false; ICanEditStdComment = Usr_I_CAN_NOT;
ICanEditTchComment = false; ICanEditTchComment = Usr_I_CAN_NOT;
break; break;
default: default:
ICanChangeStdAttendance = false; ICanChangeStdAttendance = Usr_I_CAN_NOT;
ICanEditStdComment = false; ICanEditStdComment = Usr_I_CAN_NOT;
ICanEditTchComment = false; ICanEditTchComment = Usr_I_CAN_NOT;
break; break;
} }
@ -1709,8 +1708,8 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
"id=\"Std%u\" value=\"%s\"%s%s", "id=\"Std%u\" value=\"%s\"%s%s",
NumUsr,UsrDat->EnUsrCod, NumUsr,UsrDat->EnUsrCod,
Present ? " checked=\"checked\"" : "", Present ? " checked=\"checked\"" : "",
ICanChangeStdAttendance ? "" : (ICanChangeStdAttendance == Usr_I_CAN) ? "" :
" disabled=\"disabled\""); " disabled=\"disabled\"");
HTM_TD_End (); HTM_TD_End ();
/***** Write number of student in the list *****/ /***** Write number of student in the list *****/
@ -1758,7 +1757,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
"DAT_SMALL", "DAT_SMALL",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanEditStdComment) // Show with form if (ICanEditStdComment == Usr_I_CAN) // Show with form
{ {
HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\"" HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\""
" class=\"INPUT_%s\"", " class=\"INPUT_%s\"",
@ -1781,7 +1780,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
"DAT_SMALL", "DAT_SMALL",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanEditTchComment) // Show with form if (ICanEditTchComment == Usr_I_CAN) // Show with form
{ {
HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\"" HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\""
" class=\"INPUT_%s\"", " class=\"INPUT_%s\"",
@ -1790,7 +1789,7 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
HTM_Txt (CommentTch); HTM_Txt (CommentTch);
HTM_TEXTAREA_End (); HTM_TEXTAREA_End ();
} }
else if (Event->CommentTchVisible) // Show without form else if (Event->CommentTchVisible) // Show without form
{ {
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT, CommentTch,Cns_MAX_BYTES_TEXT,
@ -2077,7 +2076,7 @@ void Att_RegisterStudentsInEvent (void)
/*****************************************************************************/ /*****************************************************************************/
static unsigned Att_GetNumUsrsFromAListWhoAreInEvent (long AttCod, static unsigned Att_GetNumUsrsFromAListWhoAreInEvent (long AttCod,
long LstSelectedUsrCods[], long *LstSelectedUsrCods,
unsigned NumUsrsInList) unsigned NumUsrsInList)
{ {
char *SubQueryUsrs; char *SubQueryUsrs;
@ -2181,7 +2180,7 @@ static void Att_ReqListOrPrintUsrsAttendanceCrs (__attribute__((unused)) void *A
Txt_Attendance_list, Txt_Attendance_list,
Hlp_USERS_Attendance_attendance_list, Hlp_USERS_Attendance_attendance_list,
Txt_View_attendance, Txt_View_attendance,
false); // Do not put form with date range Frm_DONT_PUT_FORM); // Do not put form with date range
/***** Free list of attendance events *****/ /***** Free list of attendance events *****/
Att_FreeListEvents (&Events); Att_FreeListEvents (&Events);
@ -2231,7 +2230,7 @@ static void Att_ListOrPrintMyAttendanceCrs (Att_TypeOfView_t TypeOfView)
/* Get number of students in this event */ /* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList = Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInEvent (Events.Lst[NumAttEvent].AttCod, Att_GetNumUsrsFromAListWhoAreInEvent (Events.Lst[NumAttEvent].AttCod,
&Gbl.Usrs.Me.UsrDat.UsrCod,1); &Gbl.Usrs.Me.UsrDat.UsrCod,1);
/***** Get list of attendance events selected *****/ /***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events); Att_GetListSelectedAttCods (&Events);
@ -2344,7 +2343,7 @@ static void Att_ListOrPrintUsrsAttendanceCrs (void *TypeOfView)
/* Get number of students in this event */ /* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList = Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInEvent (Events.Lst[NumAttEvent].AttCod, Att_GetNumUsrsFromAListWhoAreInEvent (Events.Lst[NumAttEvent].AttCod,
LstSelectedUsrCods,NumUsrsInList); LstSelectedUsrCods,NumUsrsInList);
/***** Get list of attendance events selected *****/ /***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events); Att_GetListSelectedAttCods (&Events);
@ -2722,8 +2721,7 @@ static void Att_ListEventsToSelect (struct Att_Events *Events,
static void Att_PutIconToViewAttEvents (__attribute__((unused)) void *Args) static void Att_PutIconToViewAttEvents (__attribute__((unused)) void *Args)
{ {
Ico_PutContextualIconToView (ActSeeAllAtt,NULL, Ico_PutContextualIconToView (ActSeeAllAtt,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2732,8 +2730,7 @@ static void Att_PutIconToViewAttEvents (__attribute__((unused)) void *Args)
static void Att_PutIconToEditAttEvents (__attribute__((unused)) void *Args) static void Att_PutIconToEditAttEvents (__attribute__((unused)) void *Args)
{ {
Ico_PutContextualIconToEdit (ActSeeAllAtt,NULL, Ico_PutContextualIconToEdit (ActSeeAllAtt,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2775,7 +2772,7 @@ static void Att_ListUsrsAttendanceTable (struct Att_Events *Events,
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get from the database the data of the student if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get from the database the data of the student
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewAtt (&UsrDat)) if (Usr_CheckIfICanViewAtt (&UsrDat) == Usr_I_CAN)
{ {
UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&UsrDat); UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&UsrDat);
Att_WriteRowUsrSeveralAttEvents (Events,NumUsr,&UsrDat); Att_WriteRowUsrSeveralAttEvents (Events,NumUsr,&UsrDat);
@ -3010,7 +3007,7 @@ static void Att_ListStdsWithAttEventsDetails (struct Att_Events *Events,
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get from the database the data of the student if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat, // Get from the database the data of the student
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewAtt (&UsrDat)) if (Usr_CheckIfICanViewAtt (&UsrDat) == Usr_I_CAN)
{ {
UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&UsrDat); UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&UsrDat);
Att_ListAttEventsForAStd (Events,NumUsr,&UsrDat); Att_ListAttEventsForAStd (Events,NumUsr,&UsrDat);

View File

@ -85,7 +85,7 @@ struct Att_Events
void Att_SeeEvents (void); void Att_SeeEvents (void);
bool Att_CheckIfICanEditEvents (void); Usr_ICan_t Att_CheckIfICanEditEvents (void);
void Att_ReqCreatOrEditEvent (void); void Att_ReqCreatOrEditEvent (void);
bool Att_GetEventDataByCod (struct Att_Event *Event); bool Att_GetEventDataByCod (struct Att_Event *Event);
@ -97,7 +97,7 @@ void Att_RemoveEventFromDB (long AttCod);
void Att_HideEvent (void); void Att_HideEvent (void);
void Att_UnhideEvent (void); void Att_UnhideEvent (void);
void Att_ReceiveFormEvent (void); void Att_ReceiveEvent (void);
void Att_CreateEvent (struct Att_Event *Event,const char *Description); void Att_CreateEvent (struct Att_Event *Event,const char *Description);
void Att_UpdateEvent (struct Att_Event *Event,const char *Description); void Att_UpdateEvent (struct Att_Event *Event,const char *Description);

View File

@ -205,8 +205,7 @@ static void Ban_PutIconsListingBanners (__attribute__((unused)) void *Args)
static void Ban_PutIconToEditBanners (void) static void Ban_PutIconToEditBanners (void)
{ {
Ico_PutContextualIconToEdit (ActEdiBan,NULL, Ico_PutContextualIconToEdit (ActEdiBan,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -357,8 +356,7 @@ static void Ban_GetBannerDataFromRow (MYSQL_RES *mysql_res,
static void Ban_PutIconsEditingBanners (__attribute__((unused)) void *Args) static void Ban_PutIconsEditingBanners (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view banners *****/ /***** Put icon to view banners *****/
Ico_PutContextualIconToView (ActSeeBan,NULL, Ico_PutContextualIconToView (ActSeeBan,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to view links *****/ /***** Put icon to view links *****/
Lnk_PutIconToViewLinks (); Lnk_PutIconToViewLinks ();
@ -370,9 +368,7 @@ static void Ban_PutIconsEditingBanners (__attribute__((unused)) void *Args)
void Ban_PutIconToViewBanners (void) void Ban_PutIconToViewBanners (void)
{ {
Lay_PutContextualLinkOnlyIcon (ActSeeBan,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeBan,NULL,NULL,NULL,"flag.svg",Ico_BLACK);
NULL,NULL,
"flag.svg",Ico_BLACK);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -382,12 +378,12 @@ void Ban_PutIconToViewBanners (void)
static void Ban_ListBannersForEdition (struct Ban_Banners *Banners) static void Ban_ListBannersForEdition (struct Ban_Banners *Banners)
{ {
extern const char *HidVis_DataClass[HidVis_NUM_HIDDEN_VISIBLE]; extern const char *HidVis_DataClass[HidVis_NUM_HIDDEN_VISIBLE];
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhBan, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhBan, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidBan, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidBan, // Visible ==> action to hide
}; };
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenBanSho, [Nam_SHRT_NAME] = ActRenBanSho,
[Nam_FULL_NAME] = ActRenBanFul, [Nam_FULL_NAME] = ActRenBanFul,
@ -447,7 +443,7 @@ static void Ban_ListBannersForEdition (struct Ban_Banners *Banners)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_Ban,Banners->BanCodToEdit, ParCod_Ban,Banners->BanCodToEdit,
Names, Names,
true); // Put form Frm_PUT_FORM);
/* Banner image */ /* Banner image */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -854,7 +850,7 @@ static void Ban_PutHeadBanners (void)
/******************* Receive form to create a new banner *********************/ /******************* Receive form to create a new banner *********************/
/*****************************************************************************/ /*****************************************************************************/
void Ban_ReceiveFormNewBanner (void) void Ban_ReceiveNewBanner (void)
{ {
extern const char *Nam_Fields[Nam_NUM_SHRT_FULL_NAMES]; extern const char *Nam_Fields[Nam_NUM_SHRT_FULL_NAMES];
extern const char *Txt_You_must_specify_the_image_of_the_new_banner; extern const char *Txt_You_must_specify_the_image_of_the_new_banner;

View File

@ -67,7 +67,7 @@ void Ban_RenameBannerFull (void);
void Ban_ChangeBannerImg (void); void Ban_ChangeBannerImg (void);
void Ban_ChangeBannerWWW (void); void Ban_ChangeBannerWWW (void);
void Ban_ContEditAfterChgBan (void); void Ban_ContEditAfterChgBan (void);
void Ban_ReceiveFormNewBanner (void); void Ban_ReceiveNewBanner (void);
void Ban_WriteMenuWithBanners (void); void Ban_WriteMenuWithBanners (void);
void Ban_ClickOnBanner (void); void Ban_ClickOnBanner (void);

View File

@ -301,7 +301,7 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_clipboard[Brw_NUM_TYPES_FILE
[Brw_ADMI_ASS_PRJ] = Brw_ADMI_ASS_PRJ, [Brw_ADMI_ASS_PRJ] = Brw_ADMI_ASS_PRJ,
}; };
static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActSeeDocCrs,
@ -334,7 +334,7 @@ static const Act_Action_t Brw_ActSeeAdm[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActAdmAssPrj, [Brw_ADMI_ASS_PRJ] = ActAdmAssPrj,
}; };
static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActAdmDocCrs, [Brw_SHOW_DOC_CRS] = ActAdmDocCrs,
@ -367,7 +367,7 @@ static const Act_Action_t Brw_ActFromSeeToAdm[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk, [Brw_ADMI_ASS_PRJ] = ActUnk,
}; };
static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -400,7 +400,7 @@ static const Act_Action_t Brw_ActFromAdmToSee[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk, [Brw_ADMI_ASS_PRJ] = ActUnk,
}; };
static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActChgToSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActChgToSeeDocCrs,
@ -433,7 +433,7 @@ static const Act_Action_t Brw_ActChgZone[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk, [Brw_ADMI_ASS_PRJ] = ActUnk,
}; };
static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActReqDatSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActReqDatSeeDocCrs,
@ -466,7 +466,7 @@ static const Act_Action_t Brw_ActReqDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActReqDatAssPrj, [Brw_ADMI_ASS_PRJ] = ActReqDatAssPrj,
}; };
static const Act_Action_t Brw_ActReqLnk[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActReqLnk[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActReqLnkSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActReqLnkSeeDocCrs,
@ -499,7 +499,7 @@ static const Act_Action_t Brw_ActReqLnk[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActUnk, [Brw_ADMI_ASS_PRJ] = ActUnk,
}; };
static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActDowSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActDowSeeDocCrs,
@ -532,7 +532,7 @@ static const Act_Action_t Brw_ActDowFile[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActDowAssPrj, [Brw_ADMI_ASS_PRJ] = ActDowAssPrj,
}; };
static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -565,7 +565,7 @@ static const Act_Action_t Brw_ActAskRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActReqRemFilAssPrj, [Brw_ADMI_ASS_PRJ] = ActReqRemFilAssPrj,
}; };
static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -598,7 +598,7 @@ static const Act_Action_t Brw_ActRemoveFile[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActRemFilAssPrj, [Brw_ADMI_ASS_PRJ] = ActRemFilAssPrj,
}; };
static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -631,7 +631,7 @@ static const Act_Action_t Brw_ActRemoveFolder[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActRemFolAssPrj, [Brw_ADMI_ASS_PRJ] = ActRemFolAssPrj,
}; };
static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -664,7 +664,7 @@ static const Act_Action_t Brw_ActRemoveFolderNotEmpty[Brw_NUM_TYPES_FILE_BROWSER
[Brw_ADMI_ASS_PRJ] = ActRemTreAssPrj, [Brw_ADMI_ASS_PRJ] = ActRemTreAssPrj,
}; };
static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -697,7 +697,7 @@ static const Act_Action_t Brw_ActCopy[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActCopAssPrj, [Brw_ADMI_ASS_PRJ] = ActCopAssPrj,
}; };
static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -730,7 +730,7 @@ static const Act_Action_t Brw_ActPaste[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActPasAssPrj, [Brw_ADMI_ASS_PRJ] = ActPasAssPrj,
}; };
static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -763,7 +763,7 @@ static const Act_Action_t Brw_ActFormCreate[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActFrmCreAssPrj, [Brw_ADMI_ASS_PRJ] = ActFrmCreAssPrj,
}; };
static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -796,7 +796,7 @@ static const Act_Action_t Brw_ActCreateFolder[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActCreFolAssPrj, [Brw_ADMI_ASS_PRJ] = ActCreFolAssPrj,
}; };
static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -829,7 +829,7 @@ static const Act_Action_t Brw_ActCreateLink[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActCreLnkAssPrj, [Brw_ADMI_ASS_PRJ] = ActCreLnkAssPrj,
}; };
static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -862,7 +862,7 @@ static const Act_Action_t Brw_ActRenameFolder[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActRenFolAssPrj, [Brw_ADMI_ASS_PRJ] = ActRenFolAssPrj,
}; };
static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -895,7 +895,7 @@ static const Act_Action_t Brw_ActUploadFileDropzone[Brw_NUM_TYPES_FILE_BROWSER]
[Brw_ADMI_ASS_PRJ] = ActRcvFilAssPrjDZ, [Brw_ADMI_ASS_PRJ] = ActRcvFilAssPrjDZ,
}; };
static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -928,7 +928,7 @@ static const Act_Action_t Brw_ActUploadFileClassic[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActRcvFilAssPrjCla, [Brw_ADMI_ASS_PRJ] = ActRcvFilAssPrjCla,
}; };
static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -961,7 +961,7 @@ static const Act_Action_t Brw_ActRefreshAfterUploadFiles[Brw_NUM_TYPES_FILE_BROW
[Brw_ADMI_ASS_PRJ] = ActAdmAssPrj, [Brw_ADMI_ASS_PRJ] = ActAdmAssPrj,
}; };
static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActExpSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActExpSeeDocCrs,
@ -994,7 +994,7 @@ static const Act_Action_t Brw_ActExpandFolder[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActExpAssPrj, [Brw_ADMI_ASS_PRJ] = ActExpAssPrj,
}; };
static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActConSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActConSeeDocCrs,
@ -1027,7 +1027,7 @@ static const Act_Action_t Brw_ActContractFolder[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActConAssPrj, [Brw_ADMI_ASS_PRJ] = ActConAssPrj,
}; };
static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActUnk, [Brw_SHOW_DOC_CRS] = ActUnk,
@ -1060,7 +1060,7 @@ static const Act_Action_t Brw_ActRecDatFile[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = ActChgDatAssPrj, [Brw_ADMI_ASS_PRJ] = ActChgDatAssPrj,
}; };
static const Act_Action_t Brw_ActZIPFolder[Brw_NUM_TYPES_FILE_BROWSER] = static Act_Action_t Brw_ActZIPFolder[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = ActUnk, [Brw_UNKNOWN ] = ActUnk,
[Brw_SHOW_DOC_CRS] = ActZIPSeeDocCrs, [Brw_SHOW_DOC_CRS] = ActZIPSeeDocCrs,
@ -1097,7 +1097,7 @@ static const Act_Action_t Brw_ActZIPFolder[Brw_NUM_TYPES_FILE_BROWSER] =
/***************************** Private variables *****************************/ /***************************** Private variables *****************************/
/*****************************************************************************/ /*****************************************************************************/
bool Brw_ICanEditFileOrFolder; // Can I modify (remove, rename, create inside, etc.) a file or folder? Usr_ICan_t Brw_ICanEditFileOrFolder; // Can I modify (remove, rename, create inside, etc.) a file or folder?
/*****************************************************************************/ /*****************************************************************************/
/**************************** Private prototypes *****************************/ /**************************** Private prototypes *****************************/
@ -1140,7 +1140,7 @@ static void Brw_ListDir (unsigned Level,const char *RowId,
static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId, static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
bool TreeContracted, bool TreeContracted,
Brw_IconTree_t IconThisRow); Brw_IconTree_t IconThisRow);
static bool Brw_CheckIfCanPasteIn (unsigned Level); static Usr_ICan_t Brw_CheckIfCanPasteIn (unsigned Level);
static void Brw_PutIconRemove (void); static void Brw_PutIconRemove (void);
static void Brw_PutIconCopy (void); static void Brw_PutIconCopy (void);
static void Brw_PutIconPaste (unsigned Level); static void Brw_PutIconPaste (unsigned Level);
@ -1213,7 +1213,7 @@ static bool Brw_CheckIfUploadIsAllowed (const char *FileType);
static void Brw_PutIconToGetLinkToFile (void *FileMetadata); static void Brw_PutIconToGetLinkToFile (void *FileMetadata);
static void Brw_PutParsToGetLinkToFile (void *FileMetadata); static void Brw_PutParsToGetLinkToFile (void *FileMetadata);
static bool Brw_CheckIfICanEditFileMetadata (long IAmTheOwner); static Usr_ICan_t Brw_CheckIfICanEditFileMetadata (bool IAmTheOwner);
static bool Brw_CheckIfIAmOwnerOfFile (long PublisherUsrCod); static bool Brw_CheckIfIAmOwnerOfFile (long PublisherUsrCod);
static void Brw_WriteBigLinkToDownloadFile (const char *URL, static void Brw_WriteBigLinkToDownloadFile (const char *URL,
struct Brw_FileMetadata *FileMetadata, struct Brw_FileMetadata *FileMetadata,
@ -1233,15 +1233,15 @@ static unsigned Brw_GetFileViewsFromMe (long FilCod);
static void Brw_RemoveOneFileOrFolderFromDB (const char Path[PATH_MAX + 1]); static void Brw_RemoveOneFileOrFolderFromDB (const char Path[PATH_MAX + 1]);
static void Brw_RemoveChildrenOfFolderFromDB (const char Path[PATH_MAX + 1]); static void Brw_RemoveChildrenOfFolderFromDB (const char Path[PATH_MAX + 1]);
static void Brw_SetIfICanEditFileOrFolder (bool Value); static void Brw_SetIfICanEditFileOrFolder (Usr_ICan_t Value);
static bool Brw_GetIfICanEditFileOrFolder (void); static Usr_ICan_t Brw_GetIfICanEditFileOrFolder (void);
static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level); static Usr_ICan_t Brw_CheckIfICanEditFileOrFolder (unsigned Level);
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level); static Usr_ICan_t Brw_CheckIfICanCreateIntoFolder (unsigned Level);
static bool Brw_CheckIfICanModifySharedFileOrFolder (void); static Usr_ICan_t Brw_CheckIfICanModifySharedFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void); static Usr_ICan_t Brw_CheckIfICanModifyPrivateFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void); static Usr_ICan_t Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void); static Usr_ICan_t Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row); static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row);
@ -2711,7 +2711,7 @@ static void Brw_AskEditWorksCrsInternal (__attribute__((unused)) void *Args)
Txt_Assignments_and_other_works, Txt_Assignments_and_other_works,
Hlp_FILES_Homework_for_teachers, Hlp_FILES_Homework_for_teachers,
Txt_View_homework, Txt_View_homework,
false); // Do not put form with date range Frm_DONT_PUT_FORM); // Do not put form with date range
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2744,7 +2744,7 @@ void Brw_ShowFileBrowserProject (long PrjCod)
Brw_WriteTopBeforeShowingFileBrowser (); Brw_WriteTopBeforeShowingFileBrowser ();
if (Prj_CheckIfICanViewProjectDocuments (PrjCod)) if (Prj_CheckIfICanViewProjectDocuments (PrjCod) == Usr_I_CAN)
{ {
/***** Show the tree with the project documents *****/ /***** Show the tree with the project documents *****/
Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ; Gbl.FileBrowser.Type = Brw_ADMI_DOC_PRJ;
@ -2752,7 +2752,7 @@ void Brw_ShowFileBrowserProject (long PrjCod)
Brw_ShowFileBrowser (); Brw_ShowFileBrowser ();
} }
if (Prj_CheckIfICanViewProjectAssessment (PrjCod)) if (Prj_CheckIfICanViewProjectAssessment (PrjCod) == Usr_I_CAN)
{ {
/***** Show the tree with the project assessment *****/ /***** Show the tree with the project assessment *****/
Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ; Gbl.FileBrowser.Type = Brw_ADMI_ASS_PRJ;
@ -2798,7 +2798,7 @@ static void Brw_ShowFileBrowsersAsgWrkCrs (void)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_GET_ROLE_IN_CRS)) Usr_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewAsgWrk (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanViewAsgWrk (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
Gbl.Usrs.Other.UsrDat.Accepted = Gbl.Usrs.Other.UsrDat.Accepted =
Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
@ -2876,7 +2876,7 @@ void Brw_PutLegalNotice (void)
static void Brw_FormToChangeCrsGrpZone (void) static void Brw_FormToChangeCrsGrpZone (void)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
struct ListCodGrps LstMyGrps; struct ListCodGrps LstMyGrps;
unsigned NumGrp; unsigned NumGrp;
struct GroupData GrpDat; struct GroupData GrpDat;
@ -2983,7 +2983,7 @@ static void Brw_GetSelectedGroupData (struct GroupData *GrpDat,bool AbortOnError
static void Brw_ShowDataOwnerAsgWrk (struct Usr_Data *UsrDat) static void Brw_ShowDataOwnerAsgWrk (struct Usr_Data *UsrDat)
{ {
extern const char *Txt_View_record_for_this_course; extern const char *Txt_View_record_for_this_course;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD] = ActSeeRecOneStd, [Rol_STD] = ActSeeRecOneStd,
[Rol_NET] = ActSeeRecOneTch, [Rol_NET] = ActSeeRecOneTch,
@ -3333,7 +3333,7 @@ static void Brw_PutIconsFileBrowser (__attribute__((unused)) void *Args)
/***** Put icon to get resource link *****/ /***** Put icon to get resource link *****/
if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk && if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk &&
Rsc_CheckIfICanGetLink ()) Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (Brw_ActReqLnk[Gbl.FileBrowser.Type],NULL, Ico_PutContextualIconToGetLink (Brw_ActReqLnk[Gbl.FileBrowser.Type],NULL,
NULL,NULL); NULL,NULL);
@ -3997,7 +3997,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
} }
/****** If current action allows file administration... ******/ /****** If current action allows file administration... ******/
Brw_SetIfICanEditFileOrFolder (false); Brw_SetIfICanEditFileOrFolder (Usr_I_CAN_NOT);
if (Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type) && if (Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type) &&
!Gbl.FileBrowser.ShowOnlyPublicFiles) !Gbl.FileBrowser.ShowOnlyPublicFiles)
{ {
@ -4137,26 +4137,26 @@ void Brw_SetFullPathInTree (void)
/*****************************************************************************/ /*****************************************************************************/
// Return true if Gbl.FileBrowser.Clipboard.FilFolLnk.Full can be pasted into Gbl.FileBrowser.FilFolLnk.Full // Return true if Gbl.FileBrowser.Clipboard.FilFolLnk.Full can be pasted into Gbl.FileBrowser.FilFolLnk.Full
static bool Brw_CheckIfCanPasteIn (unsigned Level) static Usr_ICan_t Brw_CheckIfCanPasteIn (unsigned Level)
{ {
char PathDstWithFile[PATH_MAX + 1 + NAME_MAX + 1]; char PathDstWithFile[PATH_MAX + 1 + NAME_MAX + 1];
/***** If not in a folder... *****/ /***** If not in a folder... *****/
if (Gbl.FileBrowser.FilFolLnk.Type != Brw_IS_FOLDER) if (Gbl.FileBrowser.FilFolLnk.Type != Brw_IS_FOLDER)
return false; return Usr_I_CAN_NOT;
/***** If there is nothing in clipboard... *****/ /***** If there is nothing in clipboard... *****/
if (Gbl.FileBrowser.Clipboard.FileBrowser == Brw_UNKNOWN) if (Gbl.FileBrowser.Clipboard.FileBrowser == Brw_UNKNOWN)
return false; return Usr_I_CAN_NOT;
/***** Do not paste a link in marks... *****/ /***** Do not paste a link in marks... *****/
if (Gbl.FileBrowser.Clipboard.FilFolLnk.Type == Brw_IS_LINK && if (Gbl.FileBrowser.Clipboard.FilFolLnk.Type == Brw_IS_LINK &&
Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type]) Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
return false; return Usr_I_CAN_NOT;
/**** If I can not create elements into this folder... *****/ /**** If I can not create elements into this folder... *****/
if (!Brw_CheckIfICanCreateIntoFolder (Level)) if (Brw_CheckIfICanCreateIntoFolder (Level) == Usr_I_CAN_NOT)
return false; // Pasting into top level of assignments is forbidden return Usr_I_CAN_NOT; // Pasting into top level of assignments is forbidden
/**** If we are in the same tree of the clipboard... *****/ /**** If we are in the same tree of the clipboard... *****/
if (Gbl.FileBrowser.Clipboard.IsThisTree) // We are in the same tree of the clipboard ==> if (Gbl.FileBrowser.Clipboard.IsThisTree) // We are in the same tree of the clipboard ==>
@ -4167,11 +4167,12 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
Gbl.FileBrowser.FilFolLnk.Full, Gbl.FileBrowser.FilFolLnk.Full,
Gbl.FileBrowser.Clipboard.FilFolLnk.Name); Gbl.FileBrowser.Clipboard.FilFolLnk.Name);
return !Str_Path1BeginsByPath2 (PathDstWithFile, return Str_Path1BeginsByPath2 (PathDstWithFile,
Gbl.FileBrowser.Clipboard.FilFolLnk.Full); Gbl.FileBrowser.Clipboard.FilFolLnk.Full) ? Usr_I_CAN_NOT :
Usr_I_CAN;
} }
return true; // I can paste return Usr_I_CAN; // I can paste
} }
/*****************************************************************************/ /*****************************************************************************/
@ -4182,7 +4183,7 @@ static void Brw_PutIconRemove (void)
{ {
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Brw_GetIfICanEditFileOrFolder ()) // Can I remove this? if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I remove this?
switch (Gbl.FileBrowser.FilFolLnk.Type) switch (Gbl.FileBrowser.FilFolLnk.Type)
{ {
case Brw_IS_FILE: case Brw_IS_FILE:
@ -4233,7 +4234,7 @@ static void Brw_PutIconPaste (unsigned Level)
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) // Can't paste in a file or link if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) // Can't paste in a file or link
{ {
/* Icon to paste */ /* Icon to paste */
if (Brw_CheckIfCanPasteIn (Level)) if (Brw_CheckIfCanPasteIn (Level) == Usr_I_CAN)
{ {
/***** Form to paste the content of the clipboard *****/ /***** Form to paste the content of the clipboard *****/
Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type], Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type],
@ -4394,7 +4395,7 @@ static void Brw_PutIconToContractFolder (const char *FileBrowserId,const char *R
static void Brw_PutIconHideUnhide (const char *Anchor, static void Brw_PutIconHideUnhide (const char *Anchor,
HidVis_HiddenOrVisible_t HiddenOrVisible) HidVis_HiddenOrVisible_t HiddenOrVisible)
{ {
static const Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t Brw_ActHideUnhide[Brw_NUM_TYPES_FILE_BROWSER][HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[Brw_UNKNOWN ] = {[HidVis_HIDDEN] = ActUnk ,[HidVis_VISIBLE] = ActUnk }, [Brw_UNKNOWN ] = {[HidVis_HIDDEN] = ActUnk ,[HidVis_VISIBLE] = ActUnk },
[Brw_SHOW_DOC_CRS] = {[HidVis_HIDDEN] = ActUnk ,[HidVis_VISIBLE] = ActUnk }, [Brw_SHOW_DOC_CRS] = {[HidVis_HIDDEN] = ActUnk ,[HidVis_VISIBLE] = ActUnk },
@ -4459,13 +4460,11 @@ static void Brw_PutIconFolder (unsigned Level,
const char *FileBrowserId,const char *RowId, const char *FileBrowserId,const char *RowId,
Brw_IconTree_t IconSubtree) Brw_IconTree_t IconSubtree)
{ {
bool ICanCreate;
/***** Begin cell *****/ /***** Begin cell *****/
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
/***** Put icon to create a new file or folder *****/ /***** Put icon to create a new file or folder *****/
if ((ICanCreate = Brw_CheckIfICanCreateIntoFolder (Level))) // I can create a new file or folder if (Brw_CheckIfICanCreateIntoFolder (Level) == Usr_I_CAN) // I can create a new file or folder
{ {
if (IconSubtree == Brw_ICON_TREE_EXPAND) if (IconSubtree == Brw_ICON_TREE_EXPAND)
{ {
@ -4632,8 +4631,7 @@ static void Brw_PutIconFileWithLinkToViewMetadata (const struct Brw_FileMetadata
void Brw_PutIconFile (const char *FileName, void Brw_PutIconFile (const char *FileName,
const char *Class,Frm_PutForm_t PutFormToGo) const char *Class,Frm_PutForm_t PutFormToGo)
{ {
extern const unsigned Ext_NUM_FILE_EXT_ALLOWED; extern const char *Ext_FileExtensionsAllowed[Ext_NUM_FILE_EXT_ALLOWED];
extern const char *Ext_FileExtensionsAllowed[];
extern const char *Txt_X_file; extern const char *Txt_X_file;
char *URL; char *URL;
char *Icon; char *Icon;
@ -4722,7 +4720,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
HTM_NBSP (); HTM_NBSP ();
if (Brw_GetIfICanEditFileOrFolder ()) // Can I rename this folder? if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I rename this folder?
{ {
/***** Form to rename folder *****/ /***** Form to rename folder *****/
Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]); Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]);
@ -4936,7 +4934,7 @@ void Brw_AskRemFileFromTree (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Button of confirmation of removing *****/ /***** Button of confirmation of removing *****/
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this file? if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this file?
{ {
/***** Show question and button to remove file/link *****/ /***** Show question and button to remove file/link *****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
@ -4971,7 +4969,7 @@ void Brw_RemFileFromTree (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this file? if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this file?
{ {
snprintf (Path,sizeof (Path),"%s/%s", snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder, Gbl.FileBrowser.Path.AboveRootFolder,
@ -5024,7 +5022,7 @@ void Brw_RemFolderFromTree (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this folder? if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this folder?
{ {
snprintf (Path,sizeof (Path),"%s/%s", snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder, Gbl.FileBrowser.Path.AboveRootFolder,
@ -5090,7 +5088,7 @@ void Brw_RemSubtreeInFileBrowser (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this subtree? if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this subtree?
{ {
snprintf (Path,sizeof (Path),"%s/%s", snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder, Gbl.FileBrowser.Path.AboveRootFolder,
@ -5771,7 +5769,7 @@ static void Brw_PasteClipboard (struct BrwSiz_BrowserSize *Size)
Pasted.NumFolds = 0; Pasted.NumFolds = 0;
Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree ();
if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level)) if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN)
{ {
/***** Construct the relative path of the origin file or folder *****/ /***** Construct the relative path of the origin file or folder *****/
switch (Gbl.FileBrowser.Clipboard.FileBrowser) switch (Gbl.FileBrowser.Clipboard.FileBrowser)
@ -6192,7 +6190,7 @@ void Brw_ShowFormFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new folder or file is allowed *****/ /***** Check if creating a new folder or file is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN)
{ {
/***** Name of the folder to be shown ****/ /***** Name of the folder to be shown ****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
@ -6215,7 +6213,7 @@ void Brw_ShowFormFileBrowser (void)
{ {
/***** Check if we can paste in this folder *****/ /***** Check if we can paste in this folder *****/
Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree ();
if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level)) if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN)
Brw_PutFormToPasteAFileOrFolder (FileNameToShow); Brw_PutFormToPasteAFileOrFolder (FileNameToShow);
} }
@ -6488,7 +6486,7 @@ void Brw_RecFolderFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new folder is allowed *****/ /***** Check if creating a new folder is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN)
{ {
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{ {
@ -6588,7 +6586,7 @@ void Brw_RenFolderFileBrowser (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I rename this folder? if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I rename this folder?
{ {
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{ {
@ -6759,7 +6757,7 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new file is allowed *****/ /***** Check if creating a new file is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN)
{ {
/***** First, we save in disk the file received *****/ /***** First, we save in disk the file received *****/
Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG, Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG,
@ -6939,7 +6937,7 @@ void Brw_RecLinkFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new link is allowed *****/ /***** Check if creating a new link is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level)) if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN)
{ {
/***** Create a new file to store URL ****/ /***** Create a new file to store URL ****/
Par_GetParText ("NewLinkURL",URL,PATH_MAX); Par_GetParText ("NewLinkURL",URL,PATH_MAX);
@ -7260,9 +7258,9 @@ void Brw_ShowFileMetadata (void)
char URL[PATH_MAX + 1]; char URL[PATH_MAX + 1];
char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1]; char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
bool Found; bool Found;
bool ICanView = false; Usr_ICan_t ICanView = Usr_I_CAN_NOT;
bool IAmTheOwner; bool IAmTheOwner;
bool ICanEdit; Usr_ICan_t ICanEdit;
bool ICanChangePublic = false; bool ICanChangePublic = false;
bool FileHasPublisher; bool FileHasPublisher;
Brw_License_t License; Brw_License_t License;
@ -7286,32 +7284,36 @@ void Brw_ShowFileMetadata (void)
/***** Check if I can view this file. /***** Check if I can view this file.
It could be marked as hidden or in a hidden folder *****/ It could be marked as hidden or in a hidden folder *****/
ICanView = true; ICanView = Usr_I_CAN;
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_SHOW_DOC_INS: case Brw_SHOW_DOC_INS:
if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_CTR: case Brw_SHOW_DOC_CTR:
if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_DEG: case Brw_SHOW_DOC_DEG:
if (Gbl.Usrs.Me.Role.Logged < Rol_DEG_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_DEG_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_CRS:
case Brw_SHOW_DOC_GRP: case Brw_SHOW_DOC_GRP:
if (Gbl.Usrs.Me.Role.Logged < Rol_TCH) if (Gbl.Usrs.Me.Role.Logged < Rol_TCH)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
default: default:
break; break;
} }
} }
if (ICanView) if (ICanView == Usr_I_CAN)
{ {
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
@ -7355,7 +7357,7 @@ void Brw_ShowFileMetadata (void)
if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk && if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk &&
(FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) && FileMetadata.FilFolLnk.Type == Brw_IS_LINK) &&
Rsc_CheckIfICanGetLink ()) Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,&FileMetadata, Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,&FileMetadata,
NULL); NULL);
else else
@ -7364,7 +7366,7 @@ void Brw_ShowFileMetadata (void)
/***** Begin form to update the metadata of a file *****/ /***** Begin form to update the metadata of a file *****/
if (ICanEdit) // I can edit file properties if (ICanEdit == Usr_I_CAN) // I can edit file properties
{ {
/* Can the file be public? */ /* Can the file be public? */
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
@ -7508,14 +7510,14 @@ void Brw_ShowFileMetadata (void)
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Label */ /* Label */
Frm_LabelColumn ("RT",ICanEdit ? "License" : Frm_LabelColumn ("RT",ICanEdit == Usr_I_CAN ? "License" :
NULL, NULL,
Txt_License); Txt_License);
/* Data */ /* Data */
HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"", HTM_TD_Begin ("class=\"LT DAT_STRONG_%s\"",
The_GetSuffix ()); The_GetSuffix ());
if (ICanEdit) // I can edit file properties if (ICanEdit == Usr_I_CAN) // I can edit file properties
{ {
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL, HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,NULL,
"id=\"License\" name=\"License\" class=\"LICENSE\""); "id=\"License\" name=\"License\" class=\"LICENSE\"");
@ -7585,7 +7587,7 @@ void Brw_ShowFileMetadata (void)
HTM_TABLE_End (); HTM_TABLE_End ();
/***** End form *****/ /***** End form *****/
if (ICanEdit) // I can edit file properties if (ICanEdit == Usr_I_CAN) // I can edit file properties
{ {
Btn_PutButton (Btn_CONFIRM_BUTTON,Txt_Save_file_properties); Btn_PutButton (Btn_CONFIRM_BUTTON,Txt_Save_file_properties);
Frm_EndForm (); Frm_EndForm ();
@ -7629,7 +7631,7 @@ void Brw_ShowFileMetadata (void)
/***** Add paths until file to table of expanded folders *****/ /***** Add paths until file to table of expanded folders *****/
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path);
} }
else // !ICanView else // ICanView == Usr_I_CAN_NOT
{ {
/***** Mark possible notifications about non visible file as removed *****/ /***** Mark possible notifications about non visible file as removed *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
@ -7742,7 +7744,7 @@ void Brw_DownloadFile (void)
struct Brw_FileMetadata FileMetadata; struct Brw_FileMetadata FileMetadata;
char URL[PATH_MAX + 1]; char URL[PATH_MAX + 1];
bool Found; bool Found;
bool ICanView = false; Usr_ICan_t ICanView = Usr_I_CAN_NOT;
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
@ -7761,32 +7763,36 @@ void Brw_DownloadFile (void)
/***** Check if I can view this file. /***** Check if I can view this file.
It could be marked as hidden or in a hidden folder *****/ It could be marked as hidden or in a hidden folder *****/
ICanView = true; ICanView = Usr_I_CAN;
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_SHOW_DOC_INS: case Brw_SHOW_DOC_INS:
if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_INS_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_CTR: case Brw_SHOW_DOC_CTR:
if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_CTR_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_DEG: case Brw_SHOW_DOC_DEG:
if (Gbl.Usrs.Me.Role.Logged < Rol_DEG_ADM) if (Gbl.Usrs.Me.Role.Logged < Rol_DEG_ADM)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_CRS:
case Brw_SHOW_DOC_GRP: case Brw_SHOW_DOC_GRP:
if (Gbl.Usrs.Me.Role.Logged < Rol_TCH) if (Gbl.Usrs.Me.Role.Logged < Rol_TCH)
ICanView = !Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata); ICanView = Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingMetadata (&FileMetadata) ? Usr_I_CAN_NOT :
Usr_I_CAN;
break; break;
default: default:
break; break;
} }
} }
if (ICanView) if (ICanView == Usr_I_CAN)
{ {
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
@ -7846,7 +7852,7 @@ void Brw_DownloadFile (void)
Gbl.Layout.DivsEndWritten = Gbl.Layout.DivsEndWritten =
Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all
} }
else // !ICanView else // ICanView == Usr_I_CAN_NOT
{ {
/***** Mark possible notifications about non visible file as removed *****/ /***** Mark possible notifications about non visible file as removed *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
@ -7890,7 +7896,7 @@ void Brw_DownloadFile (void)
/*********** Check if I have permission to change file metadata **************/ /*********** Check if I have permission to change file metadata **************/
/*****************************************************************************/ /*****************************************************************************/
static bool Brw_CheckIfICanEditFileMetadata (long IAmTheOwner) static Usr_ICan_t Brw_CheckIfICanEditFileMetadata (bool IAmTheOwner)
{ {
switch (Gbl.Action.Act) // Only in actions where edition is allowed switch (Gbl.Action.Act) // Only in actions where edition is allowed
{ {
@ -7919,9 +7925,10 @@ static bool Brw_CheckIfICanEditFileMetadata (long IAmTheOwner)
case ActReqDatWrkUsr: case ActChgDatWrkUsr: case ActReqDatWrkUsr: case ActChgDatWrkUsr:
case ActReqDatBrf: case ActChgDatBrf: case ActReqDatBrf: case ActChgDatBrf:
return IAmTheOwner; return IAmTheOwner ? Usr_I_CAN :
Usr_I_CAN_NOT;
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }
@ -8090,7 +8097,7 @@ void Brw_ChgFileMetadata (void)
{ {
/***** Check if I can change file metadata *****/ /***** Check if I can change file metadata *****/
IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod); IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod);
if (!Brw_CheckIfICanEditFileMetadata (IAmTheOwner)) if (Brw_CheckIfICanEditFileMetadata (IAmTheOwner) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Check if the file was public before the edition *****/ /***** Check if the file was public before the edition *****/
@ -8659,37 +8666,40 @@ static void Brw_RemoveChildrenOfFolderFromDB (const char Path[PATH_MAX + 1])
/********** Check if I have permission to modify a file or folder ************/ /********** Check if I have permission to modify a file or folder ************/
/*****************************************************************************/ /*****************************************************************************/
static void Brw_SetIfICanEditFileOrFolder (bool Value) static void Brw_SetIfICanEditFileOrFolder (Usr_ICan_t Value)
{ {
Brw_ICanEditFileOrFolder = Value; Brw_ICanEditFileOrFolder = Value;
} }
static bool Brw_GetIfICanEditFileOrFolder (void) static Usr_ICan_t Brw_GetIfICanEditFileOrFolder (void)
{ {
return Brw_ICanEditFileOrFolder; return Brw_ICanEditFileOrFolder;
} }
static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level) static Usr_ICan_t Brw_CheckIfICanEditFileOrFolder (unsigned Level)
{ {
/***** Level 0 (root folder) can not be removed/renamed *****/ /***** Level 0 (root folder) can not be removed/renamed *****/
if (Level == 0) if (Level == 0)
return false; return Usr_I_CAN_NOT;
/***** I must be student or a superior role to edit *****/ /***** I must be student or a superior role to edit *****/
if (Gbl.Usrs.Me.Role.Max < Rol_STD) if (Gbl.Usrs.Me.Role.Max < Rol_STD)
return false; return Usr_I_CAN_NOT;
/***** Set depending on browser, level, logged role... *****/ /***** Set depending on browser, level, logged role... *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_CRS:
return Gbl.Usrs.Me.Role.Logged >= Rol_TCH; return (Gbl.Usrs.Me.Role.Logged >= Rol_TCH) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_DOC_GRP: case Brw_ADMI_DOC_GRP:
if (Gbl.Usrs.Me.Role.Logged == Rol_TCH) // A teacher... if (Gbl.Usrs.Me.Role.Logged == Rol_TCH) // A teacher...
// ...can edit only if he/she belongs to group // ...can edit only if he/she belongs to group
return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod); return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
// An administrator can edit // An administrator can edit
return (Gbl.Usrs.Me.Role.Logged > Rol_TCH); return (Gbl.Usrs.Me.Role.Logged > Rol_TCH) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP: case Brw_ADMI_TCH_GRP:
// Check if I am the publisher of the file/folder // Check if I am the publisher of the file/folder
@ -8702,7 +8712,7 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
case Brw_ADMI_ASG_CRS: case Brw_ADMI_ASG_CRS:
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER && // The main folder of an assignment if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER && // The main folder of an assignment
Level == 1) Level == 1)
return false; // Do not remove / rename main folder of assigment return Usr_I_CAN_NOT; // Do not remove / rename main folder of assigment
return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg); return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg);
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
@ -8710,7 +8720,8 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
case Brw_ADMI_ASS_PRJ: case Brw_ADMI_ASS_PRJ:
return Brw_CheckIfICanModifyPrjAssFileOrFolder (); return Brw_CheckIfICanModifyPrjAssFileOrFolder ();
default: default:
return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type); return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
return false; return false;
} }
@ -8719,59 +8730,68 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
/**** Check if I have permission to create a file or folder into a folder ****/ /**** Check if I have permission to create a file or folder into a folder ****/
/*****************************************************************************/ /*****************************************************************************/
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level) static Usr_ICan_t Brw_CheckIfICanCreateIntoFolder (unsigned Level)
{ {
/***** If not in a folder... *****/ /***** If not in a folder... *****/
if (Gbl.FileBrowser.FilFolLnk.Type != Brw_IS_FOLDER) if (Gbl.FileBrowser.FilFolLnk.Type != Brw_IS_FOLDER)
return false; return Usr_I_CAN_NOT;
/***** I must be student, teacher, admin or superuser to edit *****/ /***** I must be student, teacher, admin or superuser to edit *****/
if (Gbl.Usrs.Me.Role.Max < Rol_STD) if (Gbl.Usrs.Me.Role.Max < Rol_STD)
return false; return Usr_I_CAN_NOT;
/***** If maximum level is reached, I can not create/paste *****/ /***** If maximum level is reached, I can not create/paste *****/
if (Level >= BrwSiz_MAX_DIR_LEVELS) if (Level >= BrwSiz_MAX_DIR_LEVELS)
return false; return Usr_I_CAN_NOT;
/***** Have I permission to create/paste a new file or folder into the folder? *****/ /***** Have I permission to create/paste a new file or folder into the folder? *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_CRS:
return Gbl.Usrs.Me.Role.Logged >= Rol_TCH; return (Gbl.Usrs.Me.Role.Logged >= Rol_TCH) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_DOC_GRP: case Brw_ADMI_DOC_GRP:
if (Gbl.Usrs.Me.Role.Logged == Rol_TCH) // A teacher if (Gbl.Usrs.Me.Role.Logged == Rol_TCH) // A teacher
// ...can create/paste only if he/she belongs to group // ...can create/paste only if he/she belongs to group
return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod); return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
// An administrator can create/paste // An administrator can create/paste
return (Gbl.Usrs.Me.Role.Logged > Rol_TCH); return (Gbl.Usrs.Me.Role.Logged > Rol_TCH) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_CRS:
return Gbl.Usrs.Me.Role.Logged >= Rol_NET; return (Gbl.Usrs.Me.Role.Logged >= Rol_NET) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_TCH_GRP: case Brw_ADMI_TCH_GRP:
if (Gbl.Usrs.Me.Role.Logged == Rol_NET || // A non-editing teacher... if (Gbl.Usrs.Me.Role.Logged == Rol_NET || // A non-editing teacher...
Gbl.Usrs.Me.Role.Logged == Rol_TCH) // ...or a teacher Gbl.Usrs.Me.Role.Logged == Rol_TCH) // ...or a teacher
// ...can create/paste only if he/she belongs to group // ...can create/paste only if he/she belongs to group
return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod); return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
// An administrator can create/paste // An administrator can create/paste
return (Gbl.Usrs.Me.Role.Logged > Rol_TCH); return (Gbl.Usrs.Me.Role.Logged > Rol_TCH) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_CRS:
return Gbl.Usrs.Me.Role.Logged >= Rol_STD; return (Gbl.Usrs.Me.Role.Logged >= Rol_STD) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_SHR_GRP: case Brw_ADMI_SHR_GRP:
if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // A student, non-editing teacher... if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // A student, non-editing teacher...
Gbl.Usrs.Me.Role.Logged <= Rol_TCH) // ...or a teacher Gbl.Usrs.Me.Role.Logged <= Rol_TCH) // ...or a teacher
// ...can create/paste only if he/she belongs to group // ...can create/paste only if he/she belongs to group
return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod); return Grp_GetIfIBelongToGrp (Gbl.Crs.Grps.GrpCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
// An administrator can create/paste // An administrator can create/paste
return Gbl.Usrs.Me.Role.Logged >= Rol_STD; return (Gbl.Usrs.Me.Role.Logged >= Rol_STD) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Brw_ADMI_ASG_USR: case Brw_ADMI_ASG_USR:
case Brw_ADMI_ASG_CRS: case Brw_ADMI_ASG_CRS:
if (Level == 0) // If root folder if (Level == 0) // If root folder
return false; // Folders of assigments (level 1) return Usr_I_CAN_NOT; // Folders of assigments (level 1)
// can only be created automatically // can only be created automatically
return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg); return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg);
default: default:
return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type); return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -8780,7 +8800,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
bool Brw_CheckIfFileBrowserIsEditable (Brw_FileBrowser_t FileBrowser) bool Brw_CheckIfFileBrowserIsEditable (Brw_FileBrowser_t FileBrowser)
{ {
static const bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] = static bool Brw_FileBrowserIsEditable[Brw_NUM_TYPES_FILE_BROWSER] =
{ {
[Brw_UNKNOWN ] = false, [Brw_UNKNOWN ] = false,
[Brw_SHOW_DOC_CRS] = false, [Brw_SHOW_DOC_CRS] = false,
@ -8824,42 +8844,42 @@ bool Brw_CheckIfFileBrowserIsEditable (Brw_FileBrowser_t FileBrowser)
// I can remove or rename a file if I am the publisher // I can remove or rename a file if I am the publisher
// I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there // I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there
static bool Brw_CheckIfICanModifySharedFileOrFolder (void) static Usr_ICan_t Brw_CheckIfICanModifySharedFileOrFolder (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: // If I am a student or a non-editing teacher... case Rol_STD: // If I am a student or a non-editing teacher...
case Rol_NET: // ...I can modify the file/folder if I am the publisher case Rol_NET: // ...I can modify the file/folder if I am the publisher
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full)); // Am I the publisher of subtree? return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full) ? Usr_I_CAN :
Usr_I_CAN_NOT); // Am I the publisher of subtree?
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:
case Rol_CTR_ADM: case Rol_CTR_ADM:
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
return false;
} }
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void) static Usr_ICan_t Brw_CheckIfICanModifyPrivateFileOrFolder (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_NET: // If I am a student or a non-editing teacher... case Rol_NET: // If I am a student or a non-editing teacher...
// ...I can modify the file/folder if I am the publisher // ...I can modify the file/folder if I am the publisher
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full)); // Am I the publisher of subtree? return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full) ? Usr_I_CAN :
Usr_I_CAN_NOT); // Am I the publisher of subtree?
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:
case Rol_CTR_ADM: case Rol_CTR_ADM:
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -8870,22 +8890,22 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
// I can remove or rename a file if I am the publisher // I can remove or rename a file if I am the publisher
// I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there // I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void) static Usr_ICan_t Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
if (Prj_GetMyRolesInProject (Prj_GetPrjCod ())) // I am a member if (Prj_GetMyRolesInProject (Prj_GetPrjCod ())) // I am a member
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full)); // Am I the publisher of subtree? return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full) ? Usr_I_CAN :
return false; Usr_I_CAN_NOT); // Am I the publisher of subtree?
return Usr_I_CAN_NOT;
case Rol_TCH: // Editing teachers in a course can access to all files case Rol_TCH: // Editing teachers in a course can access to all files
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -8896,7 +8916,7 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
// I can remove or rename a file if I am the publisher // I can remove or rename a file if I am the publisher
// I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there // I can remove or rename a folder if I am the unique publisher of all files and folders in the subtree starting there
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void) static Usr_ICan_t Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
@ -8904,15 +8924,15 @@ static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
case Rol_NET: case Rol_NET:
if ((Prj_GetMyRolesInProject (Prj_GetPrjCod ()) & (1 << Prj_ROLE_TUT | // Tutor... if ((Prj_GetMyRolesInProject (Prj_GetPrjCod ()) & (1 << Prj_ROLE_TUT | // Tutor...
1 << Prj_ROLE_EVL))) // ...or evaluator 1 << Prj_ROLE_EVL))) // ...or evaluator
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full)); // Am I the publisher of subtree? return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_DB_GetPublisherOfSubtree (Gbl.FileBrowser.FilFolLnk.Full) ? Usr_I_CAN :
return false; Usr_I_CAN_NOT); // Am I the publisher of subtree?
return Usr_I_CAN_NOT;
case Rol_TCH: // Editing teachers in a course can access to all files case Rol_TCH: // Editing teachers in a course can access to all files
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
return false;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -117,7 +117,7 @@
#define BrwSiz_MAX_FILES_MARKS_GRP 200 #define BrwSiz_MAX_FILES_MARKS_GRP 200
#define BrwSiz_MAX_FOLDS_MARKS_GRP 20 #define BrwSiz_MAX_FOLDS_MARKS_GRP 20
static const unsigned long long BrwSiz_MAX_QUOTA_BRIEF[Rol_NUM_ROLES] = // MaxRole is used static unsigned long long BrwSiz_MAX_QUOTA_BRIEF[Rol_NUM_ROLES] = // MaxRole is used
{ {
[Rol_STD] = 32ULL*BrwSiz_GiB, [Rol_STD] = 32ULL*BrwSiz_GiB,
[Rol_NET] = 32ULL*BrwSiz_GiB, [Rol_NET] = 32ULL*BrwSiz_GiB,

View File

@ -60,7 +60,7 @@ static struct Bld_Building *Bld_EditingBuilding = NULL; // Static variable to ke
/*****************************************************************************/ /*****************************************************************************/
static Bld_Order_t Bld_GetParBuildingOrder (void); static Bld_Order_t Bld_GetParBuildingOrder (void);
static bool Bld_CheckIfICanCreateBuildings (void); static Usr_ICan_t Bld_CheckIfICanCreateBuildings (void);
static void Bld_PutIconsListingBuildings (__attribute__((unused)) void *Args); static void Bld_PutIconsListingBuildings (__attribute__((unused)) void *Args);
static void Bld_PutIconToEditBuildings (void); static void Bld_PutIconToEditBuildings (void);
static void Bld_PutIconsEditingBuildings (__attribute__((unused)) void *Args); static void Bld_PutIconsEditingBuildings (__attribute__((unused)) void *Args);
@ -196,9 +196,10 @@ static Bld_Order_t Bld_GetParBuildingOrder (void)
/********************* Check if I can create buildings ***********************/ /********************* Check if I can create buildings ***********************/
/*****************************************************************************/ /*****************************************************************************/
static bool Bld_CheckIfICanCreateBuildings (void) static Usr_ICan_t Bld_CheckIfICanCreateBuildings (void)
{ {
return Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM; return (Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -208,7 +209,7 @@ static bool Bld_CheckIfICanCreateBuildings (void)
static void Bld_PutIconsListingBuildings (__attribute__((unused)) void *Args) static void Bld_PutIconsListingBuildings (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit buildings *****/ /***** Put icon to edit buildings *****/
if (Bld_CheckIfICanCreateBuildings ()) if (Bld_CheckIfICanCreateBuildings () == Usr_I_CAN)
Bld_PutIconToEditBuildings (); Bld_PutIconToEditBuildings ();
} }
@ -218,8 +219,7 @@ static void Bld_PutIconsListingBuildings (__attribute__((unused)) void *Args)
static void Bld_PutIconToEditBuildings (void) static void Bld_PutIconToEditBuildings (void)
{ {
Ico_PutContextualIconToEdit (ActEdiBld,NULL, Ico_PutContextualIconToEdit (ActEdiBld,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -275,8 +275,7 @@ static void Bld_EditBuildingsInternal (void)
static void Bld_PutIconsEditingBuildings (__attribute__((unused)) void *Args) static void Bld_PutIconsEditingBuildings (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view buildings *****/ /***** Put icon to view buildings *****/
Ico_PutContextualIconToView (ActSeeBld,NULL, Ico_PutContextualIconToView (ActSeeBld,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -388,7 +387,7 @@ void Bld_FreeListBuildings (struct Bld_Buildings *Buildings)
static void Bld_ListBuildingsForEdition (const struct Bld_Buildings *Buildings) static void Bld_ListBuildingsForEdition (const struct Bld_Buildings *Buildings)
{ {
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenBldSho, [Nam_SHRT_NAME] = ActRenBldSho,
[Nam_FULL_NAME] = ActRenBldFul, [Nam_FULL_NAME] = ActRenBldFul,
@ -435,7 +434,7 @@ static void Bld_ListBuildingsForEdition (const struct Bld_Buildings *Buildings)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_Bld,Building->BldCod, ParCod_Bld,Building->BldCod,
Names, Names,
true); // Put form Frm_PUT_FORM);
/* Building location */ /* Building location */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -714,7 +713,7 @@ static void Bld_PutHeadBuildings (void)
/***************** Receive form to create a new building *********************/ /***************** Receive form to create a new building *********************/
/*****************************************************************************/ /*****************************************************************************/
void Bld_ReceiveFormNewBuilding (void) void Bld_ReceiveNewBuilding (void)
{ {
extern const char *Txt_Created_new_building_X; extern const char *Txt_Created_new_building_X;
char *Names[Nam_NUM_SHRT_FULL_NAMES]; char *Names[Nam_NUM_SHRT_FULL_NAMES];

View File

@ -92,6 +92,6 @@ void Bld_RenameBuildingFull (void);
void Bld_ChangeBuildingLocation (void); void Bld_ChangeBuildingLocation (void);
void Bld_ContEditAfterChgBuilding (void); void Bld_ContEditAfterChgBuilding (void);
void Bld_ReceiveFormNewBuilding (void); void Bld_ReceiveNewBuilding (void);
#endif #endif

View File

@ -56,7 +56,7 @@ extern struct Globals Gbl;
/***************************** Public constants ******************************/ /***************************** Public constants ******************************/
/*****************************************************************************/ /*****************************************************************************/
const bool Cal_DayIsValidAsFirstDayOfWeek[7] = bool Cal_DayIsValidAsFirstDayOfWeek[7] =
{ {
[0] = true, // monday [0] = true, // monday
[1] = false, // tuesday [1] = false, // tuesday
@ -332,7 +332,7 @@ void Cal_PutIconToSeeCalendar (void)
void Cal_GetAndShowNumUsrsPerFirstDayOfWeek (void) void Cal_GetAndShowNumUsrsPerFirstDayOfWeek (void)
{ {
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7]; extern bool Cal_DayIsValidAsFirstDayOfWeek[7];
extern const char *Hlp_ANALYTICS_Figures_calendar; extern const char *Hlp_ANALYTICS_Figures_calendar;
extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES]; extern const char *Txt_FIGURE_TYPES[Fig_NUM_FIGURES];
extern const char *Txt_Calendar; extern const char *Txt_Calendar;

View File

@ -675,13 +675,12 @@ static void Cfe_ListCallsForExams (struct Cfe_CallsForExams *CallsForExams,
static void Cfe_PutIconsCallsForExams (__attribute__((unused)) void *Args) static void Cfe_PutIconsCallsForExams (__attribute__((unused)) void *Args)
{ {
/***** Icon to create a new call for exam *****/ /***** Icon to create a new call for exam *****/
if (Cfe_CheckIfICanEditCallsForExams ()) if (Cfe_CheckIfICanEditCallsForExams () == Usr_I_CAN)
Ico_PutContextualIconToAdd (ActEdiCfe,NULL,NULL,NULL); Ico_PutContextualIconToAdd (ActEdiCfe,NULL,NULL,NULL);
/***** Icon to get resource link *****/ /***** Icon to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkCfe,NULL, Ico_PutContextualIconToGetLink (ActReqLnkCfe,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1457,7 +1456,7 @@ static void Cfe_ShowCallForExam (struct Cfe_CallsForExams *CallsForExams,
static void Cfe_PutIconsCallForExam (void *CallsForExams) static void Cfe_PutIconsCallForExam (void *CallsForExams)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhCfe, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhCfe, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidCfe, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidCfe, // Visible ==> action to hide
@ -1465,7 +1464,7 @@ static void Cfe_PutIconsCallForExam (void *CallsForExams)
if (CallsForExams) if (CallsForExams)
{ {
if (Cfe_CheckIfICanEditCallsForExams ()) if (Cfe_CheckIfICanEditCallsForExams () == Usr_I_CAN)
{ {
/***** Icon to remove call for exam *****/ /***** Icon to remove call for exam *****/
Ico_PutContextualIconToRemove (ActReqRemCfe,NULL, Ico_PutContextualIconToRemove (ActReqRemCfe,NULL,
@ -1499,7 +1498,7 @@ static void Cfe_PutIconsCallForExam (void *CallsForExams)
&((struct Cfe_CallsForExams *) CallsForExams)->ExaCod); &((struct Cfe_CallsForExams *) CallsForExams)->ExaCod);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkCfe,NULL, Ico_PutContextualIconToGetLink (ActReqLnkCfe,NULL,
Cfe_PutParExaCod, Cfe_PutParExaCod,
&((struct Cfe_CallsForExams *) CallsForExams)->ExaCod); &((struct Cfe_CallsForExams *) CallsForExams)->ExaCod);
@ -1510,12 +1509,12 @@ static void Cfe_PutIconsCallForExam (void *CallsForExams)
/******************* Check if I can edit calls for exams *********************/ /******************* Check if I can edit calls for exams *********************/
/*****************************************************************************/ /*****************************************************************************/
bool Cfe_CheckIfICanEditCallsForExams (void) Usr_ICan_t Cfe_CheckIfICanEditCallsForExams (void)
{ {
static const bool ICanEditCallsForExams[Rol_NUM_ROLES] = static Usr_ICan_t ICanEditCallsForExams[Rol_NUM_ROLES] =
{ {
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanEditCallsForExams[Gbl.Usrs.Me.Role.Logged]; return ICanEditCallsForExams[Gbl.Usrs.Me.Role.Logged];

View File

@ -129,7 +129,7 @@ void Cfe_ListCallsForExamsDay (void);
void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams); void Cfe_CreateListCallsForExams (struct Cfe_CallsForExams *CallsForExams);
bool Cfe_CheckIfICanEditCallsForExams (void); Usr_ICan_t Cfe_CheckIfICanEditCallsForExams (void);
void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], void Cfe_GetSummaryAndContentCallForExam (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr, char **ContentStr,

View File

@ -85,7 +85,7 @@ unsigned Cfe_DB_GetCallsForExamsInCurrentCrs (MYSQL_RES **mysql_res)
char SubQueryStatus[64]; char SubQueryStatus[64];
/***** Build subquery about status depending on my role *****/ /***** Build subquery about status depending on my role *****/
if (Cfe_CheckIfICanEditCallsForExams ()) if (Cfe_CheckIfICanEditCallsForExams () == Usr_I_CAN)
sprintf (SubQueryStatus,"Status<>%u", sprintf (SubQueryStatus,"Status<>%u",
(unsigned) Cfe_DELETED_CALL_FOR_EXAM); (unsigned) Cfe_DELETED_CALL_FOR_EXAM);
else else

View File

@ -89,14 +89,14 @@ static void Ctr_GetCoordFromRow (MYSQL_RES *mysql_res,
struct Map_Coordinates *Coord); struct Map_Coordinates *Coord);
static void Ctr_ListCentersForEdition (const struct Plc_Places *Places); static void Ctr_ListCentersForEdition (const struct Plc_Places *Places);
static bool Ctr_CheckIfICanEditACenter (struct Hie_Node *Ctr); static Usr_ICan_t Ctr_CheckIfICanEditACenter (struct Hie_Node *Ctr);
static void Ctr_ShowAlertAndButtonToGoToCtr (void); static void Ctr_ShowAlertAndButtonToGoToCtr (void);
static void Ctr_PutFormToCreateCenter (const struct Plc_Places *Places); static void Ctr_PutFormToCreateCenter (const struct Plc_Places *Places);
static void Ctr_PutHeadCentersForSeeing (bool OrderSelectable); static void Ctr_PutHeadCentersForSeeing (bool OrderSelectable);
static void Ctr_PutHeadCentersForEdition (void); static void Ctr_PutHeadCentersForEdition (void);
static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status); static void Ctr_ReceiveRequestOrCreateCtr (Hie_Status_t Status);
static void Ctr_EditingCenterConstructor (void); static void Ctr_EditingCenterConstructor (void);
static void Ctr_EditingCenterDestructor (void); static void Ctr_EditingCenterDestructor (void);
@ -289,7 +289,7 @@ static void Ctr_ListCenters (void)
static void Ctr_PutIconsListingCenters (__attribute__((unused)) void *Args) static void Ctr_PutIconsListingCenters (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit centers *****/ /***** Put icon to edit centers *****/
if (Hie_CheckIfICanEdit ()) if (Hie_CheckIfICanEdit () == Usr_I_CAN)
Ctr_PutIconToEditCenters (); Ctr_PutIconToEditCenters ();
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
@ -302,8 +302,7 @@ static void Ctr_PutIconsListingCenters (__attribute__((unused)) void *Args)
static void Ctr_PutIconToEditCenters (void) static void Ctr_PutIconToEditCenters (void)
{ {
Ico_PutContextualIconToEdit (ActEdiCtr,NULL, Ico_PutContextualIconToEdit (ActEdiCtr,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -460,8 +459,7 @@ static void Ctr_EditCentersInternal (void)
static void Ctr_PutIconsEditingCenters (__attribute__((unused)) void *Args) static void Ctr_PutIconsEditingCenters (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view centers *****/ /***** Put icon to view centers *****/
Ico_PutContextualIconToView (ActSeeCtr,NULL, Ico_PutContextualIconToView (ActSeeCtr,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_HIERARCHY); Fig_PutIconToShowFigure (Fig_HIERARCHY);
@ -726,7 +724,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
{ {
extern const char *Txt_Another_place; extern const char *Txt_Another_place;
extern const char *Txt_CENTER_STATUS[Hie_NUM_STATUS_TXT]; extern const char *Txt_CENTER_STATUS[Hie_NUM_STATUS_TXT];
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenCtrSho, [Nam_SHRT_NAME] = ActRenCtrSho,
[Nam_FULL_NAME] = ActRenCtrFul, [Nam_FULL_NAME] = ActRenCtrFul,
@ -737,7 +735,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
const struct Plc_Place *Plc; const struct Plc_Place *Plc;
char WWW[Cns_MAX_BYTES_WWW + 1]; char WWW[Cns_MAX_BYTES_WWW + 1];
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
bool ICanEdit; Usr_ICan_t ICanEdit;
unsigned NumDegs; unsigned NumDegs;
unsigned NumUsrsCtr; unsigned NumUsrsCtr;
unsigned NumUsrsInCrssOfCtr; unsigned NumUsrsInCrssOfCtr;
@ -773,7 +771,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
/* Put icon to remove center */ /* Put icon to remove center */
HTM_TD_Begin ("class=\"BT\""); HTM_TD_Begin ("class=\"BT\"");
if (!ICanEdit || // I cannot edit if (ICanEdit == Usr_I_CAN_NOT || // I cannot edit
NumDegs || // Center has degrees NumDegs || // Center has degrees
NumUsrsCtr || // Center has users who claim to belong to it NumUsrsCtr || // Center has users who claim to belong to it
NumUsrsInCrssOfCtr) // Center has users NumUsrsInCrssOfCtr) // Center has users
@ -795,7 +793,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
/* Place */ /* Place */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgCtrPlc); Frm_BeginForm (ActChgCtrPlc);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
@ -836,11 +834,12 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_OthHie,Ctr->HieCod, ParCod_OthHie,Ctr->HieCod,
Names, Names,
ICanEdit); // Put form? ICanEdit == Usr_I_CAN ? Frm_PUT_FORM :
Frm_DONT_PUT_FORM);
/* Center WWW */ /* Center WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgCtrWWW); Frm_BeginForm (ActChgCtrWWW);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
@ -903,11 +902,12 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
/************** Check if I can edit, remove, etc. a center *******************/ /************** Check if I can edit, remove, etc. a center *******************/
/*****************************************************************************/ /*****************************************************************************/
static bool Ctr_CheckIfICanEditACenter (struct Hie_Node *Ctr) static Usr_ICan_t Ctr_CheckIfICanEditACenter (struct Hie_Node *Ctr)
{ {
return Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM || // I am an institution administrator or higher return (Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM || // I am an institution administrator or higher
((Ctr->Status & Hie_STATUS_BIT_PENDING) != 0 && // Center is not yet activated ((Ctr->Status & Hie_STATUS_BIT_PENDING) != 0 && // Center is not yet activated
Gbl.Usrs.Me.UsrDat.UsrCod == Ctr->RequesterUsrCod); // I am the requester Gbl.Usrs.Me.UsrDat.UsrCod == Ctr->RequesterUsrCod)) ? Usr_I_CAN : // I am the requester
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1422,33 +1422,33 @@ static void Ctr_PutHeadCentersForEdition (void)
/****************** Receive form to request a new center *********************/ /****************** Receive form to request a new center *********************/
/*****************************************************************************/ /*****************************************************************************/
void Ctr_ReceiveFormReqCtr (void) void Ctr_ReceiveReqCtr (void)
{ {
/***** Center constructor *****/ /***** Center constructor *****/
Ctr_EditingCenterConstructor (); Ctr_EditingCenterConstructor ();
/***** Receive form to request a new center *****/ /***** Receive form to request a new center *****/
Ctr_ReceiveFormRequestOrCreateCtr ((Hie_Status_t) Hie_STATUS_BIT_PENDING); Ctr_ReceiveRequestOrCreateCtr ((Hie_Status_t) Hie_STATUS_BIT_PENDING);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************* Receive form to create a new center *********************/ /******************* Receive form to create a new center *********************/
/*****************************************************************************/ /*****************************************************************************/
void Ctr_ReceiveFormNewCtr (void) void Ctr_ReceiveNewCtr (void)
{ {
/***** Center constructor *****/ /***** Center constructor *****/
Ctr_EditingCenterConstructor (); Ctr_EditingCenterConstructor ();
/***** Receive form to create a new center *****/ /***** Receive form to create a new center *****/
Ctr_ReceiveFormRequestOrCreateCtr ((Hie_Status_t) 0); Ctr_ReceiveRequestOrCreateCtr ((Hie_Status_t) 0);
} }
/*****************************************************************************/ /*****************************************************************************/
/************* Receive form to request or create a new center ****************/ /************* Receive form to request or create a new center ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Ctr_ReceiveFormRequestOrCreateCtr (Hie_Status_t Status) static void Ctr_ReceiveRequestOrCreateCtr (Hie_Status_t Status)
{ {
extern const char *Txt_Created_new_center_X; extern const char *Txt_Created_new_center_X;
char *Names[Nam_NUM_SHRT_FULL_NAMES]; char *Names[Nam_NUM_SHRT_FULL_NAMES];

View File

@ -63,8 +63,8 @@ void Ctr_ChangeCtrWWW (void);
void Ctr_ChangeCtrStatus (void); void Ctr_ChangeCtrStatus (void);
void Ctr_ContEditAfterChgCtr (void); void Ctr_ContEditAfterChgCtr (void);
void Ctr_ReceiveFormReqCtr (void); void Ctr_ReceiveReqCtr (void);
void Ctr_ReceiveFormNewCtr (void); void Ctr_ReceiveNewCtr (void);
unsigned Ctr_GetCachedNumCtrsWithMapInSys (void); unsigned Ctr_GetCachedNumCtrsWithMapInSys (void);
unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod); unsigned Ctr_GetCachedNumCtrsWithMapInCty (long CtyCod);

View File

@ -544,7 +544,7 @@ static void CtrCfg_FreePhotoAttr (char **PhotoAttribution)
static void CtrCfg_Institution (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm) static void CtrCfg_Institution (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
unsigned NumIns; unsigned NumIns;
const struct Hie_Node *Ins; const struct Hie_Node *Ins;
@ -623,7 +623,7 @@ static void CtrCfg_Institution (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm)
static void CtrCfg_Place (Frm_PutForm_t PutForm) static void CtrCfg_Place (Frm_PutForm_t PutForm)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Place; extern const char *Txt_Place;
extern const char *Txt_Another_place; extern const char *Txt_Another_place;
struct Plc_Places Places; struct Plc_Places Places;

View File

@ -633,10 +633,16 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.71 (2024-03-20)" #define Log_PLATFORM_VERSION "SWAD 23.72.1 (2024-04-01)"
#define CSS_FILE "swad23.67.2.css" #define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.53.6.js" #define JS_FILE "swad23.53.6.js"
/* /*
Version 23.72.1: Apr 01, 2024 New type Usr_ICan_t. (334912 lines)
Version 23.72: Apr 01, 2024 New type Usr_ICan_t. (334879 lines)
Version 23.71.4: Mar 22, 2024 Code refactoring. (334860 lines)
Version 23.71.3: Mar 22, 2024 Code refactoring. (334827 lines)
Version 23.71.2: Mar 20, 2024 Code refactoring in actions. (334866 lines)
Version 23.71.1: Mar 20, 2024 Some functions renamed. (334869 lines)
Version 23.71: Mar 20, 2024 Actions for syllabus unified for lectures and practicals. (334868 lines) Version 23.71: Mar 20, 2024 Actions for syllabus unified for lectures and practicals. (334868 lines)
Version 23.70.2: Mar 19, 2024 Changes in course info. (335353 lines) Version 23.70.2: Mar 19, 2024 Changes in course info. (335353 lines)
Version 23.70.1: Mar 19, 2024 Bug fixing in syllabus. (335429 lines) Version 23.70.1: Mar 19, 2024 Bug fixing in syllabus. (335429 lines)

View File

@ -81,8 +81,6 @@
#define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email #define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email
#define Cfg_GOOGLE_ANALYTICS ""
#elif defined OPENSWAD_ORG // openswad.org ************************ #elif defined OPENSWAD_ORG // openswad.org ************************
#define Cfg_PLATFORM_SHORT_NAME "OpenSWAD" #define Cfg_PLATFORM_SHORT_NAME "OpenSWAD"
@ -118,29 +116,6 @@
#define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email #define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email
/* Google Analytics without cookies.
* This code comes from http://stackoverflow.com/a/19995629
*/
#define Cfg_GOOGLE_ANALYTICS ""
/*
"<script type=\"text/javascript\">" \
" (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){" \
" (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o)," \
" m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)" \
" })(window,document,'script','//www.google-analytics.com/analytics.js','ga');" \
" ga('create', 'UA-40768375-1', 'openswad.org', {" \
" 'anonymizeIp': true," \
" 'storage': 'none'," \
" 'clientId': window.localStorage.getItem('ga_clientId')" \
" });" \
" ga(function(tracker) {" \
" window.localStorage.setItem('ga_clientID', tracker.get('clientId'));" \
" });" \
" ga('send', 'pageview');" \
"</script>"
*/
#elif defined SWAD_UGR_ES // swad.ugr.es ************************* #elif defined SWAD_UGR_ES // swad.ugr.es *************************
#define Cfg_PLATFORM_SHORT_NAME "SWAD" #define Cfg_PLATFORM_SHORT_NAME "SWAD"
@ -176,26 +151,6 @@
#define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email #define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email
#define Cfg_GOOGLE_ANALYTICS ""
/*
"<script type=\"text/javascript\">" \
" (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){" \
" (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o)," \
" m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)" \
" })(window,document,'script','//www.google-analytics.com/analytics.js','ga');" \
" ga('create', 'UA-42150741-1', 'ugr.es', {" \
" 'anonymizeIp': true," \
" 'storage': 'none'," \
" 'clientId': window.localStorage.getItem('ga_clientId')" \
" });" \
" ga(function(tracker) {" \
" window.localStorage.setItem('ga_clientID', tracker.get('clientId'));" \
" });" \
" ga('send', 'pageview');" \
"</script>"
*/
#elif defined SWADBERRY_UGR_ES // swadberry.ugr.es ****************** #elif defined SWADBERRY_UGR_ES // swadberry.ugr.es ******************
#define Cfg_PLATFORM_SHORT_NAME "SWADberry" #define Cfg_PLATFORM_SHORT_NAME "SWADberry"
@ -231,8 +186,6 @@
#define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email #define Cfg_TIME_TO_SEND_PENDING_NOTIF ((time_t) (30UL * 60UL)) // After these seconds after first pending notification, all pending notifications are sent by email
#define Cfg_GOOGLE_ANALYTICS ""
#endif #endif
/* Database */ /* Database */
@ -433,14 +386,14 @@
#define Cfg_SYLLABUS_FILENAME "syllabus.xml" #define Cfg_SYLLABUS_FILENAME "syllabus.xml"
/* Main folders in file browsers */ /* Main folders in file browsers */
#define Cfg_CRS_INFO_INTRODUCTION "intro" #define Cfg_CRS_INFO_INFORMATION "intro" // TODO: Change to inf
#define Cfg_CRS_INFO_TEACHING_GUIDE "description" #define Cfg_CRS_INFO_TEACHING_GUIDE "description" // TODO: Change to gui
#define Cfg_CRS_INFO_LECTURES "teoria" #define Cfg_CRS_INFO_LECTURES "teoria" // TODO: Change to lec
#define Cfg_CRS_INFO_PRACTICALS "practicas" #define Cfg_CRS_INFO_PRACTICALS "practicas" // TODO: Change to pra
#define Cfg_CRS_INFO_BIBLIOGRAPHY "bibliografia" #define Cfg_CRS_INFO_BIBLIOGRAPHY "bibliografia" // TODO: Change to bib
#define Cfg_CRS_INFO_FAQ "FAQ" #define Cfg_CRS_INFO_FAQ "FAQ" // TODO: Change to faq
#define Cfg_CRS_INFO_LINKS "enlaces" #define Cfg_CRS_INFO_LINKS "enlaces" // TODO: Change to lnk
#define Cfg_CRS_INFO_ASSESSMENT "evaluacion" #define Cfg_CRS_INFO_ASSESSMENT "evaluacion" // TODO: Change to ass
/* RSS folders and files */ /* RSS folders and files */
#define Cfg_RSS_FOLDER "rss" #define Cfg_RSS_FOLDER "rss"

View File

@ -523,7 +523,7 @@ static void Con_ShowConnectedUsrsCurrentCrsOneByOneOnRightColumn (Rol_Role_t Rol
static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role) static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
{ {
extern const char *Txt_View_record_for_this_course; extern const char *Txt_View_record_for_this_course;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD] = ActSeeRecOneStd, [Rol_STD] = ActSeeRecOneStd,
[Rol_NET] = ActSeeRecOneTch, [Rol_NET] = ActSeeRecOneTch,
@ -624,7 +624,7 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t Role) static void Con_ShowConnectedUsrsCurrentLocationOneByOneOnMainZone (Rol_Role_t Role)
{ {
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD] = ActSeeRecOneStd, [Rol_STD] = ActSeeRecOneStd,
[Rol_NET] = ActSeeRecOneTch, [Rol_NET] = ActSeeRecOneTch,

View File

@ -463,7 +463,7 @@ static void Cty_ListOneCountryForSeeing (struct Hie_Node *Cty,unsigned NumCty)
static void Cty_PutIconsListingCountries (__attribute__((unused)) void *Args) static void Cty_PutIconsListingCountries (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit countries *****/ /***** Put icon to edit countries *****/
if (Cty_CheckIfICanEditCountries ()) if (Cty_CheckIfICanEditCountries () == Usr_I_CAN)
Cty_PutIconToEditCountries (); Cty_PutIconToEditCountries ();
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
@ -474,9 +474,10 @@ static void Cty_PutIconsListingCountries (__attribute__((unused)) void *Args)
/********************** Check if I can edit countries ************************/ /********************** Check if I can edit countries ************************/
/*****************************************************************************/ /*****************************************************************************/
bool Cty_CheckIfICanEditCountries (void) Usr_ICan_t Cty_CheckIfICanEditCountries (void)
{ {
return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM; return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -485,8 +486,7 @@ bool Cty_CheckIfICanEditCountries (void)
static void Cty_PutIconToEditCountries (void) static void Cty_PutIconToEditCountries (void)
{ {
Ico_PutContextualIconToEdit (ActEdiCty,NULL, Ico_PutContextualIconToEdit (ActEdiCty,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -692,8 +692,7 @@ static void Cty_EditCountriesInternal (void)
static void Cty_PutIconsEditingCountries (__attribute__((unused)) void *Args) static void Cty_PutIconsEditingCountries (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view countries *****/ /***** Put icon to view countries *****/
Ico_PutContextualIconToView (ActSeeCty,NULL, Ico_PutContextualIconToView (ActSeeCty,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_HIERARCHY); Fig_PutIconToShowFigure (Fig_HIERARCHY);
@ -1383,7 +1382,7 @@ static void Cty_PutParGoToCty (void *CtyCod)
static void Cty_PutFormToCreateCountry (void) static void Cty_PutFormToCreateCountry (void)
{ {
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_STR_LANG_NAME[1 + Lan_NUM_LANGUAGES]; extern const char *Txt_STR_LANG_NAME[1 + Lan_NUM_LANGUAGES];
Lan_Language_t Lan; Lan_Language_t Lan;
char StrCtyCod[Cns_MAX_DECIMAL_DIGITS_LONG + 1]; char StrCtyCod[Cns_MAX_DECIMAL_DIGITS_LONG + 1];
@ -1506,7 +1505,7 @@ static void Cty_PutHeadCountriesForEdition (void)
/******************* Receive form to create a new country ********************/ /******************* Receive form to create a new country ********************/
/*****************************************************************************/ /*****************************************************************************/
void Cty_ReceiveFormNewCountry (void) void Cty_ReceiveNewCountry (void)
{ {
extern const char *Txt_You_must_specify_the_numerical_code_of_the_new_country; extern const char *Txt_You_must_specify_the_numerical_code_of_the_new_country;
extern const char *Txt_The_numerical_code_X_already_exists; extern const char *Txt_The_numerical_code_X_already_exists;

View File

@ -35,6 +35,7 @@
#include "swad_institution.h" #include "swad_institution.h"
#include "swad_language.h" #include "swad_language.h"
#include "swad_role_type.h" #include "swad_role_type.h"
#include "swad_user.h"
/*****************************************************************************/ /*****************************************************************************/
/************************** Public types and constants ***********************/ /************************** Public types and constants ***********************/
@ -53,7 +54,7 @@ void Cty_ListCountries (void);
void Cty_ListCountries1 (void); void Cty_ListCountries1 (void);
void Cty_ListCountries2 (void); void Cty_ListCountries2 (void);
bool Cty_CheckIfICanEditCountries (void); Usr_ICan_t Cty_CheckIfICanEditCountries (void);
void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action, void Cty_DrawCountryMapAndNameWithLink (struct Hie_Node *Cty,Act_Action_t Action,
const char *ClassContainer, const char *ClassContainer,
@ -78,7 +79,7 @@ void Cty_RemoveCountry (void);
void Cty_RenameCountry (void); void Cty_RenameCountry (void);
void Cty_ChangeCtyWWW (void); void Cty_ChangeCtyWWW (void);
void Cty_ContEditAfterChgCty (void); void Cty_ContEditAfterChgCty (void);
void Cty_ReceiveFormNewCountry (void); void Cty_ReceiveNewCountry (void);
unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role); unsigned Cty_GetCachedNumCtysWithUsrs (Rol_Role_t Role);

View File

@ -341,7 +341,7 @@ static void CtyCfg_MapImage (Vie_ViewType_t ViewType,Hie_PutLink_t PutLink)
HTM_DIV_End (); HTM_DIV_End ();
/***** Map attribution *****/ /***** Map attribution *****/
if (ViewType == Vie_VIEW && Cty_CheckIfICanEditCountries ()) if (ViewType == Vie_VIEW && Cty_CheckIfICanEditCountries () == Usr_I_CAN)
{ {
HTM_DIV_Begin ("class=\"CM\""); HTM_DIV_Begin ("class=\"CM\"");
Frm_BeginForm (ActChgCtyMapAtt); Frm_BeginForm (ActChgCtyMapAtt);

View File

@ -100,11 +100,11 @@ static void Crs_EditCoursesInternal (void);
static void Crs_PutIconsEditingCourses (__attribute__((unused)) void *Args); static void Crs_PutIconsEditingCourses (__attribute__((unused)) void *Args);
static void Crs_ListCoursesForEdition (void); static void Crs_ListCoursesForEdition (void);
static void Crs_ListCoursesOfAYearForEdition (unsigned Year); static void Crs_ListCoursesOfAYearForEdition (unsigned Year);
static bool Crs_CheckIfICanEdit (struct Hie_Node *Crs); static Usr_ICan_t Crs_CheckIfICanEdit (struct Hie_Node *Crs);
static void Crs_PutFormToCreateCourse (void); static void Crs_PutFormToCreateCourse (void);
static void Crs_PutHeadCoursesForSeeing (void); static void Crs_PutHeadCoursesForSeeing (void);
static void Crs_PutHeadCoursesForEdition (void); static void Crs_PutHeadCoursesForEdition (void);
static void Crs_ReceiveFormRequestOrCreateCrs (Hie_Status_t Status); static void Crs_ReceiveRequestOrCreateCrs (Hie_Status_t Status);
static void Crs_GetParsNewCourse (struct Hie_Node *Crs); static void Crs_GetParsNewCourse (struct Hie_Node *Crs);
static void Crs_GetCourseDataFromRow (MYSQL_RES *mysql_res, static void Crs_GetCourseDataFromRow (MYSQL_RES *mysql_res,
@ -423,7 +423,7 @@ static void Crs_ListCourses (void)
static void Crs_PutIconsListCourses (__attribute__((unused)) void *Args) static void Crs_PutIconsListCourses (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit courses *****/ /***** Put icon to edit courses *****/
if (Hie_CheckIfICanEdit ()) if (Hie_CheckIfICanEdit () == Usr_I_CAN)
Crs_PutIconToEditCourses (); Crs_PutIconToEditCourses ();
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
@ -436,8 +436,7 @@ static void Crs_PutIconsListCourses (__attribute__((unused)) void *Args)
static void Crs_PutIconToEditCourses (void) static void Crs_PutIconToEditCourses (void)
{ {
Ico_PutContextualIconToEdit (ActEdiCrs,NULL, Ico_PutContextualIconToEdit (ActEdiCrs,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -613,8 +612,7 @@ static void Crs_EditCoursesInternal (void)
static void Crs_PutIconsEditingCourses (__attribute__((unused)) void *Args) static void Crs_PutIconsEditingCourses (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view courses *****/ /***** Put icon to view courses *****/
Ico_PutContextualIconToView (ActSeeCrs,NULL, Ico_PutContextualIconToView (ActSeeCrs,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_HIERARCHY); Fig_PutIconToShowFigure (Fig_HIERARCHY);
@ -653,7 +651,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
{ {
extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE]; extern const char *Txt_YEAR_OF_DEGREE[1 + Deg_MAX_YEARS_PER_DEGREE];
extern const char *Txt_COURSE_STATUS[Hie_NUM_STATUS_TXT]; extern const char *Txt_COURSE_STATUS[Hie_NUM_STATUS_TXT];
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenCrsSho, [Nam_SHRT_NAME] = ActRenCrsSho,
[Nam_FULL_NAME] = ActRenCrsFul, [Nam_FULL_NAME] = ActRenCrsFul,
@ -662,7 +660,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
unsigned YearAux; unsigned YearAux;
unsigned NumCrs; unsigned NumCrs;
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
bool ICanEdit; Usr_ICan_t ICanEdit;
unsigned NumUsrs[Rol_NUM_ROLES]; unsigned NumUsrs[Rol_NUM_ROLES];
const char *Names[Nam_NUM_SHRT_FULL_NAMES]; const char *Names[Nam_NUM_SHRT_FULL_NAMES];
@ -693,9 +691,9 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/* Put icon to remove course */ /* Put icon to remove course */
HTM_TD_Begin ("class=\"BT\""); HTM_TD_Begin ("class=\"BT\"");
if (NumUsrs[Rol_UNK] || // Course has users ==> deletion forbidden if (NumUsrs[Rol_UNK] || // Course has users ==> deletion forbidden
!ICanEdit) ICanEdit == Usr_I_CAN_NOT)
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
else // Crs->NumUsrs == 0 && ICanEdit else // Crs->NumUsrs == 0 && ICanEdit == Usr_I_CAN
Ico_PutContextualIconToRemove (ActRemCrs,NULL, Ico_PutContextualIconToRemove (ActRemCrs,NULL,
Hie_PutParOtherHieCod,&Crs->HieCod); Hie_PutParOtherHieCod,&Crs->HieCod);
HTM_TD_End (); HTM_TD_End ();
@ -707,7 +705,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/* Course year */ /* Course year */
HTM_TD_Begin ("class=\"CT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"CT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgCrsYea); Frm_BeginForm (ActChgCrsYea);
ParCod_PutPar (ParCod_OthHie,Crs->HieCod); ParCod_PutPar (ParCod_OthHie,Crs->HieCod);
@ -734,7 +732,7 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/* Institutional code of the course */ /* Institutional code of the course */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgInsCrsCod); Frm_BeginForm (ActChgInsCrsCod);
ParCod_PutPar (ParCod_OthHie,Crs->HieCod); ParCod_PutPar (ParCod_OthHie,Crs->HieCod);
@ -754,7 +752,8 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_OthHie,Crs->HieCod, ParCod_OthHie,Crs->HieCod,
Names, Names,
ICanEdit); // Put form? ICanEdit == Usr_I_CAN ? Frm_PUT_FORM :
Frm_DONT_PUT_FORM);
/* Current number of teachers in this course */ /* Current number of teachers in this course */
HTM_TD_Unsigned (NumUsrs[Rol_TCH] + HTM_TD_Unsigned (NumUsrs[Rol_TCH] +
@ -790,11 +789,12 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/************** Check if I can edit, remove, etc. a course *******************/ /************** Check if I can edit, remove, etc. a course *******************/
/*****************************************************************************/ /*****************************************************************************/
static bool Crs_CheckIfICanEdit (struct Hie_Node *Crs) static Usr_ICan_t Crs_CheckIfICanEdit (struct Hie_Node *Crs)
{ {
return Gbl.Usrs.Me.Role.Logged >= Rol_DEG_ADM || // I am a degree administrator or higher return (Gbl.Usrs.Me.Role.Logged >= Rol_DEG_ADM || // I am a degree administrator or higher
((Crs->Status & Hie_STATUS_BIT_PENDING) != 0 && // Course is not yet activated ((Crs->Status & Hie_STATUS_BIT_PENDING) != 0 && // Course is not yet activated
Gbl.Usrs.Me.UsrDat.UsrCod == Crs->RequesterUsrCod); // I am the requester Gbl.Usrs.Me.UsrDat.UsrCod == Crs->RequesterUsrCod)) ? Usr_I_CAN : // I am the requester
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -942,33 +942,33 @@ static void Crs_PutHeadCoursesForEdition (void)
/****************** Receive form to request a new course *********************/ /****************** Receive form to request a new course *********************/
/*****************************************************************************/ /*****************************************************************************/
void Crs_ReceiveFormReqCrs (void) void Crs_ReceiveReqCrs (void)
{ {
/***** Course constructor *****/ /***** Course constructor *****/
Crs_EditingCourseConstructor (); Crs_EditingCourseConstructor ();
/***** Receive form to request a new course *****/ /***** Receive form to request a new course *****/
Crs_ReceiveFormRequestOrCreateCrs ((Hie_Status_t) Hie_STATUS_BIT_PENDING); Crs_ReceiveRequestOrCreateCrs ((Hie_Status_t) Hie_STATUS_BIT_PENDING);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************* Receive form to create a new course *********************/ /******************* Receive form to create a new course *********************/
/*****************************************************************************/ /*****************************************************************************/
void Crs_ReceiveFormNewCrs (void) void Crs_ReceiveNewCrs (void)
{ {
/***** Course constructor *****/ /***** Course constructor *****/
Crs_EditingCourseConstructor (); Crs_EditingCourseConstructor ();
/***** Receive form to create a new course *****/ /***** Receive form to create a new course *****/
Crs_ReceiveFormRequestOrCreateCrs ((Hie_Status_t) 0); Crs_ReceiveRequestOrCreateCrs ((Hie_Status_t) 0);
} }
/*****************************************************************************/ /*****************************************************************************/
/************* Receive form to request or create a new course ****************/ /************* Receive form to request or create a new course ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Crs_ReceiveFormRequestOrCreateCrs (Hie_Status_t Status) static void Crs_ReceiveRequestOrCreateCrs (Hie_Status_t Status)
{ {
extern const char *Txt_Created_new_course_X; extern const char *Txt_Created_new_course_X;
extern const char *Txt_The_year_X_is_not_allowed; extern const char *Txt_The_year_X_is_not_allowed;
@ -1052,7 +1052,7 @@ void Crs_RemoveCourse (void)
/***** Get data of the course from database *****/ /***** Get data of the course from database *****/
Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs); Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs)) if (Crs_CheckIfICanEdit (Crs_EditingCrs) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Check if this course has users *****/ /***** Check if this course has users *****/
@ -1295,7 +1295,7 @@ void Crs_ChangeInsCrsCod (void)
/* Get data of the course */ /* Get data of the course */
Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs); Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs)) if (Crs_CheckIfICanEdit (Crs_EditingCrs) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Change the institutional course code *****/ /***** Change the institutional course code *****/
@ -1340,7 +1340,7 @@ void Crs_ChangeCrsYear (void)
/* Get data of the course */ /* Get data of the course */
Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs); Hie_GetDataByCod[Hie_CRS] (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs)) if (Crs_CheckIfICanEdit (Crs_EditingCrs) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
@ -1445,7 +1445,7 @@ void Crs_RenameCourse (struct Hie_Node *Crs,Nam_ShrtOrFullName_t ShrtOrFull)
/***** Get from the database the data of the degree *****/ /***** Get from the database the data of the degree *****/
Hie_GetDataByCod[Hie_CRS] (Crs); Hie_GetDataByCod[Hie_CRS] (Crs);
if (!Crs_CheckIfICanEdit (Crs)) if (Crs_CheckIfICanEdit (Crs) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Check if new name is empty *****/ /***** Check if new name is empty *****/

View File

@ -59,8 +59,8 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void);
void Crs_EditCourses (void); void Crs_EditCourses (void);
void Crs_ReceiveFormReqCrs (void); void Crs_ReceiveReqCrs (void);
void Crs_ReceiveFormNewCrs (void); void Crs_ReceiveNewCrs (void);
void Crs_RemoveCourse (void); void Crs_RemoveCourse (void);
bool Crs_GetCourseDataByCod (struct Hie_Node *Crs); bool Crs_GetCourseDataByCod (struct Hie_Node *Crs);

View File

@ -201,7 +201,7 @@ void CrsCfg_PrintConfiguration (void)
static void CrsCfg_Degree (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm) static void CrsCfg_Degree (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
unsigned NumDeg; unsigned NumDeg;
const struct Hie_Node *Deg; const struct Hie_Node *Deg;

View File

@ -74,7 +74,7 @@ const char *Dat_TimeStatusClass[Dat_NUM_TIME_STATUS][HidVis_NUM_HIDDEN_VISIBLE]
/**************************** Private constants ******************************/ /**************************** Private constants ******************************/
/*****************************************************************************/ /*****************************************************************************/
static const unsigned Dat_NumDaysMonth[1 + 12] = static unsigned Dat_NumDaysMonth[1 + 12] =
{ {
[ 0] = 0, [ 0] = 0,
[ 1] = 31, // January [ 1] = 31, // January
@ -1098,7 +1098,7 @@ void Dat_GetDateFromForm (const char *ParNameDay,const char *ParNameMonth,const
/******* Set initial date to distant past and end date to current date *******/ /******* Set initial date to distant past and end date to current date *******/
/*****************************************************************************/ /*****************************************************************************/
void Dat_SetIniEndDatesToPastAndNow (void) void Dat_SetDatesToPastAndNow (void)
{ {
Dat_Time.Range.TimeUTC[Dat_STR_TIME] = (time_t) 0; Dat_Time.Range.TimeUTC[Dat_STR_TIME] = (time_t) 0;
Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC ();
@ -1109,7 +1109,7 @@ void Dat_SetIniEndDatesToPastAndNow (void)
/************ and set initial date to end date minus several days ************/ /************ and set initial date to end date minus several days ************/
/*****************************************************************************/ /*****************************************************************************/
void Dat_SetIniEndDatesToRecentWeeks (void) void Dat_SetDatesToRecentWeeks (void)
{ {
Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC (); Dat_Time.Range.TimeUTC[Dat_END_TIME] = Dat_GetStartExecutionTimeUTC ();
Dat_Time.Range.TimeUTC[Dat_STR_TIME] = Dat_Time.Range.TimeUTC[Dat_END_TIME] - Dat_Time.Range.TimeUTC[Dat_STR_TIME] = Dat_Time.Range.TimeUTC[Dat_END_TIME] -

View File

@ -190,8 +190,8 @@ void Dat_WriteFormDate (unsigned FirstYear,unsigned LastYear,
void Dat_GetDateFromForm (const char *ParNameDay,const char *ParNameMonth,const char *ParNameYear, void Dat_GetDateFromForm (const char *ParNameDay,const char *ParNameMonth,const char *ParNameYear,
unsigned *Day,unsigned *Month,unsigned *Year); unsigned *Day,unsigned *Month,unsigned *Year);
void Dat_SetIniEndDatesToPastAndNow (void); void Dat_SetDatesToPastAndNow (void);
void Dat_SetIniEndDatesToRecentWeeks (void); void Dat_SetDatesToRecentWeeks (void);
void Dat_WriteParsIniEndDates (void); void Dat_WriteParsIniEndDates (void);
void Dat_GetIniEndDatesFromForm (void); void Dat_GetIniEndDatesFromForm (void);

View File

@ -84,7 +84,7 @@ static struct Hie_Node *Deg_EditingDeg = NULL; // Static variable to keep the de
/*****************************************************************************/ /*****************************************************************************/
static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes); static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes);
static bool Deg_CheckIfICanEditADegree (struct Hie_Node *Deg); static Usr_ICan_t Deg_CheckIfICanEditADegree (struct Hie_Node *Deg);
static void Deg_PutFormToCreateDegree (const struct DegTyp_DegTypes *DegTypes); static void Deg_PutFormToCreateDegree (const struct DegTyp_DegTypes *DegTypes);
static void Deg_PutHeadDegreesForSeeing (void); static void Deg_PutHeadDegreesForSeeing (void);
static void Deg_PutHeadDegreesForEdition (void); static void Deg_PutHeadDegreesForEdition (void);
@ -97,7 +97,7 @@ static void Deg_ListOneDegreeForSeeing (struct Hie_Node *Deg,unsigned NumDeg);
static void Deg_EditDegreesInternal (void); static void Deg_EditDegreesInternal (void);
static void Deg_PutIconsEditingDegrees (__attribute__((unused)) void *Args); static void Deg_PutIconsEditingDegrees (__attribute__((unused)) void *Args);
static void Deg_ReceiveFormRequestOrCreateDeg (Hie_Status_t Status); static void Deg_ReceiveRequestOrCreateDeg (Hie_Status_t Status);
static void Deg_GetDegreeDataFromRow (MYSQL_RES *mysql_res, static void Deg_GetDegreeDataFromRow (MYSQL_RES *mysql_res,
struct Hie_Node *Deg); struct Hie_Node *Deg);
@ -314,7 +314,7 @@ void Deg_ShowDegsOfCurrentCtr (void)
static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes) static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
{ {
extern const char *Txt_DEGREE_STATUS[Hie_NUM_STATUS_TXT]; extern const char *Txt_DEGREE_STATUS[Hie_NUM_STATUS_TXT];
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenDegSho, [Nam_SHRT_NAME] = ActRenDegSho,
[Nam_FULL_NAME] = ActRenDegFul, [Nam_FULL_NAME] = ActRenDegFul,
@ -325,7 +325,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
struct DegTyp_DegreeType *DegTyp; struct DegTyp_DegreeType *DegTyp;
char WWW[Cns_MAX_BYTES_WWW + 1]; char WWW[Cns_MAX_BYTES_WWW + 1];
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
bool ICanEdit; Usr_ICan_t ICanEdit;
unsigned NumCrss; unsigned NumCrss;
unsigned NumUsrsInCrssOfDeg; unsigned NumUsrsInCrssOfDeg;
const char *Names[Nam_NUM_SHRT_FULL_NAMES]; const char *Names[Nam_NUM_SHRT_FULL_NAMES];
@ -359,7 +359,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
/* Put icon to remove degree */ /* Put icon to remove degree */
HTM_TD_Begin ("class=\"BT\""); HTM_TD_Begin ("class=\"BT\"");
if (!ICanEdit || if (ICanEdit == Usr_I_CAN_NOT ||
NumCrss || // Degree has courses ==> deletion forbidden NumCrss || // Degree has courses ==> deletion forbidden
NumUsrsInCrssOfDeg) NumUsrsInCrssOfDeg)
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
@ -384,11 +384,12 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_OthHie,Deg->HieCod, ParCod_OthHie,Deg->HieCod,
Names, Names,
ICanEdit); // Put form? ICanEdit == Usr_I_CAN ? Frm_PUT_FORM :
Frm_DONT_PUT_FORM);
/* Degree type */ /* Degree type */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgDegTyp); Frm_BeginForm (ActChgDegTyp);
ParCod_PutPar (ParCod_OthHie,Deg->HieCod); ParCod_PutPar (ParCod_OthHie,Deg->HieCod);
@ -423,7 +424,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
/* Degree WWW */ /* Degree WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgDegWWW); Frm_BeginForm (ActChgDegWWW);
ParCod_PutPar (ParCod_OthHie,Deg->HieCod); ParCod_PutPar (ParCod_OthHie,Deg->HieCod);
@ -483,11 +484,12 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
/************** Check if I can edit, remove, etc. a degree *******************/ /************** Check if I can edit, remove, etc. a degree *******************/
/*****************************************************************************/ /*****************************************************************************/
static bool Deg_CheckIfICanEditADegree (struct Hie_Node *Deg) static Usr_ICan_t Deg_CheckIfICanEditADegree (struct Hie_Node *Deg)
{ {
return Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM || // I am a center administrator or higher return (Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM || // I am a center administrator or higher
((Deg->Status & Hie_STATUS_BIT_PENDING) != 0 && // Degree is not yet activated ((Deg->Status & Hie_STATUS_BIT_PENDING) != 0 && // Degree is not yet activated
Gbl.Usrs.Me.UsrDat.UsrCod == Deg->RequesterUsrCod); // I am the requester Gbl.Usrs.Me.UsrDat.UsrCod == Deg->RequesterUsrCod)) ? Usr_I_CAN : // I am the requester
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -719,7 +721,7 @@ static void Deg_ListDegrees (void)
static void Deg_PutIconsListingDegrees (__attribute__((unused)) void *Args) static void Deg_PutIconsListingDegrees (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit degrees *****/ /***** Put icon to edit degrees *****/
if (Hie_CheckIfICanEdit ()) if (Hie_CheckIfICanEdit () == Usr_I_CAN)
Deg_PutIconToEditDegrees (); Deg_PutIconToEditDegrees ();
/***** Put icon to view degree types *****/ /***** Put icon to view degree types *****/
@ -735,8 +737,7 @@ static void Deg_PutIconsListingDegrees (__attribute__((unused)) void *Args)
static void Deg_PutIconToEditDegrees (void) static void Deg_PutIconToEditDegrees (void)
{ {
Ico_PutContextualIconToEdit (ActEdiDeg,NULL, Ico_PutContextualIconToEdit (ActEdiDeg,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -882,7 +883,7 @@ static void Deg_EditDegreesInternal (void)
Ale_ShowAlert (Ale_WARNING,Txt_No_types_of_degree); Ale_ShowAlert (Ale_WARNING,Txt_No_types_of_degree);
/***** Form to create the first degree type *****/ /***** Form to create the first degree type *****/
if (DegTyp_CheckIfICanCreateDegreeTypes ()) if (DegTyp_CheckIfICanCreateDegreeTypes () == Usr_I_CAN)
DegTyp_EditDegreeTypes (&DegTypes); DegTyp_EditDegreeTypes (&DegTypes);
} }
@ -900,8 +901,7 @@ static void Deg_EditDegreesInternal (void)
static void Deg_PutIconsEditingDegrees (__attribute__((unused)) void *Args) static void Deg_PutIconsEditingDegrees (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view degrees *****/ /***** Put icon to view degrees *****/
Ico_PutContextualIconToView (ActSeeDeg,NULL, Ico_PutContextualIconToView (ActSeeDeg,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to view types of degree *****/ /***** Put icon to view types of degree *****/
DegTyp_PutIconToViewDegreeTypes (); DegTyp_PutIconToViewDegreeTypes ();
@ -916,8 +916,7 @@ static void Deg_PutIconsEditingDegrees (__attribute__((unused)) void *Args)
void Deg_PutIconToViewDegrees (void) void Deg_PutIconToViewDegrees (void)
{ {
Lay_PutContextualLinkOnlyIcon (ActSeeDeg,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeDeg,NULL,NULL,NULL,
NULL,NULL,
"graduation-cap.svg",Ico_BLACK); "graduation-cap.svg",Ico_BLACK);
} }
@ -999,33 +998,33 @@ void Deg_FreeListAllDegsWithStds (struct Hie_List *Degs)
/****************** Receive form to request a new degree *********************/ /****************** Receive form to request a new degree *********************/
/*****************************************************************************/ /*****************************************************************************/
void Deg_ReceiveFormReqDeg (void) void Deg_ReceiveReqDeg (void)
{ {
/***** Degree constructor *****/ /***** Degree constructor *****/
Deg_EditingDegreeConstructor (); Deg_EditingDegreeConstructor ();
/***** Receive form to request a new degree *****/ /***** Receive form to request a new degree *****/
Deg_ReceiveFormRequestOrCreateDeg ((Hie_Status_t) Hie_STATUS_BIT_PENDING); Deg_ReceiveRequestOrCreateDeg ((Hie_Status_t) Hie_STATUS_BIT_PENDING);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************* Receive form to create a new degree *********************/ /******************* Receive form to create a new degree *********************/
/*****************************************************************************/ /*****************************************************************************/
void Deg_ReceiveFormNewDeg (void) void Deg_ReceiveNewDeg (void)
{ {
/***** Degree constructor *****/ /***** Degree constructor *****/
Deg_EditingDegreeConstructor (); Deg_EditingDegreeConstructor ();
/***** Receive form to create a new degree *****/ /***** Receive form to create a new degree *****/
Deg_ReceiveFormRequestOrCreateDeg ((Hie_Status_t) 0); Deg_ReceiveRequestOrCreateDeg ((Hie_Status_t) 0);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************* Receive form to create a new degree *********************/ /******************* Receive form to create a new degree *********************/
/*****************************************************************************/ /*****************************************************************************/
static void Deg_ReceiveFormRequestOrCreateDeg (Hie_Status_t Status) static void Deg_ReceiveRequestOrCreateDeg (Hie_Status_t Status)
{ {
extern const char *Txt_Created_new_degree_X; extern const char *Txt_Created_new_degree_X;
char *Names[Nam_NUM_SHRT_FULL_NAMES]; char *Names[Nam_NUM_SHRT_FULL_NAMES];

View File

@ -66,8 +66,8 @@ void Deg_GetListAllDegsWithStds (struct Hie_List *Degs);
void Deg_GetListDegsInCurrentCtr (void); void Deg_GetListDegsInCurrentCtr (void);
void Deg_FreeListAllDegsWithStds (struct Hie_List *Degs); void Deg_FreeListAllDegsWithStds (struct Hie_List *Degs);
void Deg_ReceiveFormReqDeg (void); void Deg_ReceiveReqDeg (void);
void Deg_ReceiveFormNewDeg (void); void Deg_ReceiveNewDeg (void);
void Deg_RemoveDegree (void); void Deg_RemoveDegree (void);
bool Deg_GetDegreeDataByCod (struct Hie_Node *Node); bool Deg_GetDegreeDataByCod (struct Hie_Node *Node);

View File

@ -194,7 +194,7 @@ static void DegCfg_PutIconsToPrintAndUpload (__attribute__((unused)) void *Args)
static void DegCfg_Center (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm) static void DegCfg_Center (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
unsigned NumCtr; unsigned NumCtr;
const struct Hie_Node *Ctr; const struct Hie_Node *Ctr;

View File

@ -287,8 +287,7 @@ static void DegTyp_EditDegreeTypesInternal (const struct DegTyp_DegTypes *DegTyp
static void DegTyp_PutIconsEditingDegreeTypes (__attribute__((unused)) void *Args) static void DegTyp_PutIconsEditingDegreeTypes (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view degree types *****/ /***** Put icon to view degree types *****/
Ico_PutContextualIconToView (ActSeeDegTyp,NULL, Ico_PutContextualIconToView (ActSeeDegTyp,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to view degrees *****/ /***** Put icon to view degrees *****/
Deg_PutIconToViewDegrees (); Deg_PutIconToViewDegrees ();
@ -303,8 +302,7 @@ static void DegTyp_PutIconsEditingDegreeTypes (__attribute__((unused)) void *Arg
void DegTyp_PutIconToViewDegreeTypes (void) void DegTyp_PutIconToViewDegreeTypes (void)
{ {
Lay_PutContextualLinkOnlyIcon (ActSeeDegTyp,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeDegTyp,NULL,NULL,NULL,
NULL,NULL,
"sitemap.svg",Ico_BLACK); "sitemap.svg",Ico_BLACK);
} }
@ -375,9 +373,8 @@ static void DegTyp_PutIconsListingDegTypes (__attribute__((unused)) void *Args)
static void DegTyp_PutIconToEditDegTypes (__attribute__((unused)) void *Args) static void DegTyp_PutIconToEditDegTypes (__attribute__((unused)) void *Args)
{ {
if (Gbl.Hierarchy.Level == Hie_CTR && // Only editable if center tab is visible if (Gbl.Hierarchy.Level == Hie_CTR && // Only editable if center tab is visible
DegTyp_CheckIfICanCreateDegreeTypes ()) DegTyp_CheckIfICanCreateDegreeTypes () == Usr_I_CAN)
Ico_PutContextualIconToEdit (ActEdiDegTyp,NULL, Ico_PutContextualIconToEdit (ActEdiDegTyp,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -445,9 +442,10 @@ static void DegTyp_ListDegreeTypesForEdition (const struct DegTyp_DegTypes *DegT
/******************** Check if I can create degree types *********************/ /******************** Check if I can create degree types *********************/
/*****************************************************************************/ /*****************************************************************************/
bool DegTyp_CheckIfICanCreateDegreeTypes (void) Usr_ICan_t DegTyp_CheckIfICanCreateDegreeTypes (void)
{ {
return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM); return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -637,7 +635,7 @@ void DegTyp_FreeListDegreeTypes (struct DegTyp_DegTypes *DegTypes)
/***************** Receive form to create a new degree type ******************/ /***************** Receive form to create a new degree type ******************/
/*****************************************************************************/ /*****************************************************************************/
void DegTyp_ReceiveFormNewDegreeType (void) void DegTyp_ReceiveNewDegreeType (void)
{ {
extern const char *Txt_The_type_of_degree_X_already_exists; extern const char *Txt_The_type_of_degree_X_already_exists;
extern const char *Txt_Created_new_type_of_degree_X; extern const char *Txt_Created_new_type_of_degree_X;

View File

@ -73,13 +73,13 @@ void DegTyp_EditDegreeTypes (const struct DegTyp_DegTypes *DegTypes);
void DegTyp_PutIconToViewDegreeTypes (void); void DegTyp_PutIconToViewDegreeTypes (void);
bool DegTyp_CheckIfICanCreateDegreeTypes (void); Usr_ICan_t DegTyp_CheckIfICanCreateDegreeTypes (void);
void DegTyp_GetListDegreeTypes (struct DegTyp_DegTypes *DegTypes, void DegTyp_GetListDegreeTypes (struct DegTyp_DegTypes *DegTypes,
Hie_Level_t Level,DegTyp_Order_t Order); Hie_Level_t Level,DegTyp_Order_t Order);
void DegTyp_FreeListDegreeTypes (struct DegTyp_DegTypes *DegTypes); void DegTyp_FreeListDegreeTypes (struct DegTyp_DegTypes *DegTypes);
void DegTyp_ReceiveFormNewDegreeType (void); void DegTyp_ReceiveNewDegreeType (void);
void DegTyp_RemoveDegreeType (void); void DegTyp_RemoveDegreeType (void);

View File

@ -53,7 +53,7 @@
/****************************** Private constants ****************************/ /****************************** Private constants ****************************/
/*****************************************************************************/ /*****************************************************************************/
static const bool Dpt_ICanEditDpts[Rol_NUM_ROLES] = static bool Dpt_ICanEditDpts[Rol_NUM_ROLES] =
{ {
/* Users who can edit */ /* Users who can edit */
[Rol_INS_ADM] = true, [Rol_INS_ADM] = true,
@ -244,8 +244,7 @@ static Dpt_Order_t Dpt_GetParDptOrder (void)
static void Dpt_PutIconToEditDpts (__attribute__((unused)) void *Args) static void Dpt_PutIconToEditDpts (__attribute__((unused)) void *Args)
{ {
if (Dpt_ICanEditDpts[Gbl.Usrs.Me.Role.Logged]) if (Dpt_ICanEditDpts[Gbl.Usrs.Me.Role.Logged])
Ico_PutContextualIconToEdit (ActEdiDpt,NULL, Ico_PutContextualIconToEdit (ActEdiDpt,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -254,8 +253,7 @@ static void Dpt_PutIconToEditDpts (__attribute__((unused)) void *Args)
static void Dpt_PutIconToViewDpts (__attribute__((unused)) void *Args) static void Dpt_PutIconToViewDpts (__attribute__((unused)) void *Args)
{ {
Ico_PutContextualIconToView (ActSeeDpt,NULL, Ico_PutContextualIconToView (ActSeeDpt,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -441,7 +439,7 @@ static void Dpt_GetDepartmentDataFromRow (MYSQL_RES *mysql_res,
static void Dpt_ListDepartmentsForEdition (const struct Dpt_Departments *Departments) static void Dpt_ListDepartmentsForEdition (const struct Dpt_Departments *Departments)
{ {
extern const char *Txt_Another_institution; extern const char *Txt_Another_institution;
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenDptSho, [Nam_SHRT_NAME] = ActRenDptSho,
[Nam_FULL_NAME] = ActRenDptFul, [Nam_FULL_NAME] = ActRenDptFul,
@ -515,7 +513,7 @@ static void Dpt_ListDepartmentsForEdition (const struct Dpt_Departments *Departm
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_Dpt,Dpt->DptCod, ParCod_Dpt,Dpt->DptCod,
Names, Names,
true); // Put form Frm_PUT_FORM);
/* Department WWW */ /* Department WWW */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -862,7 +860,7 @@ static void Dpt_PutHeadDepartments (void)
/***************** Receive form to create a new department *******************/ /***************** Receive form to create a new department *******************/
/*****************************************************************************/ /*****************************************************************************/
void Dpt_ReceiveFormNewDpt (void) void Dpt_ReceiveNewDpt (void)
{ {
extern const char *Txt_Created_new_department_X; extern const char *Txt_Created_new_department_X;
char *Names[Nam_NUM_SHRT_FULL_NAMES]; char *Names[Nam_NUM_SHRT_FULL_NAMES];

View File

@ -73,7 +73,7 @@ void Dpt_RenameDepartFull (void);
void Dpt_ChangeDptWWW (void); void Dpt_ChangeDptWWW (void);
void Dpt_ContEditAfterChgDpt (void); void Dpt_ContEditAfterChgDpt (void);
void Dpt_ReceiveFormNewDpt (void); void Dpt_ReceiveNewDpt (void);
unsigned Dpt_GetTotalNumberOfDepartments (void); unsigned Dpt_GetTotalNumberOfDepartments (void);
void Dpt_FlushCacheNumDptsInIns (void); void Dpt_FlushCacheNumDptsInIns (void);
unsigned Dpt_GetNumDptsInIns (long InsCod); unsigned Dpt_GetNumDptsInIns (long InsCod);

View File

@ -311,7 +311,7 @@ static void Dup_ListSimilarUsrs (void)
Usr_NUM_MAIN_FIELDS_DATA_USR-2, Usr_NUM_MAIN_FIELDS_DATA_USR-2,
The_GetColorRows ()); The_GetColorRows ());
/* Button to remove this user */ /* Button to remove this user */
if (Acc_CheckIfICanEliminateAccount (UsrDat.UsrCod)) if (Acc_CheckIfICanEliminateAccount (UsrDat.UsrCod) == Usr_I_CAN)
Dup_PutButtonToEliminateUsrAccount (&UsrDat); Dup_PutButtonToEliminateUsrAccount (&UsrDat);
/* Button to remove from list of possible duplicate users */ /* Button to remove from list of possible duplicate users */
if (Dup_DB_CheckIfUsrIsDup (UsrDat.UsrCod)) if (Dup_DB_CheckIfUsrIsDup (UsrDat.UsrCod))

View File

@ -111,7 +111,7 @@ static void Enr_ShowFormRegRemSeveralUsrs (Rol_Role_t Role);
static void Enr_PutAreaToEnterUsrsIDs (void); static void Enr_PutAreaToEnterUsrsIDs (void);
static void Enr_PutActionsRegRemSeveralUsrs (void); static void Enr_PutActionsRegRemSeveralUsrs (void);
static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role); static void Enr_ReceiveUsrsCrs (Rol_Role_t Role);
static void Enr_PutActionModifyOneUsr (bool *OptionChecked, static void Enr_PutActionModifyOneUsr (bool *OptionChecked,
bool UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther); bool UsrBelongsToCrs,Usr_MeOrOther_t MeOrOther);
@ -145,7 +145,7 @@ static void Enr_AskIfRegRemUsr (struct Usr_ListUsrCods *ListUsrCods,Rol_Role_t R
static void Enr_ShowFormToEditOtherUsr (void); static void Enr_ShowFormToEditOtherUsr (void);
static bool Enr_CheckIfICanRemUsrFromCrs (void); static Usr_ICan_t Enr_CheckIfICanRemUsrFromCrs (void);
static void Enr_AskIfRemoveUsrFromCrs (struct Usr_Data *UsrDat); static void Enr_AskIfRemoveUsrFromCrs (struct Usr_Data *UsrDat);
static void Enr_EffectivelyRemUsrFromCrs (struct Usr_Data *UsrDat, static void Enr_EffectivelyRemUsrFromCrs (struct Usr_Data *UsrDat,
@ -173,7 +173,7 @@ void Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (void)
/*****************************************************************************/ /*****************************************************************************/
void Enr_PutButtonInlineToRegisterStds (long CrsCod, void Enr_PutButtonInlineToRegisterStds (long CrsCod,
unsigned Level,Lay_LastItem_t IsLastItemInLevel[], unsigned Level,const Lay_LastItem_t *IsLastItemInLevel,
Lay_Highlight_t Highlight) Lay_Highlight_t Highlight)
{ {
extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT]; extern const char *Lay_HighlightClass[Lay_NUM_HIGHLIGHT];
@ -873,22 +873,22 @@ static void Enr_PutActionsRegRemSeveralUsrs (void)
/******* Receive the list of users of the course to register/remove **********/ /******* Receive the list of users of the course to register/remove **********/
/*****************************************************************************/ /*****************************************************************************/
void Enr_ReceiveFormAdminStds (void) void Enr_ReceiveAdminStds (void)
{ {
Enr_ReceiveFormUsrsCrs (Rol_STD); Enr_ReceiveUsrsCrs (Rol_STD);
} }
void Enr_ReceiveFormAdminNonEditTchs (void) void Enr_ReceiveAdminNonEditTchs (void)
{ {
Enr_ReceiveFormUsrsCrs (Rol_NET); Enr_ReceiveUsrsCrs (Rol_NET);
} }
void Enr_ReceiveFormAdminTchs (void) void Enr_ReceiveAdminTchs (void)
{ {
Enr_ReceiveFormUsrsCrs (Rol_TCH); Enr_ReceiveUsrsCrs (Rol_TCH);
} }
static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role) static void Enr_ReceiveUsrsCrs (Rol_Role_t Role)
{ {
extern const char *Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group; extern const char *Txt_In_a_type_of_group_with_single_enrolment_students_can_not_be_registered_in_more_than_one_group;
extern const char *Txt_No_user_has_been_eliminated; extern const char *Txt_No_user_has_been_eliminated;
@ -1428,7 +1428,7 @@ bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther)
} }
/***** Eliminate user completely from platform *****/ /***** Eliminate user completely from platform *****/
if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN)
{ {
Enr_PutActionRemUsrAcc (&OptionChecked,MeOrOther); Enr_PutActionRemUsrAcc (&OptionChecked,MeOrOther);
OptionsShown = true; OptionsShown = true;
@ -2121,7 +2121,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
bool UsrExists; bool UsrExists;
bool UsrBelongsToCrs; bool UsrBelongsToCrs;
Rol_Role_t DesiredRole; Rol_Role_t DesiredRole;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD] = ActReqMdfStd, [Rol_STD] = ActReqMdfStd,
[Rol_NET] = ActReqMdfNET, [Rol_NET] = ActReqMdfNET,
@ -2369,16 +2369,18 @@ static void Enr_RemUsrEnrolmentRequestInCrs (long UsrCod,long CrsCod)
void Enr_PutLinkToAdminOneUsr (Act_Action_t NextAction) void Enr_PutLinkToAdminOneUsr (Act_Action_t NextAction)
{ {
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES];
extern const char *Txt_Administer_me; extern const char *Txt_Administer_me;
extern const char *Txt_Administer_one_user; extern const char *Txt_Administer_one_user;
const char *TitleText = Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged] ? Txt_Administer_one_user : static const char **TitleText[] =
Txt_Administer_me; {
[Usr_I_CAN_NOT] = &Txt_Administer_me,
[Usr_I_CAN ] = &Txt_Administer_one_user,
};
Lay_PutContextualLinkIconText (NextAction,NULL, Lay_PutContextualLinkIconText (NextAction,NULL,
NULL,NULL, NULL,NULL,
"user-cog.svg",Ico_BLACK, "user-cog.svg",Ico_BLACK,
TitleText,NULL); *TitleText[Adm_CheckIfICanAdminOtherUsrs ()],NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2421,10 +2423,8 @@ void Enr_ReqRegRemOth (void)
void Enr_ReqRegRemStd (void) void Enr_ReqRegRemStd (void)
{ {
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES];
/***** Contextual menu *****/ /***** Contextual menu *****/
if (Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged]) if (Adm_CheckIfICanAdminOtherUsrs () == Usr_I_CAN)
{ {
Mnu_ContextMenuBegin (); Mnu_ContextMenuBegin ();
Enr_PutLinkToAdminSeveralUsrs (Rol_STD); // Admin several students Enr_PutLinkToAdminSeveralUsrs (Rol_STD); // Admin several students
@ -2443,9 +2443,7 @@ void Enr_ReqRegRemTch (void)
static void Enr_ReqRegRemUsr (Rol_Role_t Role) static void Enr_ReqRegRemUsr (Rol_Role_t Role)
{ {
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES]; if (Adm_CheckIfICanAdminOtherUsrs () == Usr_I_CAN)
if (Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged])
/***** Form to request the user's ID of another user *****/ /***** Form to request the user's ID of another user *****/
Enr_ReqAnotherUsrIDToRegisterRemove (Role); Enr_ReqAnotherUsrIDToRegisterRemove (Role);
else else
@ -2461,7 +2459,7 @@ static void Enr_ReqAnotherUsrIDToRegisterRemove (Rol_Role_t Role)
{ {
extern const char *Hlp_USERS_Administration_administer_one_user; extern const char *Hlp_USERS_Administration_administer_one_user;
extern const char *Txt_Administer_one_user; extern const char *Txt_Administer_one_user;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_GST] = ActReqMdfOth, [Rol_GST] = ActReqMdfOth,
[Rol_STD] = ActReqMdfStd, [Rol_STD] = ActReqMdfStd,
@ -2675,7 +2673,7 @@ void Enr_ReqRemUsrFromCrs (void)
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Enr_CheckIfICanRemUsrFromCrs ()) if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN)
Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat); Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat);
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -2695,7 +2693,7 @@ void Enr_RemUsrFromCrs1 (void)
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
{ {
if (Enr_CheckIfICanRemUsrFromCrs ()) if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN)
Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,&Gbl.Hierarchy.Node[Hie_CRS], Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,&Gbl.Hierarchy.Node[Hie_CRS],
Enr_DO_NOT_REMOVE_USR_PRODUCTION, Enr_DO_NOT_REMOVE_USR_PRODUCTION,
Cns_VERBOSE); Cns_VERBOSE);
@ -2720,23 +2718,24 @@ void Enr_RemUsrFromCrs2 (void)
/*********** Check if I can remove another user in current course ************/ /*********** Check if I can remove another user in current course ************/
/*****************************************************************************/ /*****************************************************************************/
static bool Enr_CheckIfICanRemUsrFromCrs (void) static Usr_ICan_t Enr_CheckIfICanRemUsrFromCrs (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: case Rol_STD:
case Rol_NET: case Rol_NET:
// A student or non-editing teacher can remove herself/himself // A student or non-editing teacher can remove herself/himself
return Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_ME; return (Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_ME) ? Usr_I_CAN :
Usr_I_CAN_NOT;
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:
case Rol_CTR_ADM: case Rol_CTR_ADM:
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
// A teacher or administrator can remove anyone // A teacher or administrator can remove anyone
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }
@ -2775,7 +2774,7 @@ void Enr_CreateNewUsr1 (void)
extern const char *Txt_The_ID_X_is_not_valid; extern const char *Txt_The_ID_X_is_not_valid;
Rol_Role_t OldRole; Rol_Role_t OldRole;
Rol_Role_t NewRole; Rol_Role_t NewRole;
static const Act_Action_t Action[Rol_NUM_ROLES] = static Act_Action_t Action[Rol_NUM_ROLES] =
{ {
[Rol_GST] = ActCreOth, [Rol_GST] = ActCreOth,
[Rol_STD] = ActCreStd, [Rol_STD] = ActCreStd,
@ -2877,7 +2876,7 @@ void Enr_ModifyUsr1 (void)
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
Rol_Role_t OldRole; Rol_Role_t OldRole;
Rol_Role_t NewRole; Rol_Role_t NewRole;
static const Act_Action_t Action[Rol_NUM_ROLES] = static Act_Action_t Action[Rol_NUM_ROLES] =
{ {
[Rol_GST] = ActUpdOth, [Rol_GST] = ActUpdOth,
[Rol_STD] = ActUpdStd, [Rol_STD] = ActUpdStd,
@ -2902,7 +2901,7 @@ void Enr_ModifyUsr1 (void)
if (MeOrOther == Usr_ME || Gbl.Usrs.Me.Role.Logged >= Rol_TCH) if (MeOrOther == Usr_ME || Gbl.Usrs.Me.Role.Logged >= Rol_TCH)
{ {
/***** Get user's name from record form *****/ /***** Get user's name from record form *****/
if (Usr_ICanChangeOtherUsrData (&Gbl.Usrs.Other.UsrDat)) if (Usr_ICanChangeOtherUsrData (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
Rec_GetUsrNameFromRecordForm (&Gbl.Usrs.Other.UsrDat); Rec_GetUsrNameFromRecordForm (&Gbl.Usrs.Other.UsrDat);
/***** Update user's data in database *****/ /***** Update user's data in database *****/
@ -3008,7 +3007,7 @@ void Enr_ModifyUsr1 (void)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM: case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM:
if (!Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod)) if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN_NOT)
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break; break;
default: default:
@ -3083,7 +3082,7 @@ static void Enr_AskIfRemoveUsrFromCrs (struct Usr_Data *UsrDat)
extern const char *Txt_Remove_me_from_this_course; extern const char *Txt_Remove_me_from_this_course;
extern const char *Txt_Remove_user_from_this_course; extern const char *Txt_Remove_user_from_this_course;
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD] = ActRemStdCrs, [Rol_STD] = ActRemStdCrs,
[Rol_NET] = ActRemNETCrs, [Rol_NET] = ActRemNETCrs,

View File

@ -75,7 +75,7 @@ typedef enum
void Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (void); void Enr_CheckStdsAndPutButtonToRegisterStdsInCurrentCrs (void);
void Enr_PutButtonInlineToRegisterStds (long CrsCod, void Enr_PutButtonInlineToRegisterStds (long CrsCod,
unsigned Level,Lay_LastItem_t IsLastItemInLevel[], unsigned Level,const Lay_LastItem_t *IsLastItemInLevel,
Lay_Highlight_t Highlight); Lay_Highlight_t Highlight);
void Enr_PutLinkToRequestSignUp (void); void Enr_PutLinkToRequestSignUp (void);
@ -99,9 +99,9 @@ void Enr_PutLinkToRemOldUsrs (void);
void Enr_AskRemoveOldUsrs (void); void Enr_AskRemoveOldUsrs (void);
void Enr_RemoveOldUsrs (void); void Enr_RemoveOldUsrs (void);
void Enr_ReceiveFormAdminStds (void); void Enr_ReceiveAdminStds (void);
void Enr_ReceiveFormAdminNonEditTchs (void); void Enr_ReceiveAdminNonEditTchs (void);
void Enr_ReceiveFormAdminTchs (void); void Enr_ReceiveAdminTchs (void);
bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther); bool Enr_PutActionsRegRemOneUsr (Usr_MeOrOther_t MeOrOther);

View File

@ -315,12 +315,12 @@ void Exa_ListAllExams (struct Exa_Exams *Exams)
/************************ Check if I can edit exams **************************/ /************************ Check if I can edit exams **************************/
/*****************************************************************************/ /*****************************************************************************/
bool Exa_CheckIfICanEditExams (void) Usr_ICan_t Exa_CheckIfICanEditExams (void)
{ {
static const bool ICanEditExams[Rol_NUM_ROLES] = static Usr_ICan_t ICanEditExams[Rol_NUM_ROLES] =
{ {
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanEditExams[Gbl.Usrs.Me.Role.Logged]; return ICanEditExams[Gbl.Usrs.Me.Role.Logged];
@ -332,7 +332,7 @@ bool Exa_CheckIfICanEditExams (void)
static void Exa_PutIconsListExams (void *Exams) static void Exa_PutIconsListExams (void *Exams)
{ {
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD ] = ActSeeMyExaResCrs, [Rol_STD ] = ActSeeMyExaResCrs,
[Rol_NET ] = ActReqSeeUsrExaRes, [Rol_NET ] = ActReqSeeUsrExaRes,
@ -343,7 +343,7 @@ static void Exa_PutIconsListExams (void *Exams)
if (Exams) if (Exams)
{ {
/***** Put icon to create a new exam *****/ /***** Put icon to create a new exam *****/
if (Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN)
Exa_PutIconToCreateNewExam ((struct Exa_Exams *) Exams); Exa_PutIconToCreateNewExam ((struct Exa_Exams *) Exams);
/***** Put icon to view sessions results *****/ /***** Put icon to view sessions results *****/
@ -352,9 +352,8 @@ static void Exa_PutIconsListExams (void *Exams)
NULL,NULL); NULL,NULL);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkExa,NULL, Ico_PutContextualIconToGetLink (ActReqLnkExa,NULL,Exa_PutPars,Exams);
Exa_PutPars,Exams);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_EXAMS); Fig_PutIconToShowFigure (Fig_EXAMS);
@ -629,8 +628,7 @@ static void Exa_PutIconsEditingOneExam (void *Exams)
{ {
if (Exams) if (Exams)
/***** Icon to view exam *****/ /***** Icon to view exam *****/
Ico_PutContextualIconToView (ActSeeOneExa,NULL, Ico_PutContextualIconToView (ActSeeOneExa,NULL,Exa_PutPars,Exams);
Exa_PutPars,Exams);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -658,12 +656,12 @@ static void Exa_PutParExamOrder (Exa_Order_t SelectedOrder)
static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams, static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhExa, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhExa, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidExa, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidExa, // Visible ==> action to hide
}; };
static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = static Act_Action_t ActionShowResults[Rol_NUM_ROLES] =
{ {
[Rol_STD ] = ActSeeMyExaResExa, [Rol_STD ] = ActSeeMyExaResExa,
[Rol_NET ] = ActSeeUsrExaResExa, [Rol_NET ] = ActSeeUsrExaResExa,
@ -671,7 +669,7 @@ static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
[Rol_SYS_ADM] = ActSeeUsrExaResExa, [Rol_SYS_ADM] = ActSeeUsrExaResExa,
}; };
if (Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN)
{ {
/***** Icon to remove exam *****/ /***** Icon to remove exam *****/
Ico_PutContextualIconToRemove (ActReqRemExa,NULL, Ico_PutContextualIconToRemove (ActReqRemExa,NULL,
@ -683,8 +681,7 @@ static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
Exams->Exam.HiddenOrVisible); Exams->Exam.HiddenOrVisible);
/***** Icon to edit exam *****/ /***** Icon to edit exam *****/
Ico_PutContextualIconToEdit (ActEdiOneExa,NULL, Ico_PutContextualIconToEdit (ActEdiOneExa,NULL,Exa_PutPars,Exams);
Exa_PutPars,Exams);
} }
/***** Put icon to view results of sessions in exam *****/ /***** Put icon to view results of sessions in exam *****/
@ -693,9 +690,8 @@ static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
Exa_PutPars,Exams); Exa_PutPars,Exams);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkExa,NULL, Ico_PutContextualIconToGetLink (ActReqLnkExa,NULL,Exa_PutPars,Exams);
Exa_PutPars,Exams);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -804,7 +800,7 @@ void Exa_GetListExams (struct Exa_Exams *Exams,Exa_Order_t SelectedOrder)
void Exa_GetListSelectedExaCods (struct Exa_Exams *Exams) void Exa_GetListSelectedExaCods (struct Exa_Exams *Exams)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
unsigned MaxSizeListExaCodsSelected; unsigned MaxSizeListExaCodsSelected;
unsigned NumExam; unsigned NumExam;
const char *Ptr; const char *Ptr;
@ -973,7 +969,7 @@ void Exa_AskRemExam (void)
struct Exa_Exams Exams; struct Exa_Exams Exams;
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -1006,7 +1002,7 @@ void Exa_RemoveExam (void)
struct Exa_Exams Exams; struct Exa_Exams Exams;
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -1186,7 +1182,7 @@ static void Exa_HideUnhideExam (HidVis_HiddenOrVisible_t HiddenOrVisible)
struct Exa_Exams Exams; struct Exa_Exams Exams;
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -1216,7 +1212,7 @@ void Exa_ReqCreatOrEditExam (void)
Exa_ExistingNewExam_t ExistingNewExam; Exa_ExistingNewExam_t ExistingNewExam;
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -1253,12 +1249,12 @@ void Exa_PutFormsOneExam (struct Exa_Exams *Exams,
extern const char *Hlp_ASSESSMENT_Exams_edit_exam; extern const char *Hlp_ASSESSMENT_Exams_edit_exam;
extern const char *Hlp_ASSESSMENT_Exams_new_exam; extern const char *Hlp_ASSESSMENT_Exams_new_exam;
extern const char *Txt_Exam; extern const char *Txt_Exam;
static void (*FunctionToDrawContextualIcons[]) (void *Args) = static void (*FunctionToDrawContextualIcons[Exa_NUM_EXISTING_NEW_EXAM]) (void *Args) =
{ {
[Exa_EXISTING_EXAM] = Exa_PutIconsEditingOneExam, [Exa_EXISTING_EXAM] = Exa_PutIconsEditingOneExam,
[Exa_NEW_EXAM ] = NULL, [Exa_NEW_EXAM ] = NULL,
}; };
static const char **HelpLink[] = static const char **HelpLink[Exa_NUM_EXISTING_NEW_EXAM] =
{ {
[Exa_EXISTING_EXAM] = &Hlp_ASSESSMENT_Exams_edit_exam, [Exa_EXISTING_EXAM] = &Hlp_ASSESSMENT_Exams_edit_exam,
[Exa_NEW_EXAM ] = &Hlp_ASSESSMENT_Exams_new_exam, [Exa_NEW_EXAM ] = &Hlp_ASSESSMENT_Exams_new_exam,
@ -1317,17 +1313,17 @@ static void Exa_PutFormEditionExam (struct Exa_Exams *Exams,
extern const char *Txt_Description; extern const char *Txt_Description;
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
extern const char *Txt_Create; extern const char *Txt_Create;
static const Act_Action_t NextAction[] = static Act_Action_t NextAction[Exa_NUM_EXISTING_NEW_EXAM] =
{ {
[Exa_EXISTING_EXAM] = ActChgExa, [Exa_EXISTING_EXAM] = ActChgExa,
[Exa_NEW_EXAM ] = ActNewExa, [Exa_NEW_EXAM ] = ActNewExa,
}; };
static Btn_Button_t Button[] = static Btn_Button_t Button[Exa_NUM_EXISTING_NEW_EXAM] =
{ {
[Exa_EXISTING_EXAM] = Btn_CONFIRM_BUTTON, [Exa_EXISTING_EXAM] = Btn_CONFIRM_BUTTON,
[Exa_NEW_EXAM ] = Btn_CREATE_BUTTON, [Exa_NEW_EXAM ] = Btn_CREATE_BUTTON,
}; };
const char *TxtButton[] = const char *TxtButton[Exa_NUM_EXISTING_NEW_EXAM] =
{ {
[Exa_EXISTING_EXAM] = Txt_Save_changes, [Exa_EXISTING_EXAM] = Txt_Save_changes,
[Exa_NEW_EXAM ] = Txt_Create, [Exa_NEW_EXAM ] = Txt_Create,
@ -1420,14 +1416,14 @@ static void Exa_PutFormEditionExam (struct Exa_Exams *Exams,
/********************** Receive form to create a new exam ********************/ /********************** Receive form to create a new exam ********************/
/*****************************************************************************/ /*****************************************************************************/
void Exa_ReceiveFormExam (void) void Exa_ReceiveExam (void)
{ {
struct Exa_Exams Exams; struct Exa_Exams Exams;
Exa_ExistingNewExam_t ExistingNewExam; Exa_ExistingNewExam_t ExistingNewExam;
char Txt[Cns_MAX_BYTES_TEXT + 1]; char Txt[Cns_MAX_BYTES_TEXT + 1];
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -1553,20 +1549,6 @@ static void Exa_UpdateExam (struct Exa_Exam *Exam,const char *Txt)
Ale_ShowAlert (Ale_SUCCESS,Txt_The_exam_has_been_modified); Ale_ShowAlert (Ale_SUCCESS,Txt_The_exam_has_been_modified);
} }
/*****************************************************************************/
/********** Get number of sessions and check is edition is possible **********/
/*****************************************************************************/
// Before calling this function, number of sessions must be calculated
bool Exa_CheckIfEditable (const struct Exa_Exam *Exam)
{
if (Exa_CheckIfICanEditExams ())
/***** Questions are editable only if exam has no sessions *****/
return Exam->NumSess == 0; // Exams with sessions should not be edited
else
return false; // Questions are not editable
}
/*****************************************************************************/ /*****************************************************************************/
/*************************** Show stats about exams **************************/ /*************************** Show stats about exams **************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -28,6 +28,7 @@
/*****************************************************************************/ /*****************************************************************************/
#include "swad_exam_type.h" #include "swad_exam_type.h"
#include "swad_user.h"
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
@ -39,7 +40,7 @@ void Exa_ResetExam (struct Exa_Exam *Exam);
void Exa_SeeAllExams (void); void Exa_SeeAllExams (void);
void Exa_ListAllExams (struct Exa_Exams *Exams); void Exa_ListAllExams (struct Exa_Exams *Exams);
bool Exa_CheckIfICanEditExams (void); Usr_ICan_t Exa_CheckIfICanEditExams (void);
void Exa_SeeOneExam (void); void Exa_SeeOneExam (void);
void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,Frm_PutForm_t PutFormSession); void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,Frm_PutForm_t PutFormSession);
@ -68,9 +69,7 @@ void Exa_ReqCreatOrEditExam (void);
void Exa_PutFormsOneExam (struct Exa_Exams *Exams, void Exa_PutFormsOneExam (struct Exa_Exams *Exams,
Exa_ExistingNewExam_t ExistingNewExam); Exa_ExistingNewExam_t ExistingNewExam);
void Exa_ReceiveFormExam (void); void Exa_ReceiveExam (void);
bool Exa_CheckIfEditable (const struct Exa_Exam *Exam);
//-------------------------------- Figures ------------------------------------ //-------------------------------- Figures ------------------------------------
void Exa_GetAndShowExamsStats (void); void Exa_GetAndShowExamsStats (void);

View File

@ -1668,7 +1668,7 @@ unsigned Exa_DB_GetGrpsAssociatedToSes (MYSQL_RES **mysql_res,long SesCod)
/*** Check if I belong to any of the groups associated to the exam session ***/ /*** Check if I belong to any of the groups associated to the exam session ***/
/*****************************************************************************/ /*****************************************************************************/
bool Exa_DB_CheckIfICanListThisSessionBasedOnGrps (long SesCod) Usr_ICan_t Exa_DB_CheckIfICanListThisSessionBasedOnGrps (long SesCod)
{ {
return return
DB_QueryEXISTS ("can not check if I can play an exam session", DB_QueryEXISTS ("can not check if I can play an exam session",
@ -1686,7 +1686,8 @@ bool Exa_DB_CheckIfICanListThisSessionBasedOnGrps (long SesCod)
" WHERE grp_users.UsrCod=%ld" " WHERE grp_users.UsrCod=%ld"
" AND grp_users.GrpCod=exa_groups.GrpCod)))", " AND grp_users.GrpCod=exa_groups.GrpCod)))",
SesCod, SesCod,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod) ? Usr_I_CAN :
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2150,6 +2151,12 @@ bool Exa_DB_CheckIfUserAgentIsTheSameAsTheLast (long PrnCod,const char *UserAgen
void Exa_DB_LogAccess (long LogCod,long PrnCod,ExaLog_Action_t Action) void Exa_DB_LogAccess (long LogCod,long PrnCod,ExaLog_Action_t Action)
{ {
static char YN[Usr_NUM_I_CAN] =
{
[Usr_I_CAN_NOT] = 'N',
[Usr_I_CAN ] = 'Y',
};
/* Log access in exam log. /* Log access in exam log.
Redundant data (also present in log table) are stored for speed */ Redundant data (also present in log table) are stored for speed */
DB_QueryINSERT ("can not log exam access", DB_QueryINSERT ("can not log exam access",
@ -2161,8 +2168,7 @@ void Exa_DB_LogAccess (long LogCod,long PrnCod,ExaLog_Action_t Action)
PrnCod, PrnCod,
(unsigned) Action, (unsigned) Action,
ExaLog_GetQstInd (), ExaLog_GetQstInd (),
ExaLog_GetIfCanAnswer () ? 'Y' : YN[ExaLog_GetIfCanAnswer ()],
'N',
// NOW() Redundant, for speed // NOW() Redundant, for speed
Par_GetIP ()); // Redundant, for speed Par_GetIP ()); // Redundant, for speed
} }

View File

@ -128,7 +128,7 @@ void Exa_DB_RemoveUsrFromSessionTablesInCrs (long UsrCod,long CrsCod);
//--------------------------------- Groups ------------------------------------ //--------------------------------- Groups ------------------------------------
void Exa_DB_CreateGrpAssociatedToSes (long SesCod,long GrpCod); void Exa_DB_CreateGrpAssociatedToSes (long SesCod,long GrpCod);
unsigned Exa_DB_GetGrpsAssociatedToSes (MYSQL_RES **mysql_res,long SesCod); unsigned Exa_DB_GetGrpsAssociatedToSes (MYSQL_RES **mysql_res,long SesCod);
bool Exa_DB_CheckIfICanListThisSessionBasedOnGrps (long SesCod); Usr_ICan_t Exa_DB_CheckIfICanListThisSessionBasedOnGrps (long SesCod);
void Exa_DB_RemoveAllGrpsFromExa (long ExaCod); void Exa_DB_RemoveAllGrpsFromExa (long ExaCod);
void Exa_DB_RemoveAllGrpsFromCrs (long CrsCod); void Exa_DB_RemoveAllGrpsFromCrs (long CrsCod);
void Exa_DB_RemoveAllGrpsFromSes (long SesCod); void Exa_DB_RemoveAllGrpsFromSes (long SesCod);

View File

@ -54,7 +54,7 @@ static struct
long PrnCod; // Exam print code long PrnCod; // Exam print code
int QstInd; // Exam print question index int QstInd; // Exam print question index
ExaLog_Action_t Action; // Action performed by user ExaLog_Action_t Action; // Action performed by user
bool ICanAnswer; // Exam print is open and accesible to answer by the user Usr_ICan_t ICanAnswer; // Exam print is open and accesible to answer by the user
} ExaLog_Log = } ExaLog_Log =
{ {
.PrnCod = -1L, // -1 means no print code set .PrnCod = -1L, // -1 means no print code set
@ -116,12 +116,12 @@ int ExaLog_GetQstInd (void)
/************* Set and get if exam print is open and accessible **************/ /************* Set and get if exam print is open and accessible **************/
/*****************************************************************************/ /*****************************************************************************/
void ExaLog_SetIfCanAnswer (bool ICanAnswer) void ExaLog_SetIfCanAnswer (Usr_ICan_t ICanAnswer)
{ {
ExaLog_Log.ICanAnswer = ICanAnswer; ExaLog_Log.ICanAnswer = ICanAnswer;
} }
bool ExaLog_GetIfCanAnswer (void) Usr_ICan_t ExaLog_GetIfCanAnswer (void)
{ {
return ExaLog_Log.ICanAnswer; return ExaLog_Log.ICanAnswer;
} }

View File

@ -54,8 +54,8 @@ void ExaLog_SetAction (ExaLog_Action_t Action);
ExaLog_Action_t ExaLog_GetAction (void); ExaLog_Action_t ExaLog_GetAction (void);
void ExaLog_SetQstInd (unsigned QstInd); void ExaLog_SetQstInd (unsigned QstInd);
int ExaLog_GetQstInd (void); int ExaLog_GetQstInd (void);
void ExaLog_SetIfCanAnswer (bool CanBeAnswered); void ExaLog_SetIfCanAnswer (Usr_ICan_t CanBeAnswered);
bool ExaLog_GetIfCanAnswer (void); Usr_ICan_t ExaLog_GetIfCanAnswer (void);
void ExaLog_LogAccess (long LogCod); void ExaLog_LogAccess (long LogCod);

View File

@ -178,7 +178,7 @@ void ExaPrn_ShowExamPrint (void)
ExaSes_GetAndCheckPars (&Exams,&Session); ExaSes_GetAndCheckPars (&Exams,&Session);
/***** Check if I can access to this session *****/ /***** Check if I can access to this session *****/
if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session)) if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN)
{ {
/***** Set basic data of exam print *****/ /***** Set basic data of exam print *****/
Print.SesCod = Session.SesCod; Print.SesCod = Session.SesCod;
@ -996,7 +996,7 @@ void ExaPrn_ReceivePrintAnswer (void)
ExaLog_SetQstInd (QstInd); ExaLog_SetQstInd (QstInd);
/***** Check if session if visible and open *****/ /***** Check if session if visible and open *****/
if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session)) if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN)
{ {
/***** Set log open to true ****/ /***** Set log open to true ****/
ExaLog_SetIfCanAnswer (true); ExaLog_SetIfCanAnswer (true);

View File

@ -69,8 +69,8 @@ extern struct Globals Gbl;
struct ExaRes_ICanView struct ExaRes_ICanView
{ {
bool Result; Usr_ICan_t Result;
bool Score; Usr_ICan_t Score;
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -292,7 +292,7 @@ static void ExaRes_PutFormToSelUsrsToViewResults (__attribute__((unused)) void *
Txt_Results, Txt_Results,
Hlp_ASSESSMENT_Exams_results, Hlp_ASSESSMENT_Exams_results,
Txt_View_results, Txt_View_results,
false); // Do not put form with date range Frm_DONT_PUT_FORM); // Do not put form with date range
} }
/*****************************************************************************/ /*****************************************************************************/
@ -358,7 +358,7 @@ static void ExaRes_ListAllResultsInSelectedExams (struct Exa_Exams *Exams)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Show sessions results *****/ /***** Show sessions results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
@ -424,7 +424,7 @@ static void ExaRes_ListAllResultsInExa (struct Exa_Exams *Exams)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Show sessions results *****/ /***** Show sessions results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
@ -495,7 +495,7 @@ static void ExaRes_ListAllResultsInSes (struct Exa_Exams *Exams,long SesCod)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat)) if (Usr_CheckIfICanViewTstExaMchResult (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN)
{ {
/***** Show sessions results *****/ /***** Show sessions results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat); Gbl.Usrs.Other.UsrDat.Accepted = Enr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
@ -554,7 +554,7 @@ static void ExaRes_ShowResultsEnd (void)
static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams) static void ExaRes_ListExamsToSelect (struct Exa_Exams *Exams)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Exams; extern const char *Txt_Exams;
extern const char *Txt_Exam; extern const char *Txt_Exam;
extern const char *Txt_Update_results; extern const char *Txt_Update_results;
@ -831,7 +831,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_End (); HTM_TD_End ();
/* Get and accumulate questions and score */ /* Get and accumulate questions and score */
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
/* Get questions and user's answers of exam print from database */ /* Get questions and user's answers of exam print from database */
ExaPrn_GetPrintQuestionsFromDB (&Print); ExaPrn_GetPrintQuestionsFromDB (&Print);
@ -852,7 +852,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
else else
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
@ -862,7 +862,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_GREEN_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_GREEN_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Total) if (Print.NumQsts.Valid.Total)
HTM_Unsigned (Print.NumQsts.Valid.Total); HTM_Unsigned (Print.NumQsts.Valid.Total);
@ -877,7 +877,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_RED_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_RED_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
NumQstsInvalid = Print.NumQsts.All - Print.NumQsts.Valid.Total; NumQstsInvalid = Print.NumQsts.All - Print.NumQsts.Valid.Total;
if (NumQstsInvalid) if (NumQstsInvalid)
@ -893,7 +893,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Correct) if (Print.NumQsts.Valid.Correct)
HTM_Unsigned (Print.NumQsts.Valid.Correct); HTM_Unsigned (Print.NumQsts.Valid.Correct);
@ -908,7 +908,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Wrong.Negative) if (Print.NumQsts.Valid.Wrong.Negative)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative);
@ -922,7 +922,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Wrong.Zero) if (Print.NumQsts.Valid.Wrong.Zero)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero);
@ -936,7 +936,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Wrong.Positive) if (Print.NumQsts.Valid.Wrong.Positive)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive);
@ -951,7 +951,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
if (Print.NumQsts.Valid.Blank) if (Print.NumQsts.Valid.Blank)
HTM_Unsigned (Print.NumQsts.Valid.Blank); HTM_Unsigned (Print.NumQsts.Valid.Blank);
@ -966,7 +966,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
HTM_Double2Decimals (Print.Score.Valid); HTM_Double2Decimals (Print.Score.Valid);
HTM_Txt ("/"); HTM_Txt ("/");
@ -980,7 +980,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid / HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid /
(double) Print.NumQsts.Valid.Total : (double) Print.NumQsts.Valid.Total :
0.0); 0.0);
@ -992,7 +992,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Score) if (ICanView.Score == Usr_I_CAN)
{ {
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade); Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade);
TstPrn_ShowGrade (Grade,Exam.MaxGrade); TstPrn_ShowGrade (Grade,Exam.MaxGrade);
@ -1005,7 +1005,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Link to show this result */ /* Link to show this result */
HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Result) if (ICanView.Result == Usr_I_CAN)
{ {
Exams->Exam.ExaCod = Session.ExaCod; Exams->Exam.ExaCod = Session.ExaCod;
Exams->SesCod = Session.SesCod; Exams->SesCod = Session.SesCod;
@ -1218,8 +1218,8 @@ void ExaRes_ShowExaResultAfterFinish (void)
struct ExaPrn_Print Print; struct ExaPrn_Print Print;
struct ExaRes_ICanView ICanView = struct ExaRes_ICanView ICanView =
{ {
.Result = true, // I have just finish answering, so show result... .Result = Usr_I_CAN, // I have just finish answering, so show result...
.Score = false, // ...but not score .Score = Usr_I_CAN_NOT, // ...but not score
}; };
unsigned Visibility = 1 << TstVis_VISIBLE_QST_ANS_TXT; // Show only questions and answers text unsigned Visibility = 1 << TstVis_VISIBLE_QST_ANS_TXT; // Show only questions and answers text
@ -1346,7 +1346,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
Err_WrongUserExit (); Err_WrongUserExit ();
if (!Usr_CheckIfICanViewTstExaMchResult (UsrDat)) if (Usr_CheckIfICanViewTstExaMchResult (UsrDat) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Begin table *****/ /***** Begin table *****/
@ -1371,7 +1371,7 @@ static void ExaRes_ShowExamResult (const struct Exa_Exam *Exam,
ExaRes_ShowExamResultGrade (Exam,Print,ICanView); ExaRes_ShowExamResultGrade (Exam,Print,ICanView);
/* Answers and solutions */ /* Answers and solutions */
if (ICanView->Result) if (ICanView->Result == Usr_I_CAN)
ExaRes_ShowExamAnswers (UsrDat,Print,Visibility); ExaRes_ShowExamAnswers (UsrDat,Print,Visibility);
/***** End table *****/ /***** End table *****/
@ -1398,15 +1398,17 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam,
ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine ICanView->Result = (Usr_ItsMe (UsrCod) == Usr_ME && // The result is mine
Exam->HiddenOrVisible == HidVis_VISIBLE && // The exam is visible Exam->HiddenOrVisible == HidVis_VISIBLE && // The exam is visible
Session->HiddenOrVisible == HidVis_VISIBLE && // The session is visible Session->HiddenOrVisible == HidVis_VISIBLE && // The session is visible
Session->ShowUsrResults); // The results of the session are visible to users Session->ShowUsrResults) ? Usr_I_CAN : // The results of the session are visible to users
Usr_I_CAN_NOT;
// Whether I belong or not to groups of session is not checked here... // Whether I belong or not to groups of session is not checked here...
// ...because I should be able to see old exams made in old groups to which I belonged // ...because I should be able to see old exams made in old groups to which I belonged
if (ICanView->Result) if (ICanView->Result == Usr_I_CAN)
// Depends on 5 visibility icons associated to exam // Depends on 5 visibility icons associated to exam
ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility); ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN :
Usr_I_CAN_NOT;
else else
ICanView->Score = false; ICanView->Score = Usr_I_CAN_NOT;
break; break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
@ -1415,11 +1417,11 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam,
case Rol_INS_ADM: case Rol_INS_ADM:
case Rol_SYS_ADM: case Rol_SYS_ADM:
ICanView->Result = ICanView->Result =
ICanView->Score = true; ICanView->Score = Usr_I_CAN;
break; break;
default: default:
ICanView->Result = ICanView->Result =
ICanView->Score = false; ICanView->Score = Usr_I_CAN_NOT;
break; break;
} }
} }
@ -1600,7 +1602,7 @@ static void ExaRes_ShowExamResultNumQsts (struct ExaPrn_Print *Print,
/***** Number of questions *****/ /***** Number of questions *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Result) if (ICanView->Result == Usr_I_CAN)
{ {
HTM_TxtF ("%u",Print->NumQsts.All); HTM_TxtF ("%u",Print->NumQsts.All);
if (Print->NumQsts.All != Print->NumQsts.Valid.Total) if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
@ -1654,7 +1656,7 @@ static void ExaRes_ShowExamResultNumAnss (struct ExaPrn_Print *Print,
/***** Number of answers *****/ /***** Number of answers *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score) if (ICanView->Score == Usr_I_CAN)
HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1):&nbsp;%u; " HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1):&nbsp;%u; "
"%s(-1&le;<em>p<sub>i</sub></em>&lt;0):&nbsp;%u; " "%s(-1&le;<em>p<sub>i</sub></em>&lt;0):&nbsp;%u; "
"%s(<em>p<sub>i</sub></em>=0):&nbsp;%u; " "%s(<em>p<sub>i</sub></em>=0):&nbsp;%u; "
@ -1693,7 +1695,7 @@ static void ExaRes_ShowExamResultScore (struct ExaPrn_Print *Print,
/***** Score *****/ /***** Score *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score) if (ICanView->Score == Usr_I_CAN)
{ {
/* Score counting all questions */ /* Score counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total) if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
@ -1745,7 +1747,7 @@ static void ExaRes_ShowExamResultGrade (const struct Exa_Exam *Exam,
/***** Grade *****/ /***** Grade *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score) if (ICanView->Score == Usr_I_CAN)
{ {
/* Grade counting all questions */ /* Grade counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total) if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
@ -1814,7 +1816,7 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
{ {
extern const char *Txt_Score; extern const char *Txt_Score;
extern const char *Txt_Invalid_question; extern const char *Txt_Invalid_question;
bool ICanView[TstVis_NUM_ITEMS_VISIBILITY]; Usr_ICan_t ICanView[TstVis_NUM_ITEMS_VISIBILITY];
static const char *ClassNumQst[Qst_NUM_VALIDITIES] = static const char *ClassNumQst[Qst_NUM_VALIDITIES] =
{ {
[Qst_INVALID_QUESTION] = "BIG_INDEX_RED", [Qst_INVALID_QUESTION] = "BIG_INDEX_RED",
@ -1840,10 +1842,14 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_STD: case Rol_STD:
ICanView[TstVis_VISIBLE_QST_ANS_TXT ] = TstVis_IsVisibleQstAndAnsTxt (Visibility); ICanView[TstVis_VISIBLE_QST_ANS_TXT ] = TstVis_IsVisibleQstAndAnsTxt (Visibility) ? Usr_I_CAN:
ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] = TstVis_IsVisibleFeedbackTxt (Visibility); Usr_I_CAN_NOT;
ICanView[TstVis_VISIBLE_CORRECT_ANSWER] = TstVis_IsVisibleCorrectAns (Visibility); ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] = TstVis_IsVisibleFeedbackTxt (Visibility) ? Usr_I_CAN:
ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = TstVis_IsVisibleEachQstScore (Visibility); Usr_I_CAN_NOT;
ICanView[TstVis_VISIBLE_CORRECT_ANSWER] = TstVis_IsVisibleCorrectAns (Visibility) ? Usr_I_CAN:
Usr_I_CAN_NOT;
ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = TstVis_IsVisibleEachQstScore (Visibility) ? Usr_I_CAN:
Usr_I_CAN_NOT;
break; break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
@ -1854,13 +1860,13 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
ICanView[TstVis_VISIBLE_QST_ANS_TXT ] = ICanView[TstVis_VISIBLE_QST_ANS_TXT ] =
ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] = ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] =
ICanView[TstVis_VISIBLE_CORRECT_ANSWER] = ICanView[TstVis_VISIBLE_CORRECT_ANSWER] =
ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = true; ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = Usr_I_CAN;
break; break;
default: default:
ICanView[TstVis_VISIBLE_QST_ANS_TXT ] = ICanView[TstVis_VISIBLE_QST_ANS_TXT ] =
ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] = ICanView[TstVis_VISIBLE_FEEDBACK_TXT ] =
ICanView[TstVis_VISIBLE_CORRECT_ANSWER] = ICanView[TstVis_VISIBLE_CORRECT_ANSWER] =
ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = false; ICanView[TstVis_VISIBLE_EACH_QST_SCORE] = Usr_I_CAN_NOT;
break; break;
} }
@ -1879,10 +1885,10 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
/* Stem */ /* Stem */
Qst_WriteQstStem (Question->Stem,ClassTxt[Question->Validity], Qst_WriteQstStem (Question->Stem,ClassTxt[Question->Validity],
ICanView[TstVis_VISIBLE_QST_ANS_TXT]); ICanView[TstVis_VISIBLE_QST_ANS_TXT] == Usr_I_CAN);
/* Media */ /* Media */
if (ICanView[TstVis_VISIBLE_QST_ANS_TXT]) if (ICanView[TstVis_VISIBLE_QST_ANS_TXT] == Usr_I_CAN)
Med_ShowMedia (&Question->Media, Med_ShowMedia (&Question->Media,
"Tst_MED_SHOW_CONT", "Tst_MED_SHOW_CONT",
"Tst_MED_SHOW"); "Tst_MED_SHOW");
@ -1895,7 +1901,7 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
ClassFeedback[Question->Validity]); ClassFeedback[Question->Validity]);
/* Write score retrieved from database */ /* Write score retrieved from database */
if (ICanView[TstVis_VISIBLE_EACH_QST_SCORE]) if (ICanView[TstVis_VISIBLE_EACH_QST_SCORE] == Usr_I_CAN)
{ {
HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"", HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"",
The_GetSuffix ()); The_GetSuffix ());
@ -1914,7 +1920,7 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
} }
/* Question feedback */ /* Question feedback */
if (ICanView[TstVis_VISIBLE_FEEDBACK_TXT]) if (ICanView[TstVis_VISIBLE_FEEDBACK_TXT] == Usr_I_CAN)
Qst_WriteQstFeedback (Question->Feedback, Qst_WriteQstFeedback (Question->Feedback,
ClassFeedback[Question->Validity]); ClassFeedback[Question->Validity]);

View File

@ -72,10 +72,10 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
Frm_PutForm_t PutFormSession, Frm_PutForm_t PutFormSession,
unsigned NumSessions, unsigned NumSessions,
MYSQL_RES *mysql_res); MYSQL_RES *mysql_res);
static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions); static void ExaSes_ListOneOrMoreSessionsHeading (Usr_ICan_t ICanEditSessions);
static bool ExaSes_CheckIfICanEditSessions (void); static Usr_ICan_t ExaSes_CheckIfICanEditSessions (void);
static bool ExaSes_CheckIfICanEditThisSession (long UsrCod); static Usr_ICan_t ExaSes_CheckIfICanEditThisSession (long UsrCod);
static bool ExaSes_CheckIfVisibilityOfResultsCanBeChanged (const struct ExaSes_Session *Session); static Usr_ICan_t ExaSes_CheckIfICanChangeVisibilityOfResults (const struct ExaSes_Session *Session);
static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams, static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
const struct ExaSes_Session *Session, const struct ExaSes_Session *Session,
const char *Anchor); const char *Anchor);
@ -151,7 +151,8 @@ void ExaSes_ListSessions (struct Exa_Exams *Exams,
Hlp_ASSESSMENT_Exams_sessions,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Exams_sessions,Box_NOT_CLOSABLE);
/***** Select whether show only my groups or all groups *****/ /***** Select whether show only my groups or all groups *****/
if (Gbl.Crs.Grps.NumGrps && ExaSes_CheckIfICanEditSessions ()) if (Gbl.Crs.Grps.NumGrps &&
ExaSes_CheckIfICanEditSessions () == Usr_I_CAN)
{ {
Set_BeginSettingsHead (); Set_BeginSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeOneExa,Exa_PutPars,Exams); Grp_ShowFormToSelWhichGrps (ActSeeOneExa,Exa_PutPars,Exams);
@ -203,15 +204,10 @@ void ExaSes_GetSessionDataByCod (struct ExaSes_Session *Session)
static void ExaSes_PutIconsInListOfSessions (void *Exams) static void ExaSes_PutIconsInListOfSessions (void *Exams)
{ {
bool ICanEditSessions;
if (Exams) if (Exams)
{ if (ExaSes_CheckIfICanEditSessions () == Usr_I_CAN)
/***** Put icon to create a new exam session in current exam *****/ /***** Put icon to create a new exam session in current exam *****/
ICanEditSessions = ExaSes_CheckIfICanEditSessions ();
if (ICanEditSessions)
ExaSes_PutIconToCreateNewSession ((struct Exa_Exams *) Exams); ExaSes_PutIconToCreateNewSession ((struct Exa_Exams *) Exams);
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -237,7 +233,7 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
unsigned UniqueId; unsigned UniqueId;
struct ExaSes_Session Session; struct ExaSes_Session Session;
char *Anchor; char *Anchor;
bool ICanEditSessions = ExaSes_CheckIfICanEditSessions (); Usr_ICan_t ICanEditSessions = ExaSes_CheckIfICanEditSessions ();
long SesCodToBeEdited = PutFormSession == Frm_PUT_FORM && long SesCodToBeEdited = PutFormSession == Frm_PUT_FORM &&
Exams->SesCod > 0 ? Exams->SesCod : Exams->SesCod > 0 ? Exams->SesCod :
-1L; -1L;
@ -260,7 +256,7 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
/***** Get exam session data from row *****/ /***** Get exam session data from row *****/
ExaSes_GetSessionDataFromRow (mysql_res,&Session); ExaSes_GetSessionDataFromRow (mysql_res,&Session);
if (ExaSes_CheckIfICanListThisSessionBasedOnGrps (Session.SesCod)) if (ExaSes_CheckIfICanListThisSessionBasedOnGrps (Session.SesCod) == Usr_I_CAN)
{ {
/***** Build anchor string *****/ /***** Build anchor string *****/
if (asprintf (&Anchor,"evt_%ld_%ld",Exams->Exam.ExaCod,Session.SesCod) < 0) if (asprintf (&Anchor,"evt_%ld_%ld",Exams->Exam.ExaCod,Session.SesCod) < 0)
@ -333,7 +329,7 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
/************* Put a column for exam session start and end times *************/ /************* Put a column for exam session start and end times *************/
/*****************************************************************************/ /*****************************************************************************/
static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions) static void ExaSes_ListOneOrMoreSessionsHeading (Usr_ICan_t ICanEditSessions)
{ {
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
extern const char *Txt_Session; extern const char *Txt_Session;
@ -343,14 +339,14 @@ static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions)
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/***** Column for icons *****/ /***** Column for icons *****/
if (ICanEditSessions) if (ICanEditSessions == Usr_I_CAN)
HTM_TH_Empty (1); HTM_TH_Empty (1);
/***** The rest of columns *****/ /***** The rest of columns *****/
HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_START_DATE] ,HTM_HEAD_LEFT ); HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_START_DATE],HTM_HEAD_LEFT );
HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_END_DATE ] ,HTM_HEAD_LEFT ); HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_END_DATE ],HTM_HEAD_LEFT );
HTM_TH (Txt_Session ,HTM_HEAD_LEFT ); HTM_TH (Txt_Session ,HTM_HEAD_LEFT );
HTM_TH (Txt_Results ,HTM_HEAD_CENTER); HTM_TH (Txt_Results ,HTM_HEAD_CENTER);
/***** End row *****/ /***** End row *****/
HTM_TR_End (); HTM_TR_End ();
@ -360,13 +356,13 @@ static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions)
/********************** Check if I can edit sessions *************************/ /********************** Check if I can edit sessions *************************/
/*****************************************************************************/ /*****************************************************************************/
static bool ExaSes_CheckIfICanEditSessions (void) static Usr_ICan_t ExaSes_CheckIfICanEditSessions (void)
{ {
static const bool ICanEditSessions[Rol_NUM_ROLES] = static Usr_ICan_t ICanEditSessions[Rol_NUM_ROLES] =
{ {
[Rol_NET ] = true, [Rol_NET ] = Usr_I_CAN,
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanEditSessions[Gbl.Usrs.Me.Role.Logged]; return ICanEditSessions[Gbl.Usrs.Me.Role.Logged];
@ -376,17 +372,18 @@ static bool ExaSes_CheckIfICanEditSessions (void)
/************ Check if I can edit (remove/resume) an exam session ************/ /************ Check if I can edit (remove/resume) an exam session ************/
/*****************************************************************************/ /*****************************************************************************/
static bool ExaSes_CheckIfICanEditThisSession (long UsrCod) static Usr_ICan_t ExaSes_CheckIfICanEditThisSession (long UsrCod)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
case Rol_NET: case Rol_NET:
return (UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod); // Only if I am the creator return (UsrCod == Gbl.Usrs.Me.UsrDat.UsrCod) ? Usr_I_CAN : // Only if I am the creator
Usr_I_CAN_NOT;
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }
@ -394,14 +391,13 @@ static bool ExaSes_CheckIfICanEditThisSession (long UsrCod)
/********** Check if visibility of session results can be changed ************/ /********** Check if visibility of session results can be changed ************/
/*****************************************************************************/ /*****************************************************************************/
static bool ExaSes_CheckIfVisibilityOfResultsCanBeChanged (const struct ExaSes_Session *Session) static Usr_ICan_t ExaSes_CheckIfICanChangeVisibilityOfResults (const struct ExaSes_Session *Session)
{ {
if (Session->ShowUsrResults || // Results are currently visible if (Session->ShowUsrResults || // Results are currently visible
Session->TimeUTC[Dat_END_TIME] < Dat_GetStartExecutionTimeUTC ()) // End of time is in the past Session->TimeUTC[Dat_END_TIME] < Dat_GetStartExecutionTimeUTC ()) // End of time is in the past
if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod)) return ExaSes_CheckIfICanEditThisSession (Session->UsrCod);
return true;
return false; return Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -412,7 +408,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
const struct ExaSes_Session *Session, const struct ExaSes_Session *Session,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhExaSes, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhExaSes, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidExaSes, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidExaSes, // Visible ==> action to hide
@ -424,7 +420,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
/***** Begin cell *****/ /***** Begin cell *****/
HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ());
if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod)) if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod) == Usr_I_CAN)
{ {
/***** Icon to remove the exam session *****/ /***** Icon to remove the exam session *****/
Ico_PutContextualIconToRemove (ActReqRemExaSes,NULL, Ico_PutContextualIconToRemove (ActReqRemExaSes,NULL,
@ -504,7 +500,7 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
/***** Session title *****/ /***** Session title *****/
HTM_ARTICLE_Begin (Anchor); HTM_ARTICLE_Begin (Anchor);
if (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session)) if (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session) == Usr_I_CAN)
{ {
Frm_BeginForm (ActSeeExaPrn); Frm_BeginForm (ActSeeExaPrn);
Exa_PutPars (Exams); Exa_PutPars (Exams);
@ -648,13 +644,13 @@ static void ExaSes_ListOneOrMoreSessionsResultTch (struct Exa_Exams *Exams,
Exams->SesCod = Session->SesCod; Exams->SesCod = Session->SesCod;
/***** Show exam session results *****/ /***** Show exam session results *****/
if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod)) if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (ActSeeUsrExaResSes,ExaRes_RESULTS_BOX_ID, Lay_PutContextualLinkOnlyIcon (ActSeeUsrExaResSes,ExaRes_RESULTS_BOX_ID,
ExaSes_PutParsEdit,Exams, ExaSes_PutParsEdit,Exams,
"trophy.svg",Ico_BLACK); "trophy.svg",Ico_BLACK);
/***** Check if visibility of session results can be changed *****/ /***** Check if visibility of session results can be changed *****/
if (ExaSes_CheckIfVisibilityOfResultsCanBeChanged (Session)) if (ExaSes_CheckIfICanChangeVisibilityOfResults (Session) == Usr_I_CAN)
{ {
/***** Put form to change visibility of session results *****/ /***** Put form to change visibility of session results *****/
if (Session->ShowUsrResults) if (Session->ShowUsrResults)
@ -694,7 +690,7 @@ void ExaSes_ToggleVisResultsSesUsr (void)
ExaSes_GetAndCheckPars (&Exams,&Session); ExaSes_GetAndCheckPars (&Exams,&Session);
/***** Check if visibility of session results can be changed *****/ /***** Check if visibility of session results can be changed *****/
if (!ExaSes_CheckIfVisibilityOfResultsCanBeChanged (&Session)) if (ExaSes_CheckIfICanChangeVisibilityOfResults (&Session) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Toggle visibility of exam session results *****/ /***** Toggle visibility of exam session results *****/
@ -812,7 +808,7 @@ void ExaSes_RemoveSession (void)
ExaSes_GetAndCheckPars (&Exams,&Session); ExaSes_GetAndCheckPars (&Exams,&Session);
/***** Check if I can remove this exam session *****/ /***** Check if I can remove this exam session *****/
if (!ExaSes_CheckIfICanEditThisSession (Session.UsrCod)) if (ExaSes_CheckIfICanEditThisSession (Session.UsrCod) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Remove questions of exams prints, and exam prints, in this session *****/ /***** Remove questions of exams prints, and exam prints, in this session *****/
@ -866,7 +862,7 @@ static void ExaSes_HideUnhideSession (HidVis_HiddenOrVisible_t HiddenOrVisible)
ExaSes_GetAndCheckPars (&Exams,&Session); ExaSes_GetAndCheckPars (&Exams,&Session);
/***** Check if I can remove this exam session *****/ /***** Check if I can remove this exam session *****/
if (!ExaSes_CheckIfICanEditThisSession (Session.UsrCod)) if (ExaSes_CheckIfICanEditThisSession (Session.UsrCod) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Hide session *****/ /***** Hide session *****/
@ -1083,7 +1079,7 @@ void ExaSes_ReqCreatOrEditSes (void)
/****************** Create a new exam session (by a teacher) *****************/ /****************** Create a new exam session (by a teacher) *****************/
/*****************************************************************************/ /*****************************************************************************/
void ExaSes_ReceiveFormSession (void) void ExaSes_ReceiveSession (void)
{ {
extern const char *Txt_Created_new_session_X; extern const char *Txt_Created_new_session_X;
extern const char *Txt_The_session_has_been_modified; extern const char *Txt_The_session_has_been_modified;
@ -1211,22 +1207,22 @@ static void ExaSes_CreateGrpsAssociatedToExamSession (long SesCod,
/******** Check if I belong to any of the groups of an exam session **********/ /******** Check if I belong to any of the groups of an exam session **********/
/*****************************************************************************/ /*****************************************************************************/
bool ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam, Usr_ICan_t ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam,
const struct ExaSes_Session *Session) const struct ExaSes_Session *Session)
{ {
/***** 1. Sessions in hidden exams are not accesible /***** 1. Sessions in hidden exams are not accesible
2. Hidden or closed sessions are not accesible *****/ 2. Hidden or closed sessions are not accesible *****/
if (Exam->HiddenOrVisible == HidVis_HIDDEN || if (Exam->HiddenOrVisible == HidVis_HIDDEN ||
Session->HiddenOrVisible == HidVis_HIDDEN || Session->HiddenOrVisible == HidVis_HIDDEN ||
!Session->Open) !Session->Open)
return false; return Usr_I_CAN_NOT;
/***** Exam is visible, session is visible and open ==> /***** Exam is visible, session is visible and open ==>
==> I can answer this session if I can list it based on groups *****/ ==> I can answer this session if I can list it based on groups *****/
return ExaSes_CheckIfICanListThisSessionBasedOnGrps (Session->SesCod); return ExaSes_CheckIfICanListThisSessionBasedOnGrps (Session->SesCod);
} }
bool ExaSes_CheckIfICanListThisSessionBasedOnGrps (long SesCod) Usr_ICan_t ExaSes_CheckIfICanListThisSessionBasedOnGrps (long SesCod)
{ {
switch (Gbl.Usrs.Me.Role.Logged) switch (Gbl.Usrs.Me.Role.Logged)
{ {
@ -1237,8 +1233,8 @@ bool ExaSes_CheckIfICanListThisSessionBasedOnGrps (long SesCod)
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_SYS_ADM: case Rol_SYS_ADM:
return true; return Usr_I_CAN;
default: default:
return false; return Usr_I_CAN_NOT;
} }
} }

View File

@ -67,10 +67,10 @@ void ExaSes_GetAndCheckPars (struct Exa_Exams *Exams,
struct ExaSes_Session *Session); struct ExaSes_Session *Session);
void ExaSes_ReqCreatOrEditSes (void); void ExaSes_ReqCreatOrEditSes (void);
void ExaSes_ReceiveFormSession (void); void ExaSes_ReceiveSession (void);
bool ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam, Usr_ICan_t ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam,
const struct ExaSes_Session *Session); const struct ExaSes_Session *Session);
bool ExaSes_CheckIfICanListThisSessionBasedOnGrps (long SesCod); Usr_ICan_t ExaSes_CheckIfICanListThisSessionBasedOnGrps (long SesCod);
#endif #endif

View File

@ -91,13 +91,13 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
unsigned MaxSetInd, unsigned MaxSetInd,
unsigned NumSets, unsigned NumSets,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditSets); Usr_ICan_t ICanEditSets);
static void ExaSet_PutTableHeadingForSets (void); static void ExaSet_PutTableHeadingForSets (void);
static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams, static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
unsigned NumQsts, unsigned NumQsts,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditQuestions); Usr_ICan_t ICanEditQuestions);
static void ExaSet_ListQuestionForEdition (struct Qst_Question *Question, static void ExaSet_ListQuestionForEdition (struct Qst_Question *Question,
unsigned QstInd,const char *Anchor); unsigned QstInd,const char *Anchor);
@ -106,6 +106,8 @@ static void ExaSet_FreeListsSelectedQuestions (struct Exa_Exams *Exams);
static void ExaSet_CopyQstFromBankToExamSet (const struct ExaSet_Set *Set,long QstCod); static void ExaSet_CopyQstFromBankToExamSet (const struct ExaSet_Set *Set,long QstCod);
static Usr_ICan_t ExaSet_CheckIfICanEditExamSets (const struct Exa_Exam *Exam);
static void ExaSet_RemoveMediaFromStemOfQst (long QstCod,long SetCod); static void ExaSet_RemoveMediaFromStemOfQst (long QstCod,long SetCod);
static void ExaSet_RemoveMediaFromAllAnsOfQst (long QstCod,long SetCod); static void ExaSet_RemoveMediaFromAllAnsOfQst (long QstCod,long SetCod);
@ -233,7 +235,7 @@ static void ExaSet_PutFormNewSet (struct Exa_Exams *Exams,
/**************** Receive form to create a new set of questions **************/ /**************** Receive form to create a new set of questions **************/
/*****************************************************************************/ /*****************************************************************************/
void ExaSet_ReceiveFormSet (void) void ExaSet_ReceiveSet (void)
{ {
struct Exa_Exams Exams; struct Exa_Exams Exams;
struct ExaSet_Set Set; struct ExaSet_Set Set;
@ -251,7 +253,7 @@ void ExaSet_ReceiveFormSet (void)
Exa_GetExamDataByCod (&Exams.Exam); Exa_GetExamDataByCod (&Exams.Exam);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** If I can edit exams ==> receive set from form *****/ /***** If I can edit exams ==> receive set from form *****/
@ -318,7 +320,7 @@ void ExaSet_ChangeSetTitle (void)
char NewTitle[ExaSet_MAX_BYTES_TITLE + 1]; char NewTitle[ExaSet_MAX_BYTES_TITLE + 1];
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -330,7 +332,7 @@ void ExaSet_ChangeSetTitle (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Receive new title from form *****/ /***** Receive new title from form *****/
@ -361,7 +363,7 @@ void ExaSet_ChangeNumQstsToExam (void)
unsigned NumQstsToPrint; unsigned NumQstsToPrint;
/***** Check if I can edit exams *****/ /***** Check if I can edit exams *****/
if (!Exa_CheckIfICanEditExams ()) if (Exa_CheckIfICanEditExams () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Reset exams context *****/ /***** Reset exams context *****/
@ -373,7 +375,7 @@ void ExaSet_ChangeNumQstsToExam (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get number of questions in set to appear in exam print *****/ /***** Get number of questions in set to appear in exam print *****/
@ -480,7 +482,7 @@ void ExaSet_ListExamSets (struct Exa_Exams *Exams)
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned MaxSetInd; unsigned MaxSetInd;
unsigned NumSets; unsigned NumSets;
bool ICanEditSets = Exa_CheckIfEditable (&Exams->Exam); Usr_ICan_t ICanEditSets = ExaSet_CheckIfICanEditExamSets (&Exams->Exam);
/***** Get maximum set index *****/ /***** Get maximum set index *****/
MaxSetInd = Exa_DB_GetMaxSetIndexInExam (Exams->Exam.ExaCod); MaxSetInd = Exa_DB_GetMaxSetIndexInExam (Exams->Exam.ExaCod);
@ -516,14 +518,14 @@ static void ExaSet_ListSetQuestions (struct Exa_Exams *Exams,
extern const char *Txt_Questions; extern const char *Txt_Questions;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumQsts; unsigned NumQsts;
bool ICanEditQuestions = Exa_CheckIfEditable (&Exams->Exam); Usr_ICan_t ICanEditQuestions = ExaSet_CheckIfICanEditExamSets (&Exams->Exam);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_Questions, Box_BoxBegin (Txt_Questions,
ICanEditQuestions ? ExaSet_PutIconToAddNewQuestions : ICanEditQuestions == Usr_I_CAN ? ExaSet_PutIconToAddNewQuestions :
NULL, NULL,
ICanEditQuestions ? Exams : ICanEditQuestions == Usr_I_CAN ? Exams :
NULL, NULL,
Hlp_ASSESSMENT_Exams_questions,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Exams_questions,Box_NOT_CLOSABLE);
/***** Show table with questions *****/ /***** Show table with questions *****/
@ -546,7 +548,7 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
unsigned MaxSetInd, unsigned MaxSetInd,
unsigned NumSets, unsigned NumSets,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditSets) Usr_ICan_t ICanEditSets)
{ {
extern const char *Txt_Movement_not_allowed; extern const char *Txt_Movement_not_allowed;
unsigned NumSet; unsigned NumSet;
@ -586,14 +588,14 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
The_GetColorRows ()); The_GetColorRows ());
/* Put icon to remove the set */ /* Put icon to remove the set */
if (ICanEditSets) if (ICanEditSets == Usr_I_CAN)
Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL, Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL,
ExaSet_PutParsOneSet,Exams); ExaSet_PutParsOneSet,Exams);
else else
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
/* Put icon to move up the question */ /* Put icon to move up the question */
if (ICanEditSets && Set.SetInd > 1) if (ICanEditSets == Usr_I_CAN && Set.SetInd > 1)
Lay_PutContextualLinkOnlyIcon (ActUp_ExaSet,Anchor, Lay_PutContextualLinkOnlyIcon (ActUp_ExaSet,Anchor,
ExaSet_PutParsOneSet,Exams, ExaSet_PutParsOneSet,Exams,
"arrow-up.svg",Ico_BLACK); "arrow-up.svg",Ico_BLACK);
@ -785,7 +787,7 @@ void ExaSet_GetSetDataFromRow (MYSQL_RES *mysql_res,struct ExaSet_Set *Set)
static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams, static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
unsigned NumQsts, unsigned NumQsts,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditQuestions) Usr_ICan_t ICanEditQuestions)
{ {
extern const char *Txt_Questions; extern const char *Txt_Questions;
extern const char *Txt_No_INDEX; extern const char *Txt_No_INDEX;
@ -839,7 +841,7 @@ static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
/* Put icon to remove the question */ /* Put icon to remove the question */
if (ICanEditQuestions) if (ICanEditQuestions == Usr_I_CAN)
Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL, Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL,
ExaSet_PutParsOneQst,Exams); ExaSet_PutParsOneQst,Exams);
else else
@ -1250,7 +1252,7 @@ void ExaSet_ReqRemSet (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Show question and button to remove question *****/ /***** Show question and button to remove question *****/
@ -1282,7 +1284,7 @@ void ExaSet_RemoveSet (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Remove the set from all tables *****/ /***** Remove the set from all tables *****/
@ -1323,7 +1325,7 @@ void ExaSet_MoveUpSet (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get set index *****/ /***** Get set index *****/
@ -1369,7 +1371,7 @@ void ExaSet_MoveDownSet (void)
ExaSet_GetAndCheckPars (&Exams,&Set); ExaSet_GetAndCheckPars (&Exams,&Set);
/***** Check if exam is editable *****/ /***** Check if exam is editable *****/
if (!Exa_CheckIfEditable (&Exams.Exam)) if (ExaSet_CheckIfICanEditExamSets (&Exams.Exam) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get set index *****/ /***** Get set index *****/
@ -1396,6 +1398,21 @@ void ExaSet_MoveDownSet (void)
Exa_PutFormsOneExam (&Exams,Exa_EXISTING_EXAM); Exa_PutFormsOneExam (&Exams,Exa_EXISTING_EXAM);
} }
/*****************************************************************************/
/**************** Check is edition of exam sets is possible ******************/
/*****************************************************************************/
// Before calling this function, number of sessions must be calculated
static Usr_ICan_t ExaSet_CheckIfICanEditExamSets (const struct Exa_Exam *Exam)
{
if (Exa_CheckIfICanEditExams () == Usr_I_CAN)
/***** Questions are editable only if exam has no sessions *****/
return (Exam->NumSess == 0) ? Usr_I_CAN : // Exams with sessions should not be edited
Usr_I_CAN_NOT;
else
return Usr_I_CAN_NOT; // Sets of questions are not editable
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Request the removal of a question ********************/ /********************** Request the removal of a question ********************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -39,7 +39,7 @@ void ExaSet_PutParsOneSet (void *Exams);
void ExaSet_GetSetDataByCod (struct ExaSet_Set *Set); void ExaSet_GetSetDataByCod (struct ExaSet_Set *Set);
void ExaSet_ReceiveFormSet (void); void ExaSet_ReceiveSet (void);
void ExaSet_ChangeSetTitle (void); void ExaSet_ChangeSetTitle (void);
void ExaSet_ChangeNumQstsToExam (void); void ExaSet_ChangeNumQstsToExam (void);

View File

@ -62,6 +62,7 @@ typedef enum
Exa_CHECK_EXA_COD, Exa_CHECK_EXA_COD,
} Exa_CheckExaCod_t; } Exa_CheckExaCod_t;
#define Exa_NUM_EXISTING_NEW_EXAM 2
typedef enum typedef enum
{ {
Exa_EXISTING_EXAM, Exa_EXISTING_EXAM,

View File

@ -34,7 +34,8 @@
/*****************************************************************************/ /*****************************************************************************/
/* MIME types allowed for uploades files */ /* MIME types allowed for uploades files */
const char *MIM_MIMETypesAllowed[] = #define MIM_NUM_MIME_TYPES_ALLOWED 200
const char *MIM_MIMETypesAllowed[MIM_NUM_MIME_TYPES_ALLOWED] =
{ {
"application/", // "application/", //
"application/acrobat", // PDF "application/acrobat", // PDF
@ -238,11 +239,8 @@ const char *MIM_MIMETypesAllowed[] =
"zz-application/zz-winassoc-mpp" // Microsoft Project mpp "zz-application/zz-winassoc-mpp" // Microsoft Project mpp
}; };
const unsigned MIM_NUM_MIME_TYPES_ALLOWED = sizeof (MIM_MIMETypesAllowed) /
sizeof (MIM_MIMETypesAllowed[0]);
/*****************************************************************************/ /*****************************************************************************/
/******** Check if MIME type is allowed **********/ /*********************** Check if MIME type is allowed ***********************/
/*****************************************************************************/ /*****************************************************************************/
bool MIM_CheckIfMIMETypeIsAllowed (const char *MIMEType) bool MIM_CheckIfMIMETypeIsAllowed (const char *MIMEType)

View File

@ -33,7 +33,7 @@
/*****************************************************************************/ /*****************************************************************************/
/* Extensions allowed for uploaded files */ /* Extensions allowed for uploaded files */
const char *Ext_FileExtensionsAllowed[] = const char *Ext_FileExtensionsAllowed[Ext_NUM_FILE_EXT_ALLOWED] =
{ {
"3gp" , // Video Android mobile "3gp" , // Video Android mobile
"7z" , "7z" ,
@ -151,9 +151,6 @@ const char *Ext_FileExtensionsAllowed[] =
"zip" , "zip" ,
}; };
const unsigned Ext_NUM_FILE_EXT_ALLOWED = sizeof (Ext_FileExtensionsAllowed) /
sizeof (Ext_FileExtensionsAllowed[0]);
/*****************************************************************************/ /*****************************************************************************/
/******************* Check if file extension is allowed **********************/ /******************* Check if file extension is allowed **********************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -30,6 +30,13 @@
#include <linux/limits.h> // For NAME_MAX #include <linux/limits.h> // For NAME_MAX
#include <stdbool.h> // For boolean type #include <stdbool.h> // For boolean type
/*****************************************************************************/
/***************************** Public constants ******************************/
/*****************************************************************************/
#define Ext_NUM_FILE_EXT_ALLOWED 114
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -572,13 +572,13 @@ static void Fol_ShowFollowedOrFollower (struct Usr_Data *UsrDat)
[PhoSha_SHAPE_OVAL ] = "PHOTOO60x80", [PhoSha_SHAPE_OVAL ] = "PHOTOO60x80",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR60x80", [PhoSha_SHAPE_RECTANGLE] = "PHOTOR60x80",
}; };
bool Visible = Pri_ShowingIsAllowed (UsrDat->BaPrfVisibility,UsrDat); Usr_ICan_t ICanView = Pri_CheckIfICanView (UsrDat->BaPrfVisibility,UsrDat);
HTM_DIV_Begin ("class=\"FOLLOW_USR\""); HTM_DIV_Begin ("class=\"FOLLOW_USR\"");
/***** Show user's photo *****/ /***** Show user's photo *****/
HTM_DIV_Begin ("class=\"FOLLOW_PHOTO\""); HTM_DIV_Begin ("class=\"FOLLOW_PHOTO\"");
if (Visible) if (ICanView == Usr_I_CAN)
Pho_ShowUsrPhotoIfAllowed (UsrDat, Pho_ShowUsrPhotoIfAllowed (UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM);
HTM_DIV_End (); HTM_DIV_End ();
@ -586,7 +586,7 @@ static void Fol_ShowFollowedOrFollower (struct Usr_Data *UsrDat)
/***** Show user's name and icon to follow/unfollow *****/ /***** Show user's name and icon to follow/unfollow *****/
HTM_DIV_Begin ("class=\"FOLLOW_TXT\""); HTM_DIV_Begin ("class=\"FOLLOW_TXT\"");
if (Visible) if (ICanView == Usr_I_CAN)
{ {
/* Put form to go to public profile */ /* Put form to go to public profile */
Frm_BeginForm (ActSeeOthPubPrf); Frm_BeginForm (ActSeeOthPubPrf);
@ -612,7 +612,7 @@ static void Fol_ShowFollowedOrFollower (struct Usr_Data *UsrDat)
UsrDat->UsrCod)) // I follow user UsrDat->UsrCod)) // I follow user
/* Form to unfollow */ /* Form to unfollow */
Fol_PutIconToUnfollow (UsrDat->EnUsrCod); Fol_PutIconToUnfollow (UsrDat->EnUsrCod);
else if (Visible) // I do not follow this user and I can follow else if (ICanView == Usr_I_CAN) // I do not follow this user and I can follow
/* Form to follow */ /* Form to follow */
Fol_PutIconToFollow (UsrDat->EnUsrCod); Fol_PutIconToFollow (UsrDat->EnUsrCod);
} }
@ -636,13 +636,13 @@ static void Fol_WriteRowUsrToFollowOnRightColumn (struct Usr_Data *UsrDat)
[PhoSha_SHAPE_OVAL ] = "PHOTOO21x28", [PhoSha_SHAPE_OVAL ] = "PHOTOO21x28",
[PhoSha_SHAPE_RECTANGLE] = "PHOTOR21x28", [PhoSha_SHAPE_RECTANGLE] = "PHOTOR21x28",
}; };
bool Visible = Pri_ShowingIsAllowed (UsrDat->BaPrfVisibility,UsrDat); Usr_ICan_t ICanView = Pri_CheckIfICanView (UsrDat->BaPrfVisibility,UsrDat);
/***** Show user's photo *****/ /***** Show user's photo *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"CON_PHOTO %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"CON_PHOTO %s\"",The_GetColorRows ());
if (Visible) if (ICanView == Usr_I_CAN)
Pho_ShowUsrPhotoIfAllowed (UsrDat, Pho_ShowUsrPhotoIfAllowed (UsrDat,
ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM); ClassPhoto[Gbl.Prefs.PhotoShape],Pho_ZOOM);
HTM_TD_End (); HTM_TD_End ();
@ -650,7 +650,7 @@ static void Fol_WriteRowUsrToFollowOnRightColumn (struct Usr_Data *UsrDat)
/***** User's name *****/ /***** User's name *****/
HTM_TD_Begin ("class=\"CON_NAME_FOLLOW %s\"", HTM_TD_Begin ("class=\"CON_NAME_FOLLOW %s\"",
The_GetColorRows ()); The_GetColorRows ());
if (Visible) if (ICanView == Usr_I_CAN)
{ {
/* Put form to go to public profile */ /* Put form to go to public profile */
Frm_BeginForm (ActSeeOthPubPrf); Frm_BeginForm (ActSeeOthPubPrf);
@ -679,7 +679,7 @@ static void Fol_WriteRowUsrToFollowOnRightColumn (struct Usr_Data *UsrDat)
UsrDat->UsrCod)) // I follow user UsrDat->UsrCod)) // I follow user
/* Form to unfollow */ /* Form to unfollow */
Fol_PutIconToUnfollow (UsrDat->EnUsrCod); Fol_PutIconToUnfollow (UsrDat->EnUsrCod);
else if (Visible) // I do not follow this user and I can follow else if (ICanView == Usr_I_CAN) // I do not follow this user and I can follow
/* Form to follow */ /* Form to follow */
Fol_PutIconToFollow (UsrDat->EnUsrCod); Fol_PutIconToFollow (UsrDat->EnUsrCod);
} }

View File

@ -74,7 +74,7 @@ extern struct Globals Gbl;
/************************ Public constants and types *************************/ /************************ Public constants and types *************************/
/*****************************************************************************/ /*****************************************************************************/
const Act_Action_t For_ActionsSeeFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsSeeFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActSeeForCrsUsr, [For_FORUM_COURSE_USRS] = ActSeeForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActSeeForCrsTch, [For_FORUM_COURSE_TCHS] = ActSeeForCrsTch,
@ -91,7 +91,7 @@ const Act_Action_t For_ActionsSeeFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActSeePstForCrsUsr, [For_FORUM_COURSE_USRS] = ActSeePstForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActSeePstForCrsTch, [For_FORUM_COURSE_TCHS] = ActSeePstForCrsTch,
@ -108,7 +108,7 @@ const Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsRecThrFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsRecThrFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActRcvThrForCrsUsr, [For_FORUM_COURSE_USRS] = ActRcvThrForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActRcvThrForCrsTch, [For_FORUM_COURSE_TCHS] = ActRcvThrForCrsTch,
@ -125,7 +125,7 @@ const Act_Action_t For_ActionsRecThrFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsRecRepFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsRecRepFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActRcvRepForCrsUsr, [For_FORUM_COURSE_USRS] = ActRcvRepForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActRcvRepForCrsTch, [For_FORUM_COURSE_TCHS] = ActRcvRepForCrsTch,
@ -142,7 +142,7 @@ const Act_Action_t For_ActionsRecRepFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsReqDelThr[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsReqDelThr[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActReqDelThrCrsUsr, [For_FORUM_COURSE_USRS] = ActReqDelThrCrsUsr,
[For_FORUM_COURSE_TCHS] = ActReqDelThrCrsTch, [For_FORUM_COURSE_TCHS] = ActReqDelThrCrsTch,
@ -159,7 +159,7 @@ const Act_Action_t For_ActionsReqDelThr[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsDelThrFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsDelThrFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActDelThrForCrsUsr, [For_FORUM_COURSE_USRS] = ActDelThrForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActDelThrForCrsTch, [For_FORUM_COURSE_TCHS] = ActDelThrForCrsTch,
@ -176,7 +176,7 @@ const Act_Action_t For_ActionsDelThrFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsCutThrFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsCutThrFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActCutThrForCrsUsr, [For_FORUM_COURSE_USRS] = ActCutThrForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActCutThrForCrsTch, [For_FORUM_COURSE_TCHS] = ActCutThrForCrsTch,
@ -193,7 +193,7 @@ const Act_Action_t For_ActionsCutThrFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsPasThrFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsPasThrFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActPasThrForCrsUsr, [For_FORUM_COURSE_USRS] = ActPasThrForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActPasThrForCrsTch, [For_FORUM_COURSE_TCHS] = ActPasThrForCrsTch,
@ -210,7 +210,7 @@ const Act_Action_t For_ActionsPasThrFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsDelPstFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsDelPstFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActDelPstForCrsUsr, [For_FORUM_COURSE_USRS] = ActDelPstForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActDelPstForCrsTch, [For_FORUM_COURSE_TCHS] = ActDelPstForCrsTch,
@ -227,7 +227,7 @@ const Act_Action_t For_ActionsDelPstFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsEnbPstFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsEnbPstFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActEnbPstForCrsUsr, [For_FORUM_COURSE_USRS] = ActEnbPstForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActEnbPstForCrsTch, [For_FORUM_COURSE_TCHS] = ActEnbPstForCrsTch,
@ -244,7 +244,7 @@ const Act_Action_t For_ActionsEnbPstFor[For_NUM_TYPES_FORUM] =
[For_FORUM_UNKNOWN ] = ActSeeFor, [For_FORUM_UNKNOWN ] = ActSeeFor,
}; };
const Act_Action_t For_ActionsDisPstFor[For_NUM_TYPES_FORUM] = Act_Action_t For_ActionsDisPstFor[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = ActDisPstForCrsUsr, [For_FORUM_COURSE_USRS] = ActDisPstForCrsUsr,
[For_FORUM_COURSE_TCHS] = ActDisPstForCrsTch, [For_FORUM_COURSE_TCHS] = ActDisPstForCrsTch,
@ -267,7 +267,7 @@ const Act_Action_t For_ActionsDisPstFor[For_NUM_TYPES_FORUM] =
#define For_FORUM_MAX_LEVELS 5 #define For_FORUM_MAX_LEVELS 5
static const unsigned PermissionThreadDeletion[For_NUM_TYPES_FORUM] = static unsigned PermissionThreadDeletion[For_NUM_TYPES_FORUM] =
{ {
[For_FORUM_COURSE_USRS] = 0x3F0, [For_FORUM_COURSE_USRS] = 0x3F0,
[For_FORUM_COURSE_TCHS] = 0x3F0, [For_FORUM_COURSE_TCHS] = 0x3F0,
@ -379,7 +379,7 @@ static void For_WriteFormForumPst (struct For_Forums *Forums,
static void For_PutParsRemThread (void *Forums); static void For_PutParsRemThread (void *Forums);
static bool For_CheckIfICanMoveThreads (void); static Usr_ICan_t For_CheckIfICanMoveThreads (void);
static void For_InsertThrInClipboard (long ThrCod); static void For_InsertThrInClipboard (long ThrCod);
static void For_ShowStatOfAForumType (For_ForumType_t ForumType, static void For_ShowStatOfAForumType (For_ForumType_t ForumType,
@ -720,7 +720,7 @@ void For_ShowPostsOfAThread (struct For_Forums *Forums,
For_GetThreadData (&Thread); For_GetThreadData (&Thread);
/***** Get if there is a thread ready to be moved *****/ /***** Get if there is a thread ready to be moved *****/
if (For_CheckIfICanMoveThreads ()) if (For_CheckIfICanMoveThreads () == Usr_I_CAN)
Forums->Thread.ToMove = For_DB_GetThrInMyClipboard (); Forums->Thread.ToMove = For_DB_GetThrInMyClipboard ();
/***** Get thread read time for the current user *****/ /***** Get thread read time for the current user *****/
@ -871,7 +871,7 @@ static void For_PutIconsOneThread (void *Forums)
/***** Put icon to get resource link *****/ /***** Put icon to get resource link *****/
if (((struct For_Forums *) Forums)->Forum.Type == For_FORUM_COURSE_USRS && if (((struct For_Forums *) Forums)->Forum.Type == For_FORUM_COURSE_USRS &&
Rsc_CheckIfICanGetLink ()) Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkForCrsUsr,NULL, Ico_PutContextualIconToGetLink (ActReqLnkForCrsUsr,NULL,
For_PutParsNewPost,Forums); For_PutParsNewPost,Forums);
} }
@ -1233,7 +1233,7 @@ void For_ShowForumList (struct For_Forums *Forums)
bool ICanSeeDegForum; bool ICanSeeDegForum;
/***** Get if there is a thread ready to be moved *****/ /***** Get if there is a thread ready to be moved *****/
if (For_CheckIfICanMoveThreads ()) if (For_CheckIfICanMoveThreads () == Usr_I_CAN)
Forums->Thread.ToMove = For_DB_GetThrInMyClipboard (); Forums->Thread.ToMove = For_DB_GetThrInMyClipboard ();
/***** Fill the list with the institutions I belong to *****/ /***** Fill the list with the institutions I belong to *****/
@ -2182,7 +2182,7 @@ static void For_PutIconsThreads (void *Forums)
/***** Put icon to get resource link *****/ /***** Put icon to get resource link *****/
if (((struct For_Forums *) Forums)->Forum.Type == For_FORUM_COURSE_USRS && if (((struct For_Forums *) Forums)->Forum.Type == For_FORUM_COURSE_USRS &&
Rsc_CheckIfICanGetLink ()) Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkForCrsUsr,NULL, Ico_PutContextualIconToGetLink (ActReqLnkForCrsUsr,NULL,
For_PutParsNewPost,Forums); For_PutParsNewPost,Forums);
} }
@ -2232,10 +2232,10 @@ static void For_ListForumThrs (struct For_Forums *Forums,
long ThreadInMyClipboard = -1L; long ThreadInMyClipboard = -1L;
unsigned Column; unsigned Column;
const char *BgColor; const char *BgColor;
bool ICanMoveThreads; Usr_ICan_t ICanMoveThreads = For_CheckIfICanMoveThreads ();
/***** Get if there is a thread ready to be moved *****/ /***** Get if there is a thread ready to be moved *****/
if ((ICanMoveThreads = For_CheckIfICanMoveThreads ())) if (ICanMoveThreads == Usr_I_CAN)
ThreadInMyClipboard = For_DB_GetThrInMyClipboard (); ThreadInMyClipboard = For_DB_GetThrInMyClipboard ();
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
@ -2288,7 +2288,7 @@ static void For_ListForumThrs (struct For_Forums *Forums,
} }
/***** Put button to cut the thread for moving it to another forum *****/ /***** Put button to cut the thread for moving it to another forum *****/
if (ICanMoveThreads) if (ICanMoveThreads == Usr_I_CAN)
{ {
HTM_BR (); HTM_BR ();
Frm_BeginFormAnchor (For_ActionsCutThrFor[Forums->Forum.Type], Frm_BeginFormAnchor (For_ActionsCutThrFor[Forums->Forum.Type],
@ -3238,9 +3238,10 @@ void For_PasteThread (void)
/*********************** Check if I can move threads *************************/ /*********************** Check if I can move threads *************************/
/*****************************************************************************/ /*****************************************************************************/
static bool For_CheckIfICanMoveThreads (void) static Usr_ICan_t For_CheckIfICanMoveThreads (void)
{ {
return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM); // If I have permission to move threads... return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN : // If I have permission to move threads...
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -113,8 +113,8 @@ extern struct Globals Gbl;
static void Gam_ListAllGamesHeading (const struct Gam_Games *Games); static void Gam_ListAllGamesHeading (const struct Gam_Games *Games);
static bool Gam_CheckIfICanEditGames (void); static Usr_ICan_t Gam_CheckIfICanEditGames (void);
static bool Gam_CheckIfICanListGameQuestions (void); static Usr_ICan_t Gam_CheckIfICanListGameQuestions (void);
static void Gam_PutIconsListingGames (void *Games); static void Gam_PutIconsListingGames (void *Games);
static void Gam_PutIconToCreateNewGame (struct Gam_Games *Games); static void Gam_PutIconToCreateNewGame (struct Gam_Games *Games);
static void Gam_PutParsToCreateNewGame (void *Games); static void Gam_PutParsToCreateNewGame (void *Games);
@ -153,7 +153,7 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games);
static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games, static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
unsigned NumQsts, unsigned NumQsts,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditQuestions); Usr_ICan_t ICanEditQuestions);
static void Gam_PutIconToAddNewQuestions (void *Games); static void Gam_PutIconToAddNewQuestions (void *Games);
@ -163,7 +163,7 @@ static void Gam_FreeListsSelectedQuestions (struct Gam_Games *Games);
static void Gam_ExchangeQuestions (long GamCod, static void Gam_ExchangeQuestions (long GamCod,
unsigned QstIndTop,unsigned QstIndBottom); unsigned QstIndTop,unsigned QstIndBottom);
static bool Gam_CheckIfEditable (const struct Gam_Game *Game); static Usr_ICan_t Gam_CheckIfICanEditGame (const struct Gam_Game *Game);
/*****************************************************************************/ /*****************************************************************************/
/*************************** Reset games context *****************************/ /*************************** Reset games context *****************************/
@ -346,9 +346,9 @@ static void Gam_ListAllGamesHeading (const struct Gam_Games *Games)
/************************ Check if I can edit games **************************/ /************************ Check if I can edit games **************************/
/*****************************************************************************/ /*****************************************************************************/
static bool Gam_CheckIfICanEditGames (void) static Usr_ICan_t Gam_CheckIfICanEditGames (void)
{ {
static const bool ICanEditGames[Rol_NUM_ROLES] = static bool ICanEditGames[Rol_NUM_ROLES] =
{ {
[Rol_TCH ] = true, [Rol_TCH ] = true,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = true,
@ -361,13 +361,13 @@ static bool Gam_CheckIfICanEditGames (void)
/**************** Check if I can list questions in games *********************/ /**************** Check if I can list questions in games *********************/
/*****************************************************************************/ /*****************************************************************************/
static bool Gam_CheckIfICanListGameQuestions (void) static Usr_ICan_t Gam_CheckIfICanListGameQuestions (void)
{ {
static const bool ICanListGameQuestions[Rol_NUM_ROLES] = static Usr_ICan_t ICanListGameQuestions[Rol_NUM_ROLES] =
{ {
[Rol_NET ] = true, [Rol_NET ] = Usr_I_CAN,
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanListGameQuestions[Gbl.Usrs.Me.Role.Logged]; return ICanListGameQuestions[Gbl.Usrs.Me.Role.Logged];
@ -379,7 +379,7 @@ static bool Gam_CheckIfICanListGameQuestions (void)
static void Gam_PutIconsListingGames (void *Games) static void Gam_PutIconsListingGames (void *Games)
{ {
static const Act_Action_t NextAction[Rol_NUM_ROLES] = static Act_Action_t NextAction[Rol_NUM_ROLES] =
{ {
[Rol_STD ] = ActSeeMyMchResCrs, [Rol_STD ] = ActSeeMyMchResCrs,
[Rol_NET ] = ActReqSeeUsrMchRes, [Rol_NET ] = ActReqSeeUsrMchRes,
@ -390,7 +390,7 @@ static void Gam_PutIconsListingGames (void *Games)
if (Games) if (Games)
{ {
/***** Put icon to create a new game *****/ /***** Put icon to create a new game *****/
if (Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN)
Gam_PutIconToCreateNewGame ((struct Gam_Games *) Games); Gam_PutIconToCreateNewGame ((struct Gam_Games *) Games);
/***** Put icon to view matches results *****/ /***** Put icon to view matches results *****/
@ -399,9 +399,8 @@ static void Gam_PutIconsListingGames (void *Games)
NULL,NULL); NULL,NULL);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkGam,NULL, Ico_PutContextualIconToGetLink (ActReqLnkGam,NULL,Gam_PutPars,Games);
Gam_PutPars,Games);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_GAMES); Fig_PutIconToShowFigure (Fig_GAMES);
@ -687,8 +686,7 @@ static void Gam_PutIconsEditingOneGame (void *Games)
{ {
if (Games) if (Games)
/***** Icon to view game *****/ /***** Icon to view game *****/
Ico_PutContextualIconToView (ActLstOneGam,NULL, Ico_PutContextualIconToView (ActLstOneGam,NULL,Gam_PutPars,Games);
Gam_PutPars,Games);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -716,12 +714,12 @@ static void Gam_PutParGameOrder (Gam_Order_t SelectedOrder)
static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games, static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games,
const char *Anchor) const char *Anchor)
{ {
static const Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] = static Act_Action_t ActionHideUnhide[HidVis_NUM_HIDDEN_VISIBLE] =
{ {
[HidVis_HIDDEN ] = ActUnhGam, // Hidden ==> action to unhide [HidVis_HIDDEN ] = ActUnhGam, // Hidden ==> action to unhide
[HidVis_VISIBLE] = ActHidGam, // Visible ==> action to hide [HidVis_VISIBLE] = ActHidGam, // Visible ==> action to hide
}; };
static const Act_Action_t ActionShowResults[Rol_NUM_ROLES] = static Act_Action_t ActionShowResults[Rol_NUM_ROLES] =
{ {
[Rol_STD ] = ActSeeMyMchResGam, [Rol_STD ] = ActSeeMyMchResGam,
[Rol_NET ] = ActSeeUsrMchResGam, [Rol_NET ] = ActSeeUsrMchResGam,
@ -729,7 +727,7 @@ static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games,
[Rol_SYS_ADM] = ActSeeUsrMchResGam, [Rol_SYS_ADM] = ActSeeUsrMchResGam,
}; };
if (Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN)
{ {
/***** Icon to remove game *****/ /***** Icon to remove game *****/
Ico_PutContextualIconToRemove (ActReqRemGam,NULL, Ico_PutContextualIconToRemove (ActReqRemGam,NULL,
@ -741,14 +739,12 @@ static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games,
Games->Game.HiddenOrVisible); Games->Game.HiddenOrVisible);
/***** Icon to edit game *****/ /***** Icon to edit game *****/
Ico_PutContextualIconToEdit (ActEdiOneGam,NULL, Ico_PutContextualIconToEdit (ActEdiOneGam,NULL,Gam_PutPars,Games);
Gam_PutPars,Games);
} }
if (Gam_CheckIfICanListGameQuestions ()) if (Gam_CheckIfICanListGameQuestions () == Usr_I_CAN)
/***** Icon to view game listing its questions *****/ /***** Icon to view game listing its questions *****/
Ico_PutContextualIconToView (ActLstOneGam,NULL, Ico_PutContextualIconToView (ActLstOneGam,NULL,Gam_PutPars,Games);
Gam_PutPars,Games);
/***** Put icon to view matches results *****/ /***** Put icon to view matches results *****/
if (ActionShowResults[Gbl.Usrs.Me.Role.Logged]) if (ActionShowResults[Gbl.Usrs.Me.Role.Logged])
@ -756,9 +752,8 @@ static void Gam_PutIconsToRemEditOneGame (struct Gam_Games *Games,
Gam_PutPars,Games); Gam_PutPars,Games);
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink ()) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
Ico_PutContextualIconToGetLink (ActReqLnkGam,NULL, Ico_PutContextualIconToGetLink (ActReqLnkGam,NULL,Gam_PutPars,Games);
Gam_PutPars,Games);
} }
@ -875,7 +870,7 @@ void Gam_GetListGames (struct Gam_Games *Games,Gam_Order_t SelectedOrder)
void Gam_GetListSelectedGamCods (struct Gam_Games *Games) void Gam_GetListSelectedGamCods (struct Gam_Games *Games)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
unsigned MaxSizeListGamCodsSelected; unsigned MaxSizeListGamCodsSelected;
unsigned NumGame; unsigned NumGame;
const char *Ptr; const char *Ptr;
@ -1054,7 +1049,7 @@ void Gam_AskRemGame (void)
/***** Get data of the game from database *****/ /***** Get data of the game from database *****/
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
if (!Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Show question and button to remove game *****/ /***** Show question and button to remove game *****/
@ -1087,7 +1082,7 @@ void Gam_RemoveGame (void)
/***** Get data of the game from database *****/ /***** Get data of the game from database *****/
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
if (!Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Remove game from all tables *****/ /***** Remove game from all tables *****/
@ -1163,7 +1158,7 @@ static void Gam_HideUnhideGame (HidVis_HiddenOrVisible_t HiddenOrVisible)
/***** Get data of the game from database *****/ /***** Get data of the game from database *****/
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
if (!Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Unhide game *****/ /***** Unhide game *****/
@ -1189,7 +1184,7 @@ void Gam_ListGame (void)
Gam_ResetGame (&Games.Game); Gam_ResetGame (&Games.Game);
/***** Check if I can list game questions *****/ /***** Check if I can list game questions *****/
if (!Gam_CheckIfICanListGameQuestions ()) if (Gam_CheckIfICanListGameQuestions () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get parameters *****/ /***** Get parameters *****/
@ -1223,7 +1218,7 @@ void Gam_ReqCreatOrEditGame (void)
Gam_ResetGame (&Games.Game); Gam_ResetGame (&Games.Game);
/***** Check if I can edit games *****/ /***** Check if I can edit games *****/
if (!Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get parameters *****/ /***** Get parameters *****/
@ -1258,12 +1253,12 @@ void Gam_PutFormsOneGame (struct Gam_Games *Games,
extern const char *Hlp_ASSESSMENT_Games_edit_game; extern const char *Hlp_ASSESSMENT_Games_edit_game;
extern const char *Hlp_ASSESSMENT_Games_new_game; extern const char *Hlp_ASSESSMENT_Games_new_game;
extern const char *Txt_Game; extern const char *Txt_Game;
static void (*FunctionToDrawContextualIcons[]) (void *Args) = static void (*FunctionToDrawContextualIcons[Gam_NUM_EXISTING_NEW_GAME]) (void *Args) =
{ {
[Gam_EXISTING_GAME] = Gam_PutIconsEditingOneGame, [Gam_EXISTING_GAME] = Gam_PutIconsEditingOneGame,
[Gam_NEW_GAME ] = NULL, [Gam_NEW_GAME ] = NULL,
}; };
static const char **HelpLink[] = static const char **HelpLink[Gam_NUM_EXISTING_NEW_GAME] =
{ {
[Gam_EXISTING_GAME] = &Hlp_ASSESSMENT_Games_edit_game, [Gam_EXISTING_GAME] = &Hlp_ASSESSMENT_Games_edit_game,
[Gam_NEW_GAME ] = &Hlp_ASSESSMENT_Games_new_game, [Gam_NEW_GAME ] = &Hlp_ASSESSMENT_Games_new_game,
@ -1324,17 +1319,17 @@ static void Gam_PutFormEditionGame (struct Gam_Games *Games,
extern const char *Txt_Description; extern const char *Txt_Description;
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
extern const char *Txt_Create; extern const char *Txt_Create;
static const Act_Action_t NextAction[] = static Act_Action_t NextAction[Gam_NUM_EXISTING_NEW_GAME] =
{ {
[Gam_EXISTING_GAME] = ActChgGam, [Gam_EXISTING_GAME] = ActChgGam,
[Gam_NEW_GAME ] = ActNewGam, [Gam_NEW_GAME ] = ActNewGam,
}; };
static Btn_Button_t Button[] = static Btn_Button_t Button[Gam_NUM_EXISTING_NEW_GAME] =
{ {
[Gam_EXISTING_GAME] = Btn_CONFIRM_BUTTON, [Gam_EXISTING_GAME] = Btn_CONFIRM_BUTTON,
[Gam_NEW_GAME ] = Btn_CREATE_BUTTON, [Gam_NEW_GAME ] = Btn_CREATE_BUTTON,
}; };
const char *TxtButton[] = const char *TxtButton[Gam_NUM_EXISTING_NEW_GAME] =
{ {
[Gam_EXISTING_GAME] = Txt_Save_changes, [Gam_EXISTING_GAME] = Txt_Save_changes,
[Gam_NEW_GAME ] = Txt_Create, [Gam_NEW_GAME ] = Txt_Create,
@ -1426,7 +1421,7 @@ static void Gam_PutFormEditionGame (struct Gam_Games *Games,
/********************** Receive form to create a new game ********************/ /********************** Receive form to create a new game ********************/
/*****************************************************************************/ /*****************************************************************************/
void Gam_ReceiveFormGame (void) void Gam_ReceiveGame (void)
{ {
struct Gam_Games Games; struct Gam_Games Games;
Gam_ExistingNewGame_t ExistingNewGame; Gam_ExistingNewGame_t ExistingNewGame;
@ -1439,7 +1434,7 @@ void Gam_ReceiveFormGame (void)
Gam_ResetGame (&Games.Game); Gam_ResetGame (&Games.Game);
/***** Check if I can edit games *****/ /***** Check if I can edit games *****/
if (!Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get parameters *****/ /***** Get parameters *****/
@ -1568,7 +1563,7 @@ void Gam_ReqSelectQstsToAddToGame (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Show form to create a new question in this game *****/ /***** Show form to create a new question in this game *****/
@ -1600,7 +1595,7 @@ void Gam_ListQstsToAddToGame (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** List several test questions for selection *****/ /***** List several test questions for selection *****/
@ -1640,17 +1635,17 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games)
extern const char *Txt_Questions; extern const char *Txt_Questions;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumQsts; unsigned NumQsts;
bool ICanEditQuestions = Gam_CheckIfEditable (&Games->Game); Usr_ICan_t ICanEditQuestions = Gam_CheckIfICanEditGame (&Games->Game);
/***** Get data of questions from database *****/ /***** Get data of questions from database *****/
NumQsts = Gam_DB_GetGameQuestionsBasic (&mysql_res,Games->Game.GamCod); NumQsts = Gam_DB_GetGameQuestionsBasic (&mysql_res,Games->Game.GamCod);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_Questions, Box_BoxBegin (Txt_Questions,
ICanEditQuestions ? Gam_PutIconToAddNewQuestions : ICanEditQuestions == Usr_I_CAN ? Gam_PutIconToAddNewQuestions :
NULL, NULL,
ICanEditQuestions ? Games : ICanEditQuestions == Usr_I_CAN ? Games :
NULL, NULL,
Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE);
/***** Show table with questions *****/ /***** Show table with questions *****/
@ -1672,7 +1667,7 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games)
static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games, static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
unsigned NumQsts, unsigned NumQsts,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditQuestions) Usr_ICan_t ICanEditQuestions)
{ {
extern const char *Txt_Questions; extern const char *Txt_Questions;
extern const char *Txt_No_INDEX; extern const char *Txt_No_INDEX;
@ -1741,14 +1736,14 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
/* Put icon to remove the question */ /* Put icon to remove the question */
if (ICanEditQuestions) if (ICanEditQuestions == Usr_I_CAN)
Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL, Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL,
Gam_PutParsOneQst,Games); Gam_PutParsOneQst,Games);
else else
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
/* Put icon to move up the question */ /* Put icon to move up the question */
if (ICanEditQuestions && QstInd > 1) if (ICanEditQuestions == Usr_I_CAN && QstInd > 1)
Lay_PutContextualLinkOnlyIcon (ActUp_GamQst,Anchor, Lay_PutContextualLinkOnlyIcon (ActUp_GamQst,Anchor,
Gam_PutParsOneQst,Games, Gam_PutParsOneQst,Games,
"arrow-up.svg",Ico_BLACK); "arrow-up.svg",Ico_BLACK);
@ -1757,7 +1752,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
Txt_Movement_not_allowed); Txt_Movement_not_allowed);
/* Put icon to move down the question */ /* Put icon to move down the question */
if (ICanEditQuestions && QstInd < MaxQstInd) if (ICanEditQuestions == Usr_I_CAN && QstInd < MaxQstInd)
Lay_PutContextualLinkOnlyIcon (ActDwnGamQst,Anchor, Lay_PutContextualLinkOnlyIcon (ActDwnGamQst,Anchor,
Gam_PutParsOneQst,Games, Gam_PutParsOneQst,Games,
"arrow-down.svg",Ico_BLACK); "arrow-down.svg",Ico_BLACK);
@ -1766,7 +1761,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
Txt_Movement_not_allowed); Txt_Movement_not_allowed);
/* Put icon to edit the question */ /* Put icon to edit the question */
if (ICanEditQuestions) if (ICanEditQuestions == Usr_I_CAN)
Ico_PutContextualIconToEdit (ActEdiOneTstQst,NULL, Ico_PutContextualIconToEdit (ActEdiOneTstQst,NULL,
Qst_PutParQstCod,&Question.QstCod); Qst_PutParQstCod,&Question.QstCod);
@ -1827,7 +1822,7 @@ void Gam_AddQstsToGame (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get selected questions *****/ /***** Get selected questions *****/
@ -1935,7 +1930,7 @@ void Gam_ReqRemQstFromGame (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get question index *****/ /***** Get question index *****/
@ -1977,7 +1972,7 @@ void Gam_RemoveQstFromGame (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get question index *****/ /***** Get question index *****/
@ -2026,7 +2021,7 @@ void Gam_MoveUpQst (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get question index *****/ /***** Get question index *****/
@ -2076,7 +2071,7 @@ void Gam_MoveDownQst (void)
Gam_GetGameDataByCod (&Games.Game); Gam_GetGameDataByCod (&Games.Game);
/***** Check if game has matches *****/ /***** Check if game has matches *****/
if (!Gam_CheckIfEditable (&Games.Game)) if (Gam_CheckIfICanEditGame (&Games.Game) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
/***** Get question index *****/ /***** Get question index *****/
@ -2155,13 +2150,14 @@ static void Gam_ExchangeQuestions (long GamCod,
/*****************************************************************************/ /*****************************************************************************/
// Before calling this function, number of matches must be calculated // Before calling this function, number of matches must be calculated
static bool Gam_CheckIfEditable (const struct Gam_Game *Game) static Usr_ICan_t Gam_CheckIfICanEditGame (const struct Gam_Game *Game)
{ {
if (Gam_CheckIfICanEditGames ()) if (Gam_CheckIfICanEditGames () == Usr_I_CAN)
/***** Questions are editable only if game has no matches *****/ /***** Questions are editable only if game has no matches *****/
return Game->NumMchs == 0; // Games with matches should not be edited return Game->NumMchs == 0 ? Usr_I_CAN : // Games with matches should not be edited
Usr_I_CAN_NOT;
else else
return false; // Questions are not editable return Usr_I_CAN_NOT; // Questions are not editable
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -56,6 +56,7 @@ typedef enum
} Gam_AnswerType_t; } Gam_AnswerType_t;
#define Gam_ANSWER_TYPE_DEFAULT Gam_ANS_UNIQUE_CHOICE #define Gam_ANSWER_TYPE_DEFAULT Gam_ANS_UNIQUE_CHOICE
#define Gam_NUM_EXISTING_NEW_GAME 2
typedef enum typedef enum
{ {
Gam_EXISTING_GAME, Gam_EXISTING_GAME,
@ -140,7 +141,7 @@ void Gam_ListGame (void);
void Gam_ReqCreatOrEditGame (void); void Gam_ReqCreatOrEditGame (void);
void Gam_PutFormsOneGame (struct Gam_Games *Games, void Gam_PutFormsOneGame (struct Gam_Games *Games,
Gam_ExistingNewGame_t ExistingNewGame); Gam_ExistingNewGame_t ExistingNewGame);
void Gam_ReceiveFormGame (void); void Gam_ReceiveGame (void);
void Gam_ReqSelectQstsToAddToGame (void); void Gam_ReqSelectQstsToAddToGame (void);
void Gam_ListQstsToAddToGame (void); void Gam_ListQstsToAddToGame (void);

View File

@ -72,7 +72,7 @@ struct Globals Gbl; // All the global parameters and variables must be in this s
void Gbl_InitializeGlobals (void) void Gbl_InitializeGlobals (void)
{ {
extern const unsigned Txt_Current_CGI_SWAD_Language; extern unsigned Txt_Current_CGI_SWAD_Language;
Rol_Role_t Role; Rol_Role_t Role;
Gbl.Layout.WritingHTMLStart = Gbl.Layout.WritingHTMLStart =

View File

@ -66,20 +66,6 @@
#define Grp_GROUPS_SECTION_ID "grps" #define Grp_GROUPS_SECTION_ID "grps"
#define Grp_NEW_GROUP_SECTION_ID "new_grp" #define Grp_NEW_GROUP_SECTION_ID "new_grp"
static const bool Grp_ICanChangeGrps[Rol_NUM_ROLES] =
{
[Rol_UNK ] = false,
[Rol_GST ] = false,
[Rol_USR ] = false,
[Rol_STD ] = true,
[Rol_NET ] = false,
[Rol_TCH ] = true,
[Rol_DEG_ADM] = false,
[Rol_CTR_ADM] = false,
[Rol_INS_ADM] = false,
[Rol_SYS_ADM] = true,
};
/*****************************************************************************/ /*****************************************************************************/
/************* External global variables from others modules *****************/ /************* External global variables from others modules *****************/
/*****************************************************************************/ /*****************************************************************************/
@ -90,6 +76,8 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static Usr_ICan_t Grp_CheckIfICanChangeGrps (void);
static void Grp_ReqEditGroupsInternal (Ale_AlertType_t AlertTypeGroupTypes,const char *AlertTextGroupTypes, static void Grp_ReqEditGroupsInternal (Ale_AlertType_t AlertTypeGroupTypes,const char *AlertTextGroupTypes,
Ale_AlertType_t AlertTypeGroups,const char *AlertTextGroups); Ale_AlertType_t AlertTypeGroups,const char *AlertTextGroups);
static void Grp_ReqEditGroupsInternal0 (void); static void Grp_ReqEditGroupsInternal0 (void);
@ -143,6 +131,22 @@ static void Grp_WriteMaxStds (char Str[Cns_MAX_DECIMAL_DIGITS_UINT + 1],unsigned
static void Grp_PutParGrpTypCod (void *GrpTypCod); static void Grp_PutParGrpTypCod (void *GrpTypCod);
static void Grp_PutParGrpCod (void *GrpCod); static void Grp_PutParGrpCod (void *GrpCod);
/*****************************************************************************/
/************************ Check if I can change groups ***********************/
/*****************************************************************************/
static Usr_ICan_t Grp_CheckIfICanChangeGrps (void)
{
static Usr_ICan_t Grp_ICanChangeGrps[Rol_NUM_ROLES] =
{
[Rol_STD ] = Usr_I_CAN,
[Rol_TCH ] = Usr_I_CAN,
[Rol_SYS_ADM] = Usr_I_CAN,
};
return Grp_ICanChangeGrps[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/ /*****************************************************************************/
/******************* Write the names of the selected groups ******************/ /******************* Write the names of the selected groups ******************/
/*****************************************************************************/ /*****************************************************************************/
@ -624,7 +628,7 @@ void Grp_ChangeMyGrps (Cns_QuietOrVerbose_t QuietOrVerbose)
bool ChangesMade; bool ChangesMade;
/***** Can I change my groups? *****/ /***** Can I change my groups? *****/
if (Grp_ICanChangeGrps[Gbl.Usrs.Me.Role.Logged]) if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN)
{ {
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -683,7 +687,7 @@ void Grp_ChangeOtherUsrGrps (void)
bool SelectionIsValid; bool SelectionIsValid;
/***** Can I change another user's groups? *****/ /***** Can I change another user's groups? *****/
if (Grp_ICanChangeGrps[Gbl.Usrs.Me.Role.Logged]) if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN)
{ {
/***** Get list of groups types and groups in current course *****/ /***** Get list of groups types and groups in current course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -1340,8 +1344,7 @@ static void Grp_PutIconsEditingGroupTypes (__attribute__((unused)) void *Args)
static void Grp_PutIconToViewGroups (void) static void Grp_PutIconToViewGroups (void)
{ {
Ico_PutContextualIconToView (ActReqSelGrp,NULL, Ico_PutContextualIconToView (ActReqSelGrp,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1773,8 +1776,7 @@ void Grp_ShowLstGrpsToChgMyGrps (void)
static void Grp_PutIconToEditGroups (__attribute__((unused)) void *Args) static void Grp_PutIconToEditGroups (__attribute__((unused)) void *Args)
{ {
Ico_PutContextualIconToEdit (ActReqEdiGrp,NULL, Ico_PutContextualIconToEdit (ActReqEdiGrp,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -3204,7 +3206,7 @@ void Grp_GetNamesGrpsUsrBelongsTo (long UsrCod,long GrpTypCod,char *GroupNames)
/****************** Receive form to create a new group type ******************/ /****************** Receive form to create a new group type ******************/
/*****************************************************************************/ /*****************************************************************************/
void Grp_ReceiveFormNewGrpTyp (void) void Grp_ReceiveNewGrpTyp (void)
{ {
extern const char *Txt_The_type_of_group_X_already_exists; extern const char *Txt_The_type_of_group_X_already_exists;
extern const char *Txt_Created_new_type_of_group_X; extern const char *Txt_Created_new_type_of_group_X;
@ -3276,7 +3278,7 @@ static bool Grp_CheckIfOpenTimeInTheFuture (time_t OpenTimeUTC)
/******************** Receive form to create a new group *********************/ /******************** Receive form to create a new group *********************/
/*****************************************************************************/ /*****************************************************************************/
void Grp_ReceiveFormNewGrp (void) void Grp_ReceiveNewGrp (void)
{ {
extern const char *Txt_The_group_X_already_exists; extern const char *Txt_The_group_X_already_exists;
extern const char *Txt_Created_new_group_X; extern const char *Txt_Created_new_group_X;

View File

@ -206,8 +206,8 @@ bool Grp_CheckIfUsrSharesAnyOfMyGrpsInCurrentCrs (const struct Usr_Data *UsrDat)
void Grp_GetLstCodGrpsWithFileZonesIBelong (struct ListCodGrps *LstGrps); void Grp_GetLstCodGrpsWithFileZonesIBelong (struct ListCodGrps *LstGrps);
void Grp_GetNamesGrpsUsrBelongsTo (long UsrCod,long GrpTypCod,char *GroupNames); void Grp_GetNamesGrpsUsrBelongsTo (long UsrCod,long GrpTypCod,char *GroupNames);
void Grp_ReceiveFormNewGrpTyp (void); void Grp_ReceiveNewGrpTyp (void);
void Grp_ReceiveFormNewGrp (void); void Grp_ReceiveNewGrp (void);
void Grp_ReqRemGroupType (void); void Grp_ReqRemGroupType (void);
void Grp_ReqRemGroup (void); void Grp_ReqRemGroup (void);
void Grp_RemoveGroupType (void); void Grp_RemoveGroupType (void);

View File

@ -86,7 +86,7 @@ void Hlp_ShowHelpWhatWouldYouLikeToDo (void)
extern const char *Txt_Log_in; extern const char *Txt_Log_in;
extern const char *Txt_New_on_PLATFORM_Sign_up; extern const char *Txt_New_on_PLATFORM_Sign_up;
extern const char *Txt_Actions[ActLst_NUM_ACTIONS]; extern const char *Txt_Actions[ActLst_NUM_ACTIONS];
static const Act_Action_t ActionsRemoveMe[Rol_NUM_ROLES] = static Act_Action_t ActionsRemoveMe[Rol_NUM_ROLES] =
{ {
[Rol_UNK ] = ActUnk, [Rol_UNK ] = ActUnk,
[Rol_GST ] = ActUnk, [Rol_GST ] = ActUnk,

View File

@ -167,7 +167,7 @@ void Hie_SeePending (void)
void Hie_WriteMenuHierarchy (void) void Hie_WriteMenuHierarchy (void)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
static void (*FunctionWriteSelector[Hie_NUM_LEVELS]) (void) = static void (*FunctionWriteSelector[Hie_NUM_LEVELS]) (void) =
{ {
@ -707,23 +707,23 @@ void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
/****************** Check if I can edit hierarchy elements *******************/ /****************** Check if I can edit hierarchy elements *******************/
/*****************************************************************************/ /*****************************************************************************/
bool Hie_CheckIfICanEdit (void) Usr_ICan_t Hie_CheckIfICanEdit (void)
{ {
// Some admins can edit all hierarchy elements. // Some admins can edit all hierarchy elements.
// Any user can edit the elements he/she has created... // Any user can edit the elements he/she has created...
// ...as long as they are in pending status. // ...as long as they are in pending status.
static const bool ICanEdit[Rol_NUM_ROLES] = static Usr_ICan_t ICanEdit[Rol_NUM_ROLES] =
{ {
/* Users who can edit */ /* Users who can edit */
[Rol_GST ] = true, [Rol_GST ] = Usr_I_CAN,
[Rol_USR ] = true, [Rol_USR ] = Usr_I_CAN,
[Rol_STD ] = true, [Rol_STD ] = Usr_I_CAN,
[Rol_NET ] = true, [Rol_NET ] = Usr_I_CAN,
[Rol_TCH ] = true, [Rol_TCH ] = Usr_I_CAN,
[Rol_DEG_ADM] = true, [Rol_DEG_ADM] = Usr_I_CAN,
[Rol_CTR_ADM] = true, [Rol_CTR_ADM] = Usr_I_CAN,
[Rol_INS_ADM] = true, [Rol_INS_ADM] = Usr_I_CAN,
[Rol_SYS_ADM] = true, [Rol_SYS_ADM] = Usr_I_CAN,
}; };
return ICanEdit[Gbl.Usrs.Me.Role.Logged]; return ICanEdit[Gbl.Usrs.Me.Role.Logged];

View File

@ -49,7 +49,7 @@ void Hie_ResetHierarchy (void);
void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan); void Hie_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan);
bool Hie_CheckIfICanEdit (void); Usr_ICan_t Hie_CheckIfICanEdit (void);
void Hie_WriteStatusCell (Hie_Status_t Status, void Hie_WriteStatusCell (Hie_Status_t Status,
const char *Class,const char *BgColor, const char *Class,const char *BgColor,

View File

@ -91,7 +91,7 @@ void HieCfg_Name (Frm_PutForm_t PutForm,Hie_Level_t Level,
extern const char *Nam_Classes[Nam_NUM_SHRT_FULL_NAMES]; extern const char *Nam_Classes[Nam_NUM_SHRT_FULL_NAMES];
extern const char *Txt_Short_name; extern const char *Txt_Short_name;
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
static const Act_Action_t Action[Hie_NUM_LEVELS][Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t Action[Hie_NUM_LEVELS][Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Hie_INS][Nam_SHRT_NAME] = ActRenInsShoCfg, [Hie_INS][Nam_SHRT_NAME] = ActRenInsShoCfg,
[Hie_INS][Nam_FULL_NAME] = ActRenInsFulCfg, [Hie_INS][Nam_FULL_NAME] = ActRenInsFulCfg,
@ -205,7 +205,7 @@ void HieCfg_WWW (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm,
void HieCfg_Shortcut (Vie_ViewType_t ViewType,ParCod_Param_t ParCode,long HieCod) void HieCfg_Shortcut (Vie_ViewType_t ViewType,ParCod_Param_t ParCode,long HieCod)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Shortcut; extern const char *Txt_Shortcut;
/***** Short cut *****/ /***** Short cut *****/

View File

@ -44,17 +44,6 @@
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_parameter_code.h" #include "swad_parameter_code.h"
/*****************************************************************************/
/****************************** Private constants ****************************/
/*****************************************************************************/
static const bool Hld_ICanEditHlds[Rol_NUM_ROLES] =
{
/* Users who can edit */
[Rol_INS_ADM] = true,
[Rol_SYS_ADM] = true,
};
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -71,6 +60,8 @@ static struct Hld_Holiday *Hld_EditingHld = NULL; // Static variable to keep the
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static Usr_ICan_t Hld_CheckIfICanEditHlds (void);
static Hld_Order_t Hld_GetParHldOrder (void); static Hld_Order_t Hld_GetParHldOrder (void);
static void Hld_PutIconsSeeHolidays (__attribute__((unused)) void *Args); static void Hld_PutIconsSeeHolidays (__attribute__((unused)) void *Args);
static void Hld_PutIconsEditHolidays (__attribute__((unused)) void *Args); static void Hld_PutIconsEditHolidays (__attribute__((unused)) void *Args);
@ -93,6 +84,22 @@ static void Hld_PutHeadHolidays (void);
static void Hld_EditingHolidayConstructor (void); static void Hld_EditingHolidayConstructor (void);
static void Hld_EditingHolidayDestructor (void); static void Hld_EditingHolidayDestructor (void);
/*****************************************************************************/
/************************ Check if I can edit holidays ***********************/
/*****************************************************************************/
static Usr_ICan_t Hld_CheckIfICanEditHlds (void)
{
static Usr_ICan_t Hld_ICanEditHlds[Rol_NUM_ROLES] =
{
/* Users who can edit */
[Rol_INS_ADM] = Usr_I_CAN,
[Rol_SYS_ADM] = Usr_I_CAN,
};
return Hld_ICanEditHlds[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/ /*****************************************************************************/
/************************* Reset departments context *************************/ /************************* Reset departments context *************************/
/*****************************************************************************/ /*****************************************************************************/
@ -234,9 +241,8 @@ static Hld_Order_t Hld_GetParHldOrder (void)
static void Hld_PutIconsSeeHolidays (__attribute__((unused)) void *Args) static void Hld_PutIconsSeeHolidays (__attribute__((unused)) void *Args)
{ {
/***** Edit holidays *****/ /***** Edit holidays *****/
if (Hld_ICanEditHlds[Gbl.Usrs.Me.Role.Logged]) if (Hld_CheckIfICanEditHlds () == Usr_I_CAN)
Ico_PutContextualIconToEdit (ActEdiHld,NULL, Ico_PutContextualIconToEdit (ActEdiHld,NULL,NULL,NULL);
NULL,NULL);
/***** View calendar *****/ /***** View calendar *****/
Cal_PutIconToSeeCalendar (); Cal_PutIconToSeeCalendar ();
@ -245,8 +251,7 @@ static void Hld_PutIconsSeeHolidays (__attribute__((unused)) void *Args)
static void Hld_PutIconsEditHolidays (__attribute__((unused)) void *Args) static void Hld_PutIconsEditHolidays (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view holidays *****/ /***** Put icon to view holidays *****/
Ico_PutContextualIconToView (ActSeeHld,NULL, Ico_PutContextualIconToView (ActSeeHld,NULL,NULL,NULL);
NULL,NULL);
/***** View calendar *****/ /***** View calendar *****/
Cal_PutIconToSeeCalendar (); Cal_PutIconToSeeCalendar ();
@ -1007,7 +1012,7 @@ static void Hld_PutHeadHolidays (void)
/******************* Receive form to create a new holiday ********************/ /******************* Receive form to create a new holiday ********************/
/*****************************************************************************/ /*****************************************************************************/
void Hld_ReceiveFormNewHoliday (void) void Hld_ReceiveNewHoliday (void)
{ {
extern const char *Txt_Created_new_holiday_X; extern const char *Txt_Created_new_holiday_X;
extern const char *Txt_You_must_specify_the_name; extern const char *Txt_You_must_specify_the_name;

View File

@ -97,6 +97,6 @@ void Hld_ChangeStartDate (void);
void Hld_ChangeEndDate (void); void Hld_ChangeEndDate (void);
void Hld_RenameHoliday (void); void Hld_RenameHoliday (void);
void Hld_ContEditAfterChgHld (void); void Hld_ContEditAfterChgHld (void);
void Hld_ReceiveFormNewHoliday (void); void Hld_ReceiveNewHoliday (void);
#endif #endif

View File

@ -311,7 +311,7 @@ void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,const char *Ancho
"cog.svg",Ico_BLACK); "cog.svg",Ico_BLACK);
} }
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[HidVis_NUM_HIDDEN_VISIBLE], void Ico_PutContextualIconToHideUnhide (Act_Action_t NextAction[HidVis_NUM_HIDDEN_VISIBLE],
const char *Anchor, const char *Anchor,
void (*FuncPars) (void *Args),void *Args, void (*FuncPars) (void *Args),void *Args,
HidVis_HiddenOrVisible_t HiddenOrVisible) HidVis_HiddenOrVisible_t HiddenOrVisible)
@ -322,7 +322,7 @@ void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[HidVis_NUM
Ico_HiddenVisible[HiddenOrVisible].Color); Ico_HiddenVisible[HiddenOrVisible].Color);
} }
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToExpand (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args) void (*FuncPars) (void *Args),void *Args)
{ {
Lay_PutContextualLinkOnlyIcon (NextAction,Anchor, Lay_PutContextualLinkOnlyIcon (NextAction,Anchor,
@ -330,7 +330,7 @@ void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *An
"caret-right.svg",Ico_BLACK); "caret-right.svg",Ico_BLACK);
} }
void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToContract (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args) void (*FuncPars) (void *Args),void *Args)
{ {
Lay_PutContextualLinkOnlyIcon (NextAction,Anchor, Lay_PutContextualLinkOnlyIcon (NextAction,Anchor,

View File

@ -93,13 +93,13 @@ void Ico_PutContextualIconToView (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToConfigure (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToHideUnhide (const Act_Action_t NextAction[HidVis_NUM_HIDDEN_VISIBLE], void Ico_PutContextualIconToHideUnhide (Act_Action_t NextAction[HidVis_NUM_HIDDEN_VISIBLE],
const char *Anchor, const char *Anchor,
void (*FuncPars) (void *Args),void *Args, void (*FuncPars) (void *Args),void *Args,
HidVis_HiddenOrVisible_t HiddenOrVisible); HidVis_HiddenOrVisible_t HiddenOrVisible);
void Ico_PutContextualIconToExpand (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToExpand (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToContract (const Act_Action_t NextAction,const char *Anchor, void Ico_PutContextualIconToContract (Act_Action_t NextAction,const char *Anchor,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);
void Ico_PutContextualIconToPrint (Act_Action_t NextAction, void Ico_PutContextualIconToPrint (Act_Action_t NextAction,
void (*FuncPars) (void *Args),void *Args); void (*FuncPars) (void *Args),void *Args);

View File

@ -100,7 +100,7 @@ static unsigned Ind_GetAndUpdateNumIndicatorsCrs (long CrsCod);
void Ind_ReqIndicatorsCourses (void) void Ind_ReqIndicatorsCourses (void)
{ {
extern const char *Hlp_ANALYTICS_Indicators; extern const char *Hlp_ANALYTICS_Indicators;
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_Scope; extern const char *Txt_Scope;
extern const char *Txt_Types_of_degree; extern const char *Txt_Types_of_degree;
extern const char *Txt_only_if_the_scope_is_X; extern const char *Txt_only_if_the_scope_is_X;

View File

@ -60,7 +60,7 @@ extern struct Globals Gbl;
static const char *Inf_FileNamesForInfoType[Inf_NUM_TYPES] = static const char *Inf_FileNamesForInfoType[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = Cfg_CRS_INFO_INTRODUCTION, [Inf_INFORMATION ] = Cfg_CRS_INFO_INFORMATION,
[Inf_TEACHING_GUIDE] = Cfg_CRS_INFO_TEACHING_GUIDE, [Inf_TEACHING_GUIDE] = Cfg_CRS_INFO_TEACHING_GUIDE,
[Inf_LECTURES ] = Cfg_CRS_INFO_LECTURES, [Inf_LECTURES ] = Cfg_CRS_INFO_LECTURES,
[Inf_PRACTICALS ] = Cfg_CRS_INFO_PRACTICALS, [Inf_PRACTICALS ] = Cfg_CRS_INFO_PRACTICALS,
@ -70,9 +70,9 @@ static const char *Inf_FileNamesForInfoType[Inf_NUM_TYPES] =
[Inf_ASSESSMENT ] = Cfg_CRS_INFO_ASSESSMENT, [Inf_ASSESSMENT ] = Cfg_CRS_INFO_ASSESSMENT,
}; };
static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] = static Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
{ {
[Inf_NONE ][Inf_INTRODUCTION ] = ActUnk, [Inf_NONE ][Inf_INFORMATION ] = ActUnk,
[Inf_NONE ][Inf_TEACHING_GUIDE] = ActUnk, [Inf_NONE ][Inf_TEACHING_GUIDE] = ActUnk,
[Inf_NONE ][Inf_LECTURES ] = ActUnk, [Inf_NONE ][Inf_LECTURES ] = ActUnk,
[Inf_NONE ][Inf_PRACTICALS ] = ActUnk, [Inf_NONE ][Inf_PRACTICALS ] = ActUnk,
@ -81,7 +81,7 @@ static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_NONE ][Inf_LINKS ] = ActUnk, [Inf_NONE ][Inf_LINKS ] = ActUnk,
[Inf_NONE ][Inf_ASSESSMENT ] = ActUnk, [Inf_NONE ][Inf_ASSESSMENT ] = ActUnk,
[Inf_EDITOR ][Inf_INTRODUCTION ] = ActEditorCrsInf, [Inf_EDITOR ][Inf_INFORMATION ] = ActEditorCrsInf,
[Inf_EDITOR ][Inf_TEACHING_GUIDE] = ActEditorTchGui, [Inf_EDITOR ][Inf_TEACHING_GUIDE] = ActEditorTchGui,
[Inf_EDITOR ][Inf_LECTURES ] = ActEditorSyl, [Inf_EDITOR ][Inf_LECTURES ] = ActEditorSyl,
[Inf_EDITOR ][Inf_PRACTICALS ] = ActEditorSyl, [Inf_EDITOR ][Inf_PRACTICALS ] = ActEditorSyl,
@ -90,7 +90,7 @@ static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_EDITOR ][Inf_LINKS ] = ActEditorCrsLnk, [Inf_EDITOR ][Inf_LINKS ] = ActEditorCrsLnk,
[Inf_EDITOR ][Inf_ASSESSMENT ] = ActEditorAss, [Inf_EDITOR ][Inf_ASSESSMENT ] = ActEditorAss,
[Inf_PLAIN_TEXT][Inf_INTRODUCTION ] = ActPlaTxtEdiCrsInf, [Inf_PLAIN_TEXT][Inf_INFORMATION ] = ActPlaTxtEdiCrsInf,
[Inf_PLAIN_TEXT][Inf_TEACHING_GUIDE] = ActPlaTxtEdiTchGui, [Inf_PLAIN_TEXT][Inf_TEACHING_GUIDE] = ActPlaTxtEdiTchGui,
[Inf_PLAIN_TEXT][Inf_LECTURES ] = ActPlaTxtEdiSyl, [Inf_PLAIN_TEXT][Inf_LECTURES ] = ActPlaTxtEdiSyl,
[Inf_PLAIN_TEXT][Inf_PRACTICALS ] = ActPlaTxtEdiSyl, [Inf_PLAIN_TEXT][Inf_PRACTICALS ] = ActPlaTxtEdiSyl,
@ -99,7 +99,7 @@ static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_PLAIN_TEXT][Inf_LINKS ] = ActPlaTxtEdiCrsLnk, [Inf_PLAIN_TEXT][Inf_LINKS ] = ActPlaTxtEdiCrsLnk,
[Inf_PLAIN_TEXT][Inf_ASSESSMENT ] = ActPlaTxtEdiAss, [Inf_PLAIN_TEXT][Inf_ASSESSMENT ] = ActPlaTxtEdiAss,
[Inf_RICH_TEXT ][Inf_INTRODUCTION ] = ActRchTxtEdiCrsInf, [Inf_RICH_TEXT ][Inf_INFORMATION ] = ActRchTxtEdiCrsInf,
[Inf_RICH_TEXT ][Inf_TEACHING_GUIDE] = ActRchTxtEdiTchGui, [Inf_RICH_TEXT ][Inf_TEACHING_GUIDE] = ActRchTxtEdiTchGui,
[Inf_RICH_TEXT ][Inf_LECTURES ] = ActRchTxtEdiSyl, [Inf_RICH_TEXT ][Inf_LECTURES ] = ActRchTxtEdiSyl,
[Inf_RICH_TEXT ][Inf_PRACTICALS ] = ActRchTxtEdiSyl, [Inf_RICH_TEXT ][Inf_PRACTICALS ] = ActRchTxtEdiSyl,
@ -108,7 +108,7 @@ static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_RICH_TEXT ][Inf_LINKS ] = ActRchTxtEdiCrsLnk, [Inf_RICH_TEXT ][Inf_LINKS ] = ActRchTxtEdiCrsLnk,
[Inf_RICH_TEXT ][Inf_ASSESSMENT ] = ActRchTxtEdiAss, [Inf_RICH_TEXT ][Inf_ASSESSMENT ] = ActRchTxtEdiAss,
[Inf_PAGE ][Inf_INTRODUCTION ] = ActRcvPagCrsInf, [Inf_PAGE ][Inf_INFORMATION ] = ActRcvPagCrsInf,
[Inf_PAGE ][Inf_TEACHING_GUIDE] = ActRcvPagTchGui, [Inf_PAGE ][Inf_TEACHING_GUIDE] = ActRcvPagTchGui,
[Inf_PAGE ][Inf_LECTURES ] = ActRcvPagSyl, [Inf_PAGE ][Inf_LECTURES ] = ActRcvPagSyl,
[Inf_PAGE ][Inf_PRACTICALS ] = ActRcvPagSyl, [Inf_PAGE ][Inf_PRACTICALS ] = ActRcvPagSyl,
@ -117,7 +117,7 @@ static const Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_PAGE ][Inf_LINKS ] = ActRcvPagCrsLnk, [Inf_PAGE ][Inf_LINKS ] = ActRcvPagCrsLnk,
[Inf_PAGE ][Inf_ASSESSMENT ] = ActRcvPagAss, [Inf_PAGE ][Inf_ASSESSMENT ] = ActRcvPagAss,
[Inf_URL ][Inf_INTRODUCTION ] = ActRcvURLCrsInf, [Inf_URL ][Inf_INFORMATION ] = ActRcvURLCrsInf,
[Inf_URL ][Inf_TEACHING_GUIDE] = ActRcvURLTchGui, [Inf_URL ][Inf_TEACHING_GUIDE] = ActRcvURLTchGui,
[Inf_URL ][Inf_LECTURES ] = ActRcvURLSyl, [Inf_URL ][Inf_LECTURES ] = ActRcvURLSyl,
[Inf_URL ][Inf_PRACTICALS ] = ActRcvURLSyl, [Inf_URL ][Inf_PRACTICALS ] = ActRcvURLSyl,
@ -191,7 +191,7 @@ void Inf_ShowInfo (void)
bool ShowWarningNoInfo = false; bool ShowWarningNoInfo = false;
const char *Help[Inf_NUM_TYPES] = const char *Help[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = Hlp_COURSE_Information_textual_information, [Inf_INFORMATION ] = Hlp_COURSE_Information_textual_information,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide, [Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus, [Inf_LECTURES ] = Hlp_COURSE_Syllabus,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus, [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus,
@ -265,7 +265,7 @@ void Inf_ShowInfo (void)
case Inf_PRACTICALS: case Inf_PRACTICALS:
ShowWarningNoInfo = !Syl_CheckAndShowSyllabus (&Syllabus); ShowWarningNoInfo = !Syl_CheckAndShowSyllabus (&Syllabus);
break; break;
case Inf_INTRODUCTION: case Inf_INFORMATION:
case Inf_TEACHING_GUIDE: case Inf_TEACHING_GUIDE:
case Inf_BIBLIOGRAPHY: case Inf_BIBLIOGRAPHY:
case Inf_FAQ: case Inf_FAQ:
@ -305,14 +305,9 @@ void Inf_ShowInfo (void)
static void Inf_PutIconToViewInfo (void *Type) static void Inf_PutIconToViewInfo (void *Type)
{ {
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActSeeCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActSeeCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActSeeTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActSeeTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -331,14 +326,9 @@ static void Inf_PutIconToViewInfo (void *Type)
void Inf_PutIconToEditInfo (void *Type) void Inf_PutIconToEditInfo (void *Type)
{ {
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActEdiCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActEdiCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActEdiTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActEdiTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActEdiSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActEdiSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActEdiSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActEdiSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -362,14 +352,9 @@ static void Inf_PutCheckboxForceStdsToReadInfo (bool MustBeRead,bool Disabled)
{ {
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
extern const char *Txt_Force_students_to_read_this_information; extern const char *Txt_Force_students_to_read_this_information;
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActChgFrcReaCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActChgFrcReaCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActChgFrcReaTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActChgFrcReaTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActChgFrcReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActChgFrcReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActChgFrcReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActChgFrcReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -396,14 +381,9 @@ static void Inf_PutCheckboxConfirmIHaveReadInfo (void)
{ {
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
extern const char *Txt_I_have_read_this_information; extern const char *Txt_I_have_read_this_information;
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActChgHavReaCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActChgHavReaCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActChgHavReaTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActChgHavReaTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActChgHavReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActChgHavReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActChgHavReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActChgHavReaSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -472,14 +452,9 @@ void Inf_WriteMsgYouMustReadInfo (void)
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
extern const char *Txt_Required_reading; extern const char *Txt_Required_reading;
extern const char *Txt_You_should_read_the_following_information; extern const char *Txt_You_should_read_the_following_information;
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActSeeCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActSeeCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActSeeTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActSeeTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActSeeSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -840,9 +815,9 @@ void Inf_FormsToSelSendInfo (void)
struct Inf_FromDB FromDB; struct Inf_FromDB FromDB;
Inf_Src_t InfoSrc; Inf_Src_t InfoSrc;
bool InfoAvailable[Inf_NUM_SOURCES]; bool InfoAvailable[Inf_NUM_SOURCES];
static const Act_Action_t Inf_ActionsSelecInfoSrc[Inf_NUM_TYPES] = static Act_Action_t Inf_ActionsSelecInfoSrc[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = ActSelInfSrcCrsInf, [Inf_INFORMATION ] = ActSelInfSrcCrsInf,
[Inf_TEACHING_GUIDE] = ActSelInfSrcTchGui, [Inf_TEACHING_GUIDE] = ActSelInfSrcTchGui,
[Inf_LECTURES ] = ActSelInfSrcSyl, [Inf_LECTURES ] = ActSelInfSrcSyl,
[Inf_PRACTICALS ] = ActSelInfSrcSyl, [Inf_PRACTICALS ] = ActSelInfSrcSyl,
@ -863,7 +838,7 @@ void Inf_FormsToSelSendInfo (void)
}; };
const char *HelpEdit[Inf_NUM_TYPES] = const char *HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit,
@ -1128,7 +1103,7 @@ static void Inf_AsignInfoType (struct Inf_Info *Info,
switch (Act_GetSuperAction (Gbl.Action.Act)) switch (Act_GetSuperAction (Gbl.Action.Act))
{ {
case ActSeeCrsInf: case ActSeeCrsInf:
Info->Type = Inf_INTRODUCTION; Info->Type = Inf_INFORMATION;
break; break;
case ActSeeTchGui: case ActSeeTchGui:
Info->Type = Inf_TEACHING_GUIDE; Info->Type = Inf_TEACHING_GUIDE;
@ -1247,7 +1222,7 @@ void Inf_GetAndCheckInfoSrcFromDB (struct Syl_Syllabus *Syllabus,
if (!Syl_CheckSyllabus (Syllabus,CrsCod)) if (!Syl_CheckSyllabus (Syllabus,CrsCod))
FromDB->Src = Inf_NONE; FromDB->Src = Inf_NONE;
break; break;
case Inf_INTRODUCTION: case Inf_INFORMATION:
case Inf_TEACHING_GUIDE: case Inf_TEACHING_GUIDE:
case Inf_BIBLIOGRAPHY: case Inf_BIBLIOGRAPHY:
case Inf_FAQ: case Inf_FAQ:
@ -1348,9 +1323,15 @@ static bool Inf_CheckAndShowPlainTxt (void)
if (TxtHTML[0]) if (TxtHTML[0])
{ {
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || switch (Gbl.Crs.Info.Type)
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) {
Lay_WriteHeaderClassPhoto (Vie_VIEW); case Inf_INFORMATION:
case Inf_TEACHING_GUIDE:
Lay_WriteHeaderClassPhoto (Vie_VIEW);
break;
default:
break;
}
HTM_DIV_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ()); HTM_DIV_Begin ("class=\"LM DAT_%s\"",The_GetSuffix ());
@ -1413,9 +1394,15 @@ static bool Inf_CheckAndShowRichTxt (void)
if (TxtMD[0]) if (TxtMD[0])
{ {
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || switch (Gbl.Crs.Info.Type)
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) {
Lay_WriteHeaderClassPhoto (Vie_VIEW); case Inf_INFORMATION:
case Inf_TEACHING_GUIDE:
Lay_WriteHeaderClassPhoto (Vie_VIEW);
break;
default:
break;
}
HTM_DIV_Begin ("id=\"crs_info\" class=\"LM CRS_INFO_%s\"", HTM_DIV_Begin ("id=\"crs_info\" class=\"LM CRS_INFO_%s\"",
The_GetSuffix ()); The_GetSuffix ());
@ -1510,14 +1497,9 @@ void Inf_EditPlainTxtInfo (void)
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
struct Syl_Syllabus Syllabus; struct Syl_Syllabus Syllabus;
char TxtHTML[Cns_MAX_BYTES_LONG_TEXT + 1]; char TxtHTML[Cns_MAX_BYTES_LONG_TEXT + 1];
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActRcvPlaTxtCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActRcvPlaTxtCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActRcvPlaTxtTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActRcvPlaTxtTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActRcvPlaTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActRcvPlaTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActRcvPlaTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActRcvPlaTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -1528,7 +1510,7 @@ void Inf_EditPlainTxtInfo (void)
}; };
const char *HelpEdit[Inf_NUM_TYPES] = const char *HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit,
@ -1551,9 +1533,15 @@ void Inf_EditPlainTxtInfo (void)
Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL, Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL,
HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || switch (Gbl.Crs.Info.Type)
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) {
Lay_WriteHeaderClassPhoto (Vie_VIEW); case Inf_INFORMATION:
case Inf_TEACHING_GUIDE:
Lay_WriteHeaderClassPhoto (Vie_VIEW);
break;
default:
break;
}
/***** Get info text from database *****/ /***** Get info text from database *****/
Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[Hie_CRS].HieCod,Gbl.Crs.Info.Type, Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[Hie_CRS].HieCod,Gbl.Crs.Info.Type,
@ -1585,14 +1573,9 @@ void Inf_EditRichTxtInfo (void)
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
struct Syl_Syllabus Syllabus; struct Syl_Syllabus Syllabus;
char TxtHTML[Cns_MAX_BYTES_LONG_TEXT + 1]; char TxtHTML[Cns_MAX_BYTES_LONG_TEXT + 1];
static struct static struct Act_ActionFunc Inf_Actions[Inf_NUM_TYPES] =
{ {
const Act_Action_t NextAction; [Inf_INFORMATION ] = {ActRcvRchTxtCrsInf,NULL,NULL},
void (*FuncPars) (void *Args);
void *Args;
} Inf_Actions[Inf_NUM_TYPES] =
{
[Inf_INTRODUCTION ] = {ActRcvRchTxtCrsInf,NULL,NULL},
[Inf_TEACHING_GUIDE] = {ActRcvRchTxtTchGui,NULL,NULL}, [Inf_TEACHING_GUIDE] = {ActRcvRchTxtTchGui,NULL,NULL},
[Inf_LECTURES ] = {ActRcvRchTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]}, [Inf_LECTURES ] = {ActRcvRchTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_LECTURES ]},
[Inf_PRACTICALS ] = {ActRcvRchTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]}, [Inf_PRACTICALS ] = {ActRcvRchTxtSyl ,Syl_PutParWhichSyllabus,&Syl_WhichSyllabus[Syl_PRACTICALS]},
@ -1603,7 +1586,7 @@ void Inf_EditRichTxtInfo (void)
}; };
const char *HelpEdit[Inf_NUM_TYPES] = const char *HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit,
@ -1626,9 +1609,15 @@ void Inf_EditRichTxtInfo (void)
Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL, Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL,
HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
if (Gbl.Crs.Info.Type == Inf_INTRODUCTION || switch (Gbl.Crs.Info.Type)
Gbl.Crs.Info.Type == Inf_TEACHING_GUIDE) {
Lay_WriteHeaderClassPhoto (Vie_VIEW); case Inf_INFORMATION:
case Inf_TEACHING_GUIDE:
Lay_WriteHeaderClassPhoto (Vie_VIEW);
break;
default:
break;
}
/***** Get info text from database *****/ /***** Get info text from database *****/
Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[Hie_CRS].HieCod,Gbl.Crs.Info.Type, Inf_GetInfoTxtFromDB (Gbl.Hierarchy.Node[Hie_CRS].HieCod,Gbl.Crs.Info.Type,

View File

@ -39,7 +39,7 @@
#define Inf_NUM_TYPES 8 #define Inf_NUM_TYPES 8
typedef enum typedef enum
{ {
Inf_INTRODUCTION = 0, Inf_INFORMATION = 0,
Inf_TEACHING_GUIDE = 1, Inf_TEACHING_GUIDE = 1,
Inf_LECTURES = 2, Inf_LECTURES = 2,
Inf_PRACTICALS = 3, Inf_PRACTICALS = 3,

View File

@ -42,14 +42,14 @@ extern struct Globals Gbl;
static const char *Inf_DB_NamesForInfoType[Inf_NUM_TYPES] = static const char *Inf_DB_NamesForInfoType[Inf_NUM_TYPES] =
{ {
[Inf_INTRODUCTION ] = "intro", // TODO: Change this to "introduction"! [Inf_INFORMATION ] = "intro", // TODO: Change this to "inf"
[Inf_TEACHING_GUIDE] = "description", // TODO: Change this to "guide"! [Inf_TEACHING_GUIDE] = "description", // TODO: Change this to "gui"
[Inf_LECTURES ] = "theory", // TODO: Change this to "lectures"! [Inf_LECTURES ] = "theory", // TODO: Change this to "lec"
[Inf_PRACTICALS ] = "practices", // TODO: Change this to "practicals"! [Inf_PRACTICALS ] = "practices", // TODO: Change this to "pra"
[Inf_BIBLIOGRAPHY ] = "bibliography", [Inf_BIBLIOGRAPHY ] = "bibliography", // TODO: Change this to "bib"
[Inf_FAQ ] = "FAQ", [Inf_FAQ ] = "FAQ", // TODO: Change this to "faq"
[Inf_LINKS ] = "links", [Inf_LINKS ] = "links", // TODO: Change this to "lnk"
[Inf_ASSESSMENT ] = "assessment", [Inf_ASSESSMENT ] = "assessment", // TODO: Change this to "ass"
}; };
static const char *Inf_DB_NamesForInfoSrc[Inf_NUM_SOURCES] = static const char *Inf_DB_NamesForInfoSrc[Inf_NUM_SOURCES] =

View File

@ -89,7 +89,7 @@ static void Ins_GetInstitDataFromRow (MYSQL_RES *mysql_res,
bool GetNumUsrsWhoClaimToBelongToIns); bool GetNumUsrsWhoClaimToBelongToIns);
static void Ins_ListInstitutionsForEdition (void); static void Ins_ListInstitutionsForEdition (void);
static bool Ins_CheckIfICanEdit (struct Hie_Node *Ins); static Usr_ICan_t Ins_CheckIfICanEdit (struct Hie_Node *Ins);
static void Ins_UpdateInsNameDB (long InsCod,const char *FldName,const char *NewName); static void Ins_UpdateInsNameDB (long InsCod,const char *FldName,const char *NewName);
@ -97,7 +97,7 @@ static void Ins_ShowAlertAndButtonToGoToIns (void);
static void Ins_PutFormToCreateInstitution (void); static void Ins_PutFormToCreateInstitution (void);
static void Ins_PutHeadInstitutionsForEdition (void); static void Ins_PutHeadInstitutionsForEdition (void);
static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status); static void Ins_ReceiveRequestOrCreateIns (Hie_Status_t Status);
static void Ins_EditingInstitutionConstructor (); static void Ins_EditingInstitutionConstructor ();
static void Ins_EditingInstitutionDestructor (); static void Ins_EditingInstitutionDestructor ();
@ -331,7 +331,7 @@ static void Ins_ListInstitutions (void)
static void Ins_PutIconsListingInstitutions (__attribute__((unused)) void *Args) static void Ins_PutIconsListingInstitutions (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit institutions *****/ /***** Put icon to edit institutions *****/
if (Hie_CheckIfICanEdit ()) if (Hie_CheckIfICanEdit () == Usr_I_CAN)
Ins_PutIconToEditInstitutions (); Ins_PutIconToEditInstitutions ();
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
@ -344,8 +344,7 @@ static void Ins_PutIconsListingInstitutions (__attribute__((unused)) void *Args)
static void Ins_PutIconToEditInstitutions (void) static void Ins_PutIconToEditInstitutions (void)
{ {
Ico_PutContextualIconToEdit (ActEdiIns,NULL, Ico_PutContextualIconToEdit (ActEdiIns,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -556,8 +555,7 @@ static void Ins_EditInstitutionsInternal (void)
static void Ins_PutIconsEditingInstitutions (__attribute__((unused)) void *Args) static void Ins_PutIconsEditingInstitutions (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view institutions *****/ /***** Put icon to view institutions *****/
Ico_PutContextualIconToView (ActSeeIns,NULL, Ico_PutContextualIconToView (ActSeeIns,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_INSTITS); Fig_PutIconToShowFigure (Fig_INSTITS);
@ -875,7 +873,7 @@ void Ins_WriteSelectorOfInstitution (void)
static void Ins_ListInstitutionsForEdition (void) static void Ins_ListInstitutionsForEdition (void)
{ {
extern const char *Txt_INSTITUTION_STATUS[Hie_NUM_STATUS_TXT]; extern const char *Txt_INSTITUTION_STATUS[Hie_NUM_STATUS_TXT];
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenInsSho, [Nam_SHRT_NAME] = ActRenInsSho,
[Nam_FULL_NAME] = ActRenInsFul, [Nam_FULL_NAME] = ActRenInsFul,
@ -884,7 +882,7 @@ static void Ins_ListInstitutionsForEdition (void)
struct Hie_Node *Ins; struct Hie_Node *Ins;
char WWW[Cns_MAX_BYTES_WWW + 1]; char WWW[Cns_MAX_BYTES_WWW + 1];
struct Usr_Data UsrDat; struct Usr_Data UsrDat;
bool ICanEdit; Usr_ICan_t ICanEdit;
unsigned NumCtrs; unsigned NumCtrs;
unsigned NumUsrsIns; unsigned NumUsrsIns;
unsigned NumUsrsInCrssOfIns; unsigned NumUsrsInCrssOfIns;
@ -920,7 +918,7 @@ static void Ins_ListInstitutionsForEdition (void)
/* Put icon to remove institution */ /* Put icon to remove institution */
HTM_TD_Begin ("class=\"BT\""); HTM_TD_Begin ("class=\"BT\"");
if (!ICanEdit || if (ICanEdit == Usr_I_CAN_NOT ||
NumCtrs || // Institution has centers NumCtrs || // Institution has centers
NumUsrsIns || // Institution has users NumUsrsIns || // Institution has users
NumUsrsInCrssOfIns) // Institution has users NumUsrsInCrssOfIns) // Institution has users
@ -947,11 +945,12 @@ static void Ins_ListInstitutionsForEdition (void)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_OthHie,Ins->HieCod, ParCod_OthHie,Ins->HieCod,
Names, Names,
ICanEdit); // Put form? ICanEdit == Usr_I_CAN ? Frm_PUT_FORM :
Frm_DONT_PUT_FORM);
/* Institution WWW */ /* Institution WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit) if (ICanEdit == Usr_I_CAN)
{ {
Frm_BeginForm (ActChgInsWWW); Frm_BeginForm (ActChgInsWWW);
ParCod_PutPar (ParCod_OthHie,Ins->HieCod); ParCod_PutPar (ParCod_OthHie,Ins->HieCod);
@ -1014,11 +1013,12 @@ static void Ins_ListInstitutionsForEdition (void)
/************ Check if I can edit, remove, etc. an institution ***************/ /************ Check if I can edit, remove, etc. an institution ***************/
/*****************************************************************************/ /*****************************************************************************/
static bool Ins_CheckIfICanEdit (struct Hie_Node *Ins) static Usr_ICan_t Ins_CheckIfICanEdit (struct Hie_Node *Ins)
{ {
return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || // I am a superuser return (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM || // I am a superuser
((Ins->Status & Hie_STATUS_BIT_PENDING) != 0 && // Institution is not yet activated ((Ins->Status & Hie_STATUS_BIT_PENDING) != 0 && // Institution is not yet activated
Gbl.Usrs.Me.UsrDat.UsrCod == Ins->RequesterUsrCod); // I am the requester Gbl.Usrs.Me.UsrDat.UsrCod == Ins->RequesterUsrCod)) ? Usr_I_CAN : // I am the requester
Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1041,12 +1041,14 @@ void Ins_RemoveInstitution (void)
/***** Get data of the institution from database *****/ /***** Get data of the institution from database *****/
Hie_GetDataByCod[Hie_INS] (Ins_EditingIns); Hie_GetDataByCod[Hie_INS] (Ins_EditingIns);
/***** Check if this institution has users *****/ /***** Check if I can edit this institution *****/
if (!Ins_CheckIfICanEdit (Ins_EditingIns)) if (Ins_CheckIfICanEdit (Ins_EditingIns) == Usr_I_CAN_NOT)
Err_NoPermissionExit (); Err_NoPermissionExit ();
else if (Hie_GetNumNodesInHieLvl (Hie_CTR, // Number of centers...
Hie_INS, // ...in institution /***** Check if this institution has centers or users *****/
Ins_EditingIns->HieCod)) if (Hie_GetNumNodesInHieLvl (Hie_CTR, // Number of centers...
Hie_INS, // ...in institution
Ins_EditingIns->HieCod))
// Institution has centers ==> don't remove // Institution has centers ==> don't remove
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_To_remove_an_institution_you_must_first_remove_all_centers_and_users_in_the_institution); Txt_To_remove_an_institution_you_must_first_remove_all_centers_and_users_in_the_institution);
@ -1431,33 +1433,33 @@ static void Ins_PutHeadInstitutionsForEdition (void)
/*************** Receive form to request a new institution *******************/ /*************** Receive form to request a new institution *******************/
/*****************************************************************************/ /*****************************************************************************/
void Ins_ReceiveFormReqIns (void) void Ins_ReceiveReqIns (void)
{ {
/***** Institution constructor *****/ /***** Institution constructor *****/
Ins_EditingInstitutionConstructor (); Ins_EditingInstitutionConstructor ();
/***** Receive form to request a new institution *****/ /***** Receive form to request a new institution *****/
Ins_ReceiveFormRequestOrCreateIns ((Hie_Status_t) Hie_STATUS_BIT_PENDING); Ins_ReceiveRequestOrCreateIns ((Hie_Status_t) Hie_STATUS_BIT_PENDING);
} }
/*****************************************************************************/ /*****************************************************************************/
/***************** Receive form to create a new institution ******************/ /***************** Receive form to create a new institution ******************/
/*****************************************************************************/ /*****************************************************************************/
void Ins_ReceiveFormNewIns (void) void Ins_ReceiveNewIns (void)
{ {
/***** Institution constructor *****/ /***** Institution constructor *****/
Ins_EditingInstitutionConstructor (); Ins_EditingInstitutionConstructor ();
/***** Receive form to create a new institution *****/ /***** Receive form to create a new institution *****/
Ins_ReceiveFormRequestOrCreateIns ((Hie_Status_t) 0); Ins_ReceiveRequestOrCreateIns ((Hie_Status_t) 0);
} }
/*****************************************************************************/ /*****************************************************************************/
/*********** Receive form to request or create a new institution *************/ /*********** Receive form to request or create a new institution *************/
/*****************************************************************************/ /*****************************************************************************/
static void Ins_ReceiveFormRequestOrCreateIns (Hie_Status_t Status) static void Ins_ReceiveRequestOrCreateIns (Hie_Status_t Status)
{ {
extern const char *Txt_Created_new_institution_X; extern const char *Txt_Created_new_institution_X;
char *Names[Nam_NUM_SHRT_FULL_NAMES]; char *Names[Nam_NUM_SHRT_FULL_NAMES];

View File

@ -64,8 +64,8 @@ void Ins_ChangeInsWWW (void);
void Ins_ChangeInsStatus (void); void Ins_ChangeInsStatus (void);
void Ins_ContEditAfterChgIns (void); void Ins_ContEditAfterChgIns (void);
void Ins_ReceiveFormReqIns (void); void Ins_ReceiveReqIns (void);
void Ins_ReceiveFormNewIns (void); void Ins_ReceiveNewIns (void);
unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role); unsigned Ins_GetCachedNumInssWithUsrs (Rol_Role_t Role);

View File

@ -299,7 +299,7 @@ static void InsCfg_Map (void)
static void InsCfg_Country (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm) static void InsCfg_Country (Vie_ViewType_t ViewType,Frm_PutForm_t PutForm)
{ {
extern const char *Par_CodeStr[]; extern const char *Par_CodeStr[Par_NUM_PAR_COD];
extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS]; extern const char *Txt_HIERARCHY_SINGUL_Abc[Hie_NUM_LEVELS];
unsigned NumCty; unsigned NumCty;
const struct Hie_Node *Cty; const struct Hie_Node *Cty;

View File

@ -220,7 +220,7 @@ void Lan_UpdateMyLanguageToCurrentLanguage (void)
Lan_Language_t Lan_GetParLanguage (void) Lan_Language_t Lan_GetParLanguage (void)
{ {
extern const unsigned Txt_Current_CGI_SWAD_Language; extern unsigned Txt_Current_CGI_SWAD_Language;
return (Lan_Language_t) return (Lan_Language_t)
Par_GetParUnsignedLong ("Lan", Par_GetParUnsignedLong ("Lan",

View File

@ -117,7 +117,7 @@ static void Lay_HelpTextEditor (const char *Text,const char *InlineMath,const ch
void Lay_WriteStartOfPage (void) void Lay_WriteStartOfPage (void)
{ {
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
extern const unsigned Txt_Current_CGI_SWAD_Language; extern unsigned Txt_Current_CGI_SWAD_Language;
static const char *LayoutMainZone[Mnu_NUM_MENUS] = static const char *LayoutMainZone[Mnu_NUM_MENUS] =
{ {
[Mnu_MENU_HORIZONTAL] = "main_horizontal", [Mnu_MENU_HORIZONTAL] = "main_horizontal",
@ -655,9 +655,6 @@ static void Lay_WriteScripts (void)
default: default:
break; break;
} }
/***** Script for Google Analytics *****/
HTM_Txt (Cfg_GOOGLE_ANALYTICS);
} }
// Change page title // Change page title
@ -1619,10 +1616,10 @@ void Lay_AdvertisementMobile (void)
/*****************************************************************************/ /*****************************************************************************/
/****************** Indent forum, chat or course tree title ******************/ /****************** Indent forum, chat or course tree title ******************/
/*****************************************************************************/ /*****************************************************************************/
// IsLastItemInLevel[] is a vector with at least 1 + Level elements // IsLastItemInLevel is a vector with at least 1 + Level elements
void Lay_IndentDependingOnLevel (unsigned Level, void Lay_IndentDependingOnLevel (unsigned Level,
Lay_LastItem_t IsLastItemInLevel[], const Lay_LastItem_t *IsLastItemInLevel,
Lay_HorizontalLineAtRight_t HorizontalLineAtRight) Lay_HorizontalLineAtRight_t HorizontalLineAtRight)
{ {
static const char *Icons[Lay_NUM_HORIZONTAL_LINE_AT_RIGHT][Lay_NUM_LAST_ITEM] = static const char *Icons[Lay_NUM_HORIZONTAL_LINE_AT_RIGHT][Lay_NUM_LAST_ITEM] =

View File

@ -94,7 +94,7 @@ void Lay_WriteHeaderClassPhoto (Vie_ViewType_t ViewType);
void Lay_AdvertisementMobile (void); void Lay_AdvertisementMobile (void);
void Lay_IndentDependingOnLevel (unsigned Level, void Lay_IndentDependingOnLevel (unsigned Level,
Lay_LastItem_t IsLastItemInLevel[], const Lay_LastItem_t *IsLastItemInLevel,
Lay_HorizontalLineAtRight_t HorizontalLineAtRight); Lay_HorizontalLineAtRight_t HorizontalLineAtRight);
void Lay_HelpPlainEditor (void); void Lay_HelpPlainEditor (void);

View File

@ -45,16 +45,6 @@
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_parameter_code.h" #include "swad_parameter_code.h"
/*****************************************************************************/
/****************************** Private constants ****************************/
/*****************************************************************************/
static const bool Lnk_ICanEditLinks[Rol_NUM_ROLES] =
{
/* Users who can edit */
[Rol_SYS_ADM] = true,
};
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -81,6 +71,8 @@ static struct Lnk_Link *Lnk_EditingLnk = NULL; // Static variable to keep the li
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static Usr_ICan_t Lnk_CheckIfICanEditLinks (void);
static void Lnk_PutIconsListingLinks (__attribute__((unused)) void *Args); static void Lnk_PutIconsListingLinks (__attribute__((unused)) void *Args);
static void Lnk_PutIconToEditLinks (void); static void Lnk_PutIconToEditLinks (void);
static void Lnk_WriteListOfLinks (const struct Lnk_Links *Links,const char *Class); static void Lnk_WriteListOfLinks (const struct Lnk_Links *Links,const char *Class);
@ -104,6 +96,21 @@ static void Lnk_PutHeadLinks (void);
static void Lnk_EditingLinkConstructor (void); static void Lnk_EditingLinkConstructor (void);
static void Lnk_EditingLinkDestructor (void); static void Lnk_EditingLinkDestructor (void);
/*****************************************************************************/
/************************* Check if I can edit links *************************/
/*****************************************************************************/
static Usr_ICan_t Lnk_CheckIfICanEditLinks (void)
{
static bool Lnk_ICanEditLinks[Rol_NUM_ROLES] =
{
/* Users who can edit */
[Rol_SYS_ADM] = Usr_I_CAN,
};
return Lnk_ICanEditLinks[Gbl.Usrs.Me.Role.Logged];
}
/*****************************************************************************/ /*****************************************************************************/
/****************************** List all links *******************************/ /****************************** List all links *******************************/
/*****************************************************************************/ /*****************************************************************************/
@ -142,7 +149,7 @@ void Lnk_SeeLinks (void)
static void Lnk_PutIconsListingLinks (__attribute__((unused)) void *Args) static void Lnk_PutIconsListingLinks (__attribute__((unused)) void *Args)
{ {
/***** Put icon to edit links *****/ /***** Put icon to edit links *****/
if (Lnk_ICanEditLinks[Gbl.Usrs.Me.Role.Logged]) if (Lnk_CheckIfICanEditLinks () == Usr_I_CAN)
Lnk_PutIconToEditLinks (); Lnk_PutIconToEditLinks ();
/***** Put icon to view banners *****/ /***** Put icon to view banners *****/
@ -155,8 +162,7 @@ static void Lnk_PutIconsListingLinks (__attribute__((unused)) void *Args)
static void Lnk_PutIconToEditLinks (void) static void Lnk_PutIconToEditLinks (void)
{ {
Ico_PutContextualIconToEdit (ActEdiLnk,NULL, Ico_PutContextualIconToEdit (ActEdiLnk,NULL,NULL,NULL);
NULL,NULL);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -269,8 +275,7 @@ static void Lnk_EditLinksInternal (void)
static void Lnk_PutIconsEditingLinks (__attribute__((unused)) void *Args) static void Lnk_PutIconsEditingLinks (__attribute__((unused)) void *Args)
{ {
/***** Put icon to view links *****/ /***** Put icon to view links *****/
Ico_PutContextualIconToView (ActSeeLnk,NULL, Ico_PutContextualIconToView (ActSeeLnk,NULL,NULL,NULL);
NULL,NULL);
/***** Put icon to view banners *****/ /***** Put icon to view banners *****/
Ban_PutIconToViewBanners (); Ban_PutIconToViewBanners ();
@ -395,7 +400,7 @@ static void Lnk_FreeListLinks (struct Lnk_Links *Links)
static void Lnk_ListLinksForEdition (const struct Lnk_Links *Links) static void Lnk_ListLinksForEdition (const struct Lnk_Links *Links)
{ {
static const Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] = static Act_Action_t ActionRename[Nam_NUM_SHRT_FULL_NAMES] =
{ {
[Nam_SHRT_NAME] = ActRenLnkSho, [Nam_SHRT_NAME] = ActRenLnkSho,
[Nam_FULL_NAME] = ActRenLnkFul, [Nam_FULL_NAME] = ActRenLnkFul,
@ -436,7 +441,7 @@ static void Lnk_ListLinksForEdition (const struct Lnk_Links *Links)
Nam_ExistingShortAndFullNames (ActionRename, Nam_ExistingShortAndFullNames (ActionRename,
ParCod_Lnk,Lnk->LnkCod, ParCod_Lnk,Lnk->LnkCod,
Names, Names,
true); // Put form Frm_PUT_FORM);
/* Link WWW */ /* Link WWW */
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
@ -707,7 +712,7 @@ static void Lnk_PutHeadLinks (void)
/******************* Receive form to create a new link ***********************/ /******************* Receive form to create a new link ***********************/
/*****************************************************************************/ /*****************************************************************************/
void Lnk_ReceiveFormNewLink (void) void Lnk_ReceiveNewLink (void)
{ {
extern const char *Txt_You_must_specify_the_web_address; extern const char *Txt_You_must_specify_the_web_address;
extern const char *Txt_Created_new_link_X; extern const char *Txt_Created_new_link_X;

Some files were not shown because too many files have changed in this diff Show More