Version 23.25: Oct 03, 2023 Code refactoring in user's roles.

This commit is contained in:
acanas 2023-10-03 18:58:52 +02:00
parent 2f5fd84097
commit e286fdde15
6 changed files with 29 additions and 88 deletions

View File

@ -632,10 +632,11 @@ TODO: Francisco Javier Fern
Me sale este error, no si por no recordar yo la sintaxis apropiada para mandar a varios destinatarios. ¿No era así?
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#define Log_PLATFORM_VERSION "SWAD 23.24 (2023-10-03)"
#define Log_PLATFORM_VERSION "SWAD 23.25 (2023-10-03)"
#define CSS_FILE "swad23.16.1.css"
#define JS_FILE "swad22.49.js"
/*
Version 23.25: Oct 03, 2023 Code refactoring in user's roles. (336276 lines)
Version 23.24: Oct 03, 2023 Code refactoring in user's hierarchy. (336276 lines)
Version 23.23.1: Oct 03, 2023 Removed unused code in user's hierarchy. (336349 lines)
Version 23.23: Oct 03, 2023 Code refactoring in user's hierarchy. (336620 lines)

View File

@ -574,7 +574,7 @@ void Crs_WriteSelectorMyCoursesInBreadcrumb (void)
/***** Begin form *****/
Frm_BeginFormGoTo (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num ? ActSeePrg :
ActReqSch);
ActReqSch);
/***** Begin selector of courses *****/
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL,

View File

@ -1537,7 +1537,7 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums,
if (InsCod > 0)
{
MaxRoleInIns = Rol_GetMyMaxRoleInIns (InsCod);
MaxRoleInIns = Rol_GetMyMaxRoleIn (Hie_INS,InsCod);
ICanSeeTeacherForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRoleInIns == Rol_NET ||
MaxRoleInIns == Rol_TCH);
@ -1580,7 +1580,7 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums,
if (CtrCod > 0)
{
MaxRoleInCtr = Rol_GetMyMaxRoleInCtr (CtrCod);
MaxRoleInCtr = Rol_GetMyMaxRoleIn (Hie_CTR,CtrCod);
ICanSeeTeacherForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRoleInCtr == Rol_NET ||
MaxRoleInCtr == Rol_TCH);
@ -1623,7 +1623,7 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums,
if (DegCod > 0)
{
MaxRoleInDeg = Rol_GetMyMaxRoleInDeg (DegCod);
MaxRoleInDeg = Rol_GetMyMaxRoleIn (Hie_DEG,DegCod);
ICanSeeTeacherForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRoleInDeg == Rol_NET ||
MaxRoleInDeg == Rol_TCH);
@ -2662,40 +2662,40 @@ static void For_RestrictAccess (const struct For_Forums *Forums)
(1 << Rol_TCH)));
break;
case For_FORUM_INSTIT_USRS:
MaxRole = Rol_GetMyMaxRoleInIns (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_INS,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole == Rol_STD ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);
break;
case For_FORUM_INSTIT_TCHS:
MaxRole = Rol_GetMyMaxRoleInIns (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_INS,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);
break;
case For_FORUM_CENTER_USRS:
MaxRole = Rol_GetMyMaxRoleInCtr (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_CTR,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole >= Rol_STD ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);
break;
case For_FORUM_CENTER_TCHS:
MaxRole = Rol_GetMyMaxRoleInCtr (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_CTR,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);
break;
case For_FORUM_DEGREE_USRS:
MaxRole = Rol_GetMyMaxRoleInDeg (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_DEG,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole >= Rol_STD ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);
break;
case For_FORUM_DEGREE_TCHS:
MaxRole = Rol_GetMyMaxRoleInDeg (Forums->Forum.HieCod);
MaxRole = Rol_GetMyMaxRoleIn (Hie_DEG,Forums->Forum.HieCod);
ICanSeeForum = (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ||
MaxRole == Rol_NET ||
MaxRole == Rol_TCH);

View File

@ -1048,7 +1048,7 @@ bool Hie_CheckIfIBelongTo (Hie_Level_t Level,long HieCod)
{
unsigned NumMyNode;
/***** Fill the list with the centers I belong to *****/
/***** Fill the list with the nodes I belong to *****/
Hie_GetMyHierarchy (Level);
/***** Check if the node passed as parameter is any of my nodes *****/

View File

@ -247,74 +247,27 @@ Rol_Role_t Rol_GetMaxRoleInCrss (unsigned Roles)
}
/*****************************************************************************/
/******************* Get my maximum role in a institution ********************/
/***** Get my maximum role in a course/degree/center/institution/country *****/
/*****************************************************************************/
Rol_Role_t Rol_GetMyMaxRoleInIns (long InsCod)
Rol_Role_t Rol_GetMyMaxRoleIn (Hie_Level_t Level,long HieCod)
{
unsigned NumMyIns;
if (InsCod > 0)
{
/***** Fill the list with the institutions I belong to (if not already filled) *****/
Hie_GetMyHierarchy (Hie_INS);
/***** Check if the institution passed as parameter is any of my institutions *****/
for (NumMyIns = 0;
NumMyIns < Gbl.Usrs.Me.Hierarchy[Hie_INS].Num;
NumMyIns++)
if (Gbl.Usrs.Me.Hierarchy[Hie_INS].Nodes[NumMyIns].HieCod == InsCod)
return Gbl.Usrs.Me.Hierarchy[Hie_INS].Nodes[NumMyIns].MaxRole;
return Rol_GST;
}
return Rol_UNK; // No degree
}
/*****************************************************************************/
/********************** Get my maximum role in a center **********************/
/*****************************************************************************/
Rol_Role_t Rol_GetMyMaxRoleInCtr (long CtrCod)
{
unsigned NumMyCtr;
if (CtrCod > 0)
{
/***** Fill the list with the centers I belong to (if not already filled) *****/
Hie_GetMyHierarchy (Hie_CTR);
/***** Check if the center passed as parameter is any of my centers *****/
for (NumMyCtr = 0;
NumMyCtr < Gbl.Usrs.Me.Hierarchy[Hie_CTR].Num;
NumMyCtr++)
if (Gbl.Usrs.Me.Hierarchy[Hie_CTR].Nodes[NumMyCtr].HieCod == CtrCod)
return Gbl.Usrs.Me.Hierarchy[Hie_CTR].Nodes[NumMyCtr].MaxRole;
return Rol_GST;
}
return Rol_UNK; // No center
}
/*****************************************************************************/
/********************** Get my maximum role in a degree **********************/
/*****************************************************************************/
Rol_Role_t Rol_GetMyMaxRoleInDeg (long DegCod)
{
unsigned NumMyDeg;
unsigned NumMyNode;
/***** 1. Fast check: trivial cases *****/
if (DegCod <= 0)
if (HieCod <= 0)
return Rol_UNK;
/***** Fill the list with the degrees I belong to (if not already filled) *****/
Hie_GetMyHierarchy (Hie_DEG);
/***** Fill the list with the nodes I belong to (if not already filled) *****/
Hie_GetMyHierarchy (HieCod);
/***** Check if the node passed as parameter is any of my nodes *****/
for (NumMyNode = 0;
NumMyNode < Gbl.Usrs.Me.Hierarchy[Level].Num;
NumMyNode++)
if (Gbl.Usrs.Me.Hierarchy[Level].Nodes[NumMyNode].HieCod == HieCod)
return Gbl.Usrs.Me.Hierarchy[Level].Nodes[NumMyNode].MaxRole;
/***** Check if the degree passed as parameter is any of my degrees *****/
for (NumMyDeg = 0;
NumMyDeg < Gbl.Usrs.Me.Hierarchy[Hie_DEG].Num;
NumMyDeg++)
if (Gbl.Usrs.Me.Hierarchy[Hie_DEG].Nodes[NumMyDeg].HieCod == DegCod)
return Gbl.Usrs.Me.Hierarchy[Hie_DEG].Nodes[NumMyDeg].MaxRole;
return Rol_GST;
}
@ -329,7 +282,6 @@ void Rol_FlushCacheMyRoleInCurrentCrs (void)
Rol_Role_t Rol_GetMyRoleInCrs (long CrsCod)
{
unsigned NumMyCrs;
Rol_Role_t Role;
/***** 1. Fast check: trivial cases *****/
@ -342,18 +294,7 @@ Rol_Role_t Rol_GetMyRoleInCrs (long CrsCod)
return Gbl.Cache.MyRoleInCurrentCrs.Role;
/***** 3. Slow check: get my role from list of my courses *****/
/* Fill the list with the courses I belong to (if not already filled) */
Hie_GetMyHierarchy (Hie_CRS);
/* Check if the current course is any of my courses */
for (NumMyCrs = 0, Role = Rol_UNK;
NumMyCrs < Gbl.Usrs.Me.Hierarchy[Hie_CRS].Num;
NumMyCrs++)
if (Gbl.Usrs.Me.Hierarchy[Hie_CRS].Nodes[NumMyCrs].HieCod == CrsCod)
{
Role = Gbl.Usrs.Me.Hierarchy[Hie_CRS].Nodes[NumMyCrs].MaxRole;
break;
}
Role = Rol_GetMyMaxRoleIn (Hie_CRS,CrsCod);
/* Update my role in current course */
if (CrsCod == Gbl.Hierarchy.Node[Hie_CRS].HieCod)

View File

@ -38,9 +38,8 @@ void Rol_SetMyRoles (void);
unsigned Rol_GetNumAvailableRoles (void);
Rol_Role_t Rol_GetMaxRoleInCrss (unsigned Roles);
Rol_Role_t Rol_GetMyMaxRoleInIns (long InsCod);
Rol_Role_t Rol_GetMyMaxRoleInCtr (long CtrCod);
Rol_Role_t Rol_GetMyMaxRoleInDeg (long DegCod);
Rol_Role_t Rol_GetMyMaxRoleIn (Hie_Level_t Level,long HieCod);
void Rol_FlushCacheMyRoleInCurrentCrs (void);
Rol_Role_t Rol_GetMyRoleInCrs (long CrsCod);
void Rol_FlushCacheRoleUsrInCrs (void);