mirror of https://github.com/acanas/swad-core.git
Version18.110.2
This commit is contained in:
parent
e0404d18d0
commit
6950880886
|
@ -456,12 +456,13 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.110.1 (2019-04-11)"
|
#define Log_PLATFORM_VERSION "SWAD 18.110.2 (2019-04-11)"
|
||||||
#define CSS_FILE "swad18.92.css"
|
#define CSS_FILE "swad18.92.css"
|
||||||
#define JS_FILE "swad18.92.js"
|
#define JS_FILE "swad18.92.js"
|
||||||
/*
|
/*
|
||||||
Comprobar si Gbl.AttEvents.AttCodToEdit puede ser sustituido por Gbl.AttEvents.AttCod
|
Comprobar si Gbl.AttEvents.AttCodToEdit puede ser sustituido por Gbl.AttEvents.AttCod
|
||||||
|
|
||||||
|
Version 18.110.2: Apr 11, 2019 A user can have several roles in the same project. (242527 lines)
|
||||||
Version 18.110.1: Apr 11, 2019 Code refactoring in selection of groups and users. (242553 lines)
|
Version 18.110.1: Apr 11, 2019 Code refactoring in selection of groups and users. (242553 lines)
|
||||||
Version 18.110: Apr 11, 2019 Code refactoring in selection of groups and users.
|
Version 18.110: Apr 11, 2019 Code refactoring in selection of groups and users.
|
||||||
Adding multiple users ad once to a project, suggested by Pedro Villar Castro. (242563 lines)
|
Adding multiple users ad once to a project, suggested by Pedro Villar Castro. (242563 lines)
|
||||||
|
|
|
@ -1386,8 +1386,8 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level);
|
||||||
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level);
|
static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level);
|
||||||
static bool Brw_CheckIfICanModifySharedFileOrFolder (void);
|
static bool Brw_CheckIfICanModifySharedFileOrFolder (void);
|
||||||
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void);
|
static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void);
|
||||||
static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInProject);
|
static bool Brw_CheckIfICanViewProjectDocuments (unsigned MyRolesInProject);
|
||||||
static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInProject);
|
static bool Brw_CheckIfICanViewProjectAssessment (unsigned MyRolesInProject);
|
||||||
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
|
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void);
|
||||||
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
|
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void);
|
||||||
static long Brw_GetPublisherOfSubtree (void);
|
static long Brw_GetPublisherOfSubtree (void);
|
||||||
|
@ -3083,7 +3083,7 @@ static void Brw_ShowFileBrowserProject (void)
|
||||||
{
|
{
|
||||||
extern const char *Hlp_ASSESSMENT_Projects;
|
extern const char *Hlp_ASSESSMENT_Projects;
|
||||||
struct Project Prj;
|
struct Project Prj;
|
||||||
Prj_RoleInProject_t MyRoleInProject;
|
unsigned MyRolesInProject;
|
||||||
|
|
||||||
/***** Allocate memory for the project *****/
|
/***** Allocate memory for the project *****/
|
||||||
Prj_AllocMemProject (&Prj);
|
Prj_AllocMemProject (&Prj);
|
||||||
|
@ -3101,12 +3101,12 @@ static void Brw_ShowFileBrowserProject (void)
|
||||||
Prj_ShowOneUniqueProject (&Prj);
|
Prj_ShowOneUniqueProject (&Prj);
|
||||||
|
|
||||||
/***** Show project file browsers *****/
|
/***** Show project file browsers *****/
|
||||||
MyRoleInProject = Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod);
|
MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod);
|
||||||
if (Prj_CheckIfICanViewProjectFiles (MyRoleInProject))
|
if (Prj_CheckIfICanViewProjectFiles (MyRolesInProject))
|
||||||
{
|
{
|
||||||
Brw_WriteTopBeforeShowingFileBrowser ();
|
Brw_WriteTopBeforeShowingFileBrowser ();
|
||||||
|
|
||||||
if (Brw_CheckIfICanViewProjectDocuments (MyRoleInProject))
|
if (Brw_CheckIfICanViewProjectDocuments (MyRolesInProject))
|
||||||
{
|
{
|
||||||
/***** 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;
|
||||||
|
@ -3114,7 +3114,7 @@ static void Brw_ShowFileBrowserProject (void)
|
||||||
Brw_ShowFileBrowser ();
|
Brw_ShowFileBrowser ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Brw_CheckIfICanViewProjectAssessment (MyRoleInProject))
|
if (Brw_CheckIfICanViewProjectAssessment (MyRolesInProject))
|
||||||
{
|
{
|
||||||
/***** 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;
|
||||||
|
@ -11619,23 +11619,14 @@ static bool Brw_CheckIfICanModifyPrivateFileOrFolder (void)
|
||||||
/******** Check if I have permission to view project documents zone **********/
|
/******** Check if I have permission to view project documents zone **********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInProject)
|
static bool Brw_CheckIfICanViewProjectDocuments (unsigned MyRolesInProject)
|
||||||
{
|
{
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
switch (MyRoleInProject)
|
return (MyRolesInProject != 0); // Am I a member?
|
||||||
{
|
|
||||||
case Prj_ROLE_UNK: // I am not a member
|
|
||||||
return false;
|
|
||||||
case Prj_ROLE_STD:
|
|
||||||
case Prj_ROLE_TUT:
|
|
||||||
case Prj_ROLE_EVL:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -11648,23 +11639,15 @@ static bool Brw_CheckIfICanViewProjectDocuments (Prj_RoleInProject_t MyRoleInPro
|
||||||
/******** Check if I have permission to view project assessment zone *********/
|
/******** Check if I have permission to view project assessment zone *********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInProject)
|
static bool Brw_CheckIfICanViewProjectAssessment (unsigned MyRolesInProject)
|
||||||
{
|
{
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
switch (MyRoleInProject)
|
return ((MyRolesInProject & (1 << Prj_ROLE_TUT | // Tutor...
|
||||||
{
|
1 << Prj_ROLE_EVL)) != 0); // ...or evaluator
|
||||||
case Prj_ROLE_UNK: // I am not a member
|
|
||||||
case Prj_ROLE_STD: // Students can not view or edit project assessment
|
|
||||||
return false;
|
|
||||||
case Prj_ROLE_TUT:
|
|
||||||
case Prj_ROLE_EVL:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -11683,21 +11666,17 @@ static bool Brw_CheckIfICanViewProjectAssessment (Prj_RoleInProject_t MyRoleInPr
|
||||||
|
|
||||||
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
|
static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
|
||||||
{
|
{
|
||||||
|
unsigned MyRolesInProject;
|
||||||
|
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod))
|
MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod);
|
||||||
{
|
if (MyRolesInProject) // I am a member
|
||||||
case Prj_ROLE_UNK: // I am not a member
|
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
|
||||||
return false;
|
return false;
|
||||||
case Prj_ROLE_STD:
|
|
||||||
case Prj_ROLE_TUT:
|
|
||||||
case Prj_ROLE_EVL:
|
|
||||||
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -11716,21 +11695,18 @@ static bool Brw_CheckIfICanModifyPrjDocFileOrFolder (void)
|
||||||
|
|
||||||
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
|
static bool Brw_CheckIfICanModifyPrjAssFileOrFolder (void)
|
||||||
{
|
{
|
||||||
|
unsigned MyRolesInProject;
|
||||||
|
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
switch (Prj_GetMyRoleInProject (Gbl.Prjs.PrjCod))
|
MyRolesInProject = Prj_GetMyRolesInProject (Gbl.Prjs.PrjCod);
|
||||||
{
|
if ((MyRolesInProject & (1 << Prj_ROLE_TUT | // Tutor...
|
||||||
case Prj_ROLE_UNK: // I am not a member
|
1 << Prj_ROLE_EVL))) // ...or evaluator
|
||||||
case Prj_ROLE_STD: // Students can not view or edit project assessment
|
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
|
||||||
return false;
|
return false;
|
||||||
case Prj_ROLE_TUT:
|
|
||||||
case Prj_ROLE_EVL:
|
|
||||||
return (Gbl.Usrs.Me.UsrDat.UsrCod == Brw_GetPublisherOfSubtree ()); // Am I the publisher of subtree?
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -416,7 +416,7 @@ void Gbl_InitializeGlobals (void)
|
||||||
Usr_FlushCacheUsrHasAcceptedInCurrentCrs ();
|
Usr_FlushCacheUsrHasAcceptedInCurrentCrs ();
|
||||||
Usr_FlushCacheUsrSharesAnyOfMyCrs ();
|
Usr_FlushCacheUsrSharesAnyOfMyCrs ();
|
||||||
Rol_FlushCacheRoleUsrInCrs ();
|
Rol_FlushCacheRoleUsrInCrs ();
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
Grp_FlushCacheIBelongToGrp ();
|
Grp_FlushCacheIBelongToGrp ();
|
||||||
Grp_FlushCacheUsrSharesAnyOfMyGrpsInCurrentCrs ();
|
Grp_FlushCacheUsrSharesAnyOfMyGrpsInCurrentCrs ();
|
||||||
Fol_FlushCacheFollow ();
|
Fol_FlushCacheFollow ();
|
||||||
|
|
|
@ -838,8 +838,8 @@ struct Globals
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
long PrjCod;
|
long PrjCod;
|
||||||
Prj_RoleInProject_t RoleInProject;
|
unsigned RolesInProject;
|
||||||
} MyRoleInProject;
|
} MyRolesInProject;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
long UsrCod;
|
long UsrCod;
|
||||||
|
|
|
@ -923,7 +923,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj,
|
||||||
extern const char *Txt_Required_knowledge;
|
extern const char *Txt_Required_knowledge;
|
||||||
extern const char *Txt_Required_materials;
|
extern const char *Txt_Required_materials;
|
||||||
static unsigned UniqueId = 0;
|
static unsigned UniqueId = 0;
|
||||||
bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj_GetMyRoleInProject (Prj->PrjCod));
|
bool ICanViewProjectFiles = Prj_CheckIfICanViewProjectFiles (Prj_GetMyRolesInProject (Prj->PrjCod));
|
||||||
|
|
||||||
/***** Write first row of data of this project *****/
|
/***** Write first row of data of this project *****/
|
||||||
fprintf (Gbl.F.Out,"<tr>");
|
fprintf (Gbl.F.Out,"<tr>");
|
||||||
|
@ -1804,41 +1804,49 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject,
|
||||||
/************************** Get my role in a project *************************/
|
/************************** Get my role in a project *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Prj_FlushCacheMyRoleInProject (void)
|
void Prj_FlushCacheMyRolesInProject (void)
|
||||||
{
|
{
|
||||||
Gbl.Cache.MyRoleInProject.PrjCod = -1L;
|
Gbl.Cache.MyRolesInProject.PrjCod = -1L;
|
||||||
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ROLE_UNK;
|
Gbl.Cache.MyRolesInProject.RolesInProject = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod)
|
unsigned Prj_GetMyRolesInProject (long PrjCod)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
|
unsigned NumRows;
|
||||||
|
unsigned NumRow;
|
||||||
|
Prj_RoleInProject_t RoleInProject;
|
||||||
|
|
||||||
/***** 1. Fast check: trivial cases *****/
|
/***** 1. Fast check: trivial cases *****/
|
||||||
if (Gbl.Usrs.Me.UsrDat.UsrCod <= 0 ||
|
if (Gbl.Usrs.Me.UsrDat.UsrCod <= 0 ||
|
||||||
PrjCod <= 0)
|
PrjCod <= 0)
|
||||||
return Prj_ROLE_UNK;
|
return 0;
|
||||||
|
|
||||||
/***** 2. Fast check: Is my role in project already calculated *****/
|
/***** 2. Fast check: Is my role in project already calculated *****/
|
||||||
if (PrjCod == Gbl.Cache.MyRoleInProject.PrjCod)
|
if (PrjCod == Gbl.Cache.MyRolesInProject.PrjCod)
|
||||||
return Gbl.Cache.MyRoleInProject.RoleInProject;
|
return Gbl.Cache.MyRolesInProject.RolesInProject;
|
||||||
|
|
||||||
/***** 3. Slow check: Get my role in project from database.
|
/***** 3. Slow check: Get my role in project from database.
|
||||||
The result of the query will have one row or none *****/
|
The result of the query will have one row or none *****/
|
||||||
Gbl.Cache.MyRoleInProject.PrjCod = PrjCod;
|
Gbl.Cache.MyRolesInProject.PrjCod = PrjCod;
|
||||||
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ROLE_UNK;
|
Gbl.Cache.MyRolesInProject.RolesInProject = 0;
|
||||||
if (DB_QuerySELECT (&mysql_res,"can not get my role in project",
|
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get my roles in project",
|
||||||
"SELECT RoleInProject FROM prj_usr"
|
"SELECT RoleInProject FROM prj_usr"
|
||||||
" WHERE PrjCod=%ld AND UsrCod=%ld",
|
" WHERE PrjCod=%ld AND UsrCod=%ld",
|
||||||
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod))
|
PrjCod,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
|
for (NumRow = 0;
|
||||||
|
NumRow < NumRows;
|
||||||
|
NumRow++)
|
||||||
{
|
{
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
Gbl.Cache.MyRoleInProject.RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
|
RoleInProject = Prj_ConvertUnsignedStrToRoleInProject (row[0]);
|
||||||
|
if (RoleInProject != Prj_ROLE_UNK)
|
||||||
|
Gbl.Cache.MyRolesInProject.RolesInProject |= (1 << RoleInProject);
|
||||||
}
|
}
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
|
||||||
return Gbl.Cache.MyRoleInProject.RoleInProject;
|
return Gbl.Cache.MyRolesInProject.RolesInProject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1982,7 +1990,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject)
|
||||||
/* Flush cache */
|
/* Flush cache */
|
||||||
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
if (ItsMe)
|
if (ItsMe)
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
|
|
||||||
/* Show success alert */
|
/* Show success alert */
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
|
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
|
||||||
|
@ -2140,7 +2148,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
|
||||||
/***** Flush cache *****/
|
/***** Flush cache *****/
|
||||||
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||||
if (ItsMe)
|
if (ItsMe)
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
|
|
||||||
/***** Show success alert *****/
|
/***** Show success alert *****/
|
||||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z,
|
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z,
|
||||||
|
@ -2224,23 +2232,14 @@ static void Prj_PutFormsToRemEditOnePrj (long PrjCod,Prj_HiddenVisibl_t Hidden,
|
||||||
/******************** Can I view files of a given project? *******************/
|
/******************** Can I view files of a given project? *******************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject)
|
bool Prj_CheckIfICanViewProjectFiles (unsigned MyRolesInProject)
|
||||||
{
|
{
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_STD:
|
case Rol_STD:
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
switch (MyRoleInProject)
|
return (MyRolesInProject != 0); // Am I a member?
|
||||||
{
|
|
||||||
case Prj_ROLE_UNK: // I am not a member
|
|
||||||
return false;
|
|
||||||
case Prj_ROLE_STD:
|
|
||||||
case Prj_ROLE_TUT:
|
|
||||||
case Prj_ROLE_EVL:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -2257,7 +2256,7 @@ static bool Prj_CheckIfICanEditProject (long PrjCod)
|
||||||
switch (Gbl.Usrs.Me.Role.Logged)
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
{
|
{
|
||||||
case Rol_NET:
|
case Rol_NET:
|
||||||
return (Prj_GetMyRoleInProject (PrjCod) == Prj_ROLE_TUT);
|
return ((Prj_GetMyRolesInProject (PrjCod) & (1 << Prj_ROLE_TUT)) != 0); // Am I tutor?
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
return true;
|
return true;
|
||||||
|
@ -2742,7 +2741,7 @@ void Prj_RemoveProject (void)
|
||||||
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod);
|
Prj.PrjCod,Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
|
||||||
/***** Flush cache *****/
|
/***** Flush cache *****/
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
|
|
||||||
/***** Remove project *****/
|
/***** Remove project *****/
|
||||||
DB_QueryDELETE ("can not remove project",
|
DB_QueryDELETE ("can not remove project",
|
||||||
|
@ -3337,7 +3336,7 @@ static void Prj_CreateProject (struct Project *Prj)
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
|
|
||||||
/***** Flush cache *****/
|
/***** Flush cache *****/
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3394,7 +3393,7 @@ void Prj_RemoveCrsProjects (long CrsCod)
|
||||||
CrsCod);
|
CrsCod);
|
||||||
|
|
||||||
/***** Flush cache *****/
|
/***** Flush cache *****/
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
|
|
||||||
/***** Remove projects *****/
|
/***** Remove projects *****/
|
||||||
DB_QueryDELETE ("can not remove all the projects of a course",
|
DB_QueryDELETE ("can not remove all the projects of a course",
|
||||||
|
@ -3418,7 +3417,7 @@ void Prj_RemoveUsrFromProjects (long UsrCod)
|
||||||
/***** Flush cache *****/
|
/***** Flush cache *****/
|
||||||
ItsMe = Usr_ItsMe (UsrCod);
|
ItsMe = Usr_ItsMe (UsrCod);
|
||||||
if (ItsMe)
|
if (ItsMe)
|
||||||
Prj_FlushCacheMyRoleInProject ();
|
Prj_FlushCacheMyRolesInProject ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -151,8 +151,8 @@ void Prj_ShowOneUniqueProject (struct Project *Prj);
|
||||||
|
|
||||||
void Prj_PrintOneProject (void);
|
void Prj_PrintOneProject (void);
|
||||||
|
|
||||||
void Prj_FlushCacheMyRoleInProject (void);
|
void Prj_FlushCacheMyRolesInProject (void);
|
||||||
Prj_RoleInProject_t Prj_GetMyRoleInProject (long PrjCod);
|
Prj_RoleInProject_t Prj_GetMyRolesInProject (long PrjCod);
|
||||||
|
|
||||||
void Prj_ReqAddStds (void);
|
void Prj_ReqAddStds (void);
|
||||||
void Prj_ReqAddTuts (void);
|
void Prj_ReqAddTuts (void);
|
||||||
|
@ -172,7 +172,7 @@ void Prj_RemEvl (void);
|
||||||
|
|
||||||
void Prj_PutHiddenParamPrjOrder (void);
|
void Prj_PutHiddenParamPrjOrder (void);
|
||||||
|
|
||||||
bool Prj_CheckIfICanViewProjectFiles (Prj_RoleInProject_t MyRoleInProject);
|
bool Prj_CheckIfICanViewProjectFiles (unsigned MyRolesInProject);
|
||||||
|
|
||||||
void Prj_RequestCreatePrj (void);
|
void Prj_RequestCreatePrj (void);
|
||||||
void Prj_RequestEditPrj (void);
|
void Prj_RequestEditPrj (void);
|
||||||
|
|
Loading…
Reference in New Issue