Version 23.19: Sep 29, 2023 Code refactoring in file browser.

This commit is contained in:
acanas 2023-09-29 14:28:36 +02:00
parent 97f30a63d3
commit a24ac1beaa
5 changed files with 232 additions and 313 deletions

View File

@ -1616,6 +1616,89 @@ static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod)
} }
} }
/*****************************************************************************/
/************ Write start and end dates of a folder of assignment ************/
/*****************************************************************************/
void Asg_WriteDatesAssignment (const struct Asg_Assignment *Asg)
{
extern const char *Txt_unknown_assignment;
static unsigned UniqueId = 0;
char *Id;
/***** Begin table cell *****/
HTM_TD_Begin ("colspan=\"2\" class=\"RM %s_%s %s\"",
Asg->Open ? "ASG_LST_DATE_GREEN" :
"ASG_LST_DATE_RED",
The_GetSuffix (),
The_GetColorRows ());
if (Asg->AsgCod > 0)
{
UniqueId++;
/***** Write start date *****/
if (asprintf (&Id,"asg_start_date_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit ();
HTM_SPAN_Begin ("id=\"%s\"",Id);
Dat_WriteLocalDateHMSFromUTC (Id,Asg->TimeUTC[Dat_STR_TIME],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
true,true,false,0x7);
HTM_SPAN_End ();
free (Id);
/***** Arrow *****/
HTM_Txt ("&rarr;");
/***** Write end date *****/
if (asprintf (&Id,"asg_end_date_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit ();
HTM_SPAN_Begin ("id=\"%s\"",Id);
Dat_WriteLocalDateHMSFromUTC (Id,Asg->TimeUTC[Dat_END_TIME],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
true,false,false,0x7);
HTM_SPAN_End ();
free (Id);
}
else
HTM_TxtF ("&nbsp;(%s)",Txt_unknown_assignment);
/***** End table cell *****/
HTM_TD_End ();
}
/*****************************************************************************/
/* Check if I have permission to create a file or folder into an assignment **/
/*****************************************************************************/
bool Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg)
{
/***** Trivial check 1: assignment is valid *****/
if (Asg->AsgCod <= 0)
return false;
/***** Check 2: Do not create anything in hidden assigments *****/
if (Asg->HiddenOrVisible == HidVis_HIDDEN)
return false;
/***** Check 3: If I do not belong to course / groups of this assignment,
I can not create anything inside this assignment *****/
if (!Asg->IBelongToCrsOrGrps)
return false;
/***** Check 4: Depending on my role in this course... *****/
switch (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD: // Students...
case Rol_NET: // ...and non-editing teachers...
return Asg->Open; // ...can create inside open assignments
case Rol_TCH: // Teachers...
return true; // ...can create inside open or closed assignments
default:
return false;
}
}
/*****************************************************************************/ /*****************************************************************************/
/************************ Get number of assignments **************************/ /************************ Get number of assignments **************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -105,6 +105,9 @@ void Asg_UnhideAssignment (void);
void Asg_ReceiveFormAssignment (void); void Asg_ReceiveFormAssignment (void);
void Asg_RemoveCrsAssignments (long CrsCod); void Asg_RemoveCrsAssignments (long CrsCod);
void Asg_WriteDatesAssignment (const struct Asg_Assignment *Asg);
bool Asg_CheckIfICanCreateIntoAssigment (const struct Asg_Assignment *Asg);
unsigned Asg_GetNumAssignments (Hie_Level_t Level,unsigned *NumNotif); unsigned Asg_GetNumAssignments (Hie_Level_t Level,unsigned *NumNotif);
//-------------------------------- Figures ------------------------------------ //-------------------------------- Figures ------------------------------------

View File

@ -40,6 +40,7 @@
#include "swad_action_list.h" #include "swad_action_list.h"
#include "swad_alert.h" #include "swad_alert.h"
#include "swad_assignment.h"
#include "swad_box.h" #include "swad_box.h"
#include "swad_browser.h" #include "swad_browser.h"
#include "swad_browser_database.h" #include "swad_browser_database.h"
@ -143,6 +144,83 @@ const char *Brw_RootFolderInternalNames[Brw_NUM_TYPES_FILE_BROWSER] =
[Brw_ADMI_ASS_PRJ] = Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_ASSESSMENT, [Brw_ADMI_ASS_PRJ] = Brw_INTERNAL_NAME_ROOT_FOLDER_PROJECT_ASSESSMENT,
}; };
bool Brw_TypeIsCrsBrw[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_DOC_CRS] = true,
[Brw_ADMI_DOC_CRS] = true,
[Brw_ADMI_TCH_CRS] = true,
[Brw_ADMI_SHR_CRS] = true,
[Brw_SHOW_MRK_CRS] = true,
[Brw_ADMI_MRK_CRS] = true,
};
bool Brw_TypeIsGrpBrw[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_DOC_GRP] = true,
[Brw_ADMI_DOC_GRP] = true,
[Brw_ADMI_TCH_GRP] = true,
[Brw_ADMI_SHR_GRP] = true,
[Brw_SHOW_MRK_GRP] = true,
[Brw_ADMI_MRK_GRP] = true,
};
bool Brw_TypeIsSeeDoc[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_DOC_INS] = true,
[Brw_SHOW_DOC_CTR] = true,
[Brw_SHOW_DOC_DEG] = true,
[Brw_SHOW_DOC_CRS] = true,
[Brw_SHOW_DOC_GRP] = true,
};
bool Brw_TypeIsAdmDoc[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_DOC_INS] = true,
[Brw_ADMI_DOC_CTR] = true,
[Brw_ADMI_DOC_DEG] = true,
[Brw_ADMI_DOC_CRS] = true,
[Brw_ADMI_DOC_GRP] = true,
};
bool Brw_TypeIsAdmSha[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_SHR_INS] = true,
[Brw_ADMI_SHR_CTR] = true,
[Brw_ADMI_SHR_DEG] = true,
[Brw_ADMI_SHR_CRS] = true,
[Brw_ADMI_SHR_GRP] = true,
};
bool Brw_TypeIsAdmAsg[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_ASG_USR] = true,
[Brw_ADMI_ASG_CRS] = true,
};
bool Brw_TypeIsAdmUsrAsgWrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_ASG_USR] = true,
[Brw_ADMI_WRK_USR] = true,
};
bool Brw_TypeIsAdmCrsAsgWrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_ASG_CRS] = true,
[Brw_ADMI_WRK_CRS] = true,
};
bool Brw_TypeIsSeeMrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_MRK_CRS] = true,
[Brw_SHOW_MRK_GRP] = true,
};
bool Brw_TypeIsAdmMrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_MRK_CRS] = true,
[Brw_ADMI_MRK_GRP] = true,
};
bool Brw_TypeIsAdmBrf[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_BRF_USR] = true,
};
bool Brw_TypeIsAdmPrj[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_DOC_PRJ] = true,
[Brw_ADMI_ASS_PRJ] = true,
};
/*****************************************************************************/ /*****************************************************************************/
/***************************** Private constants *****************************/ /***************************** Private constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -1053,12 +1131,6 @@ static void Brw_PutCheckboxFullTree (void);
static void Brw_PutParsFullTree (void); static void Brw_PutParsFullTree (void);
static bool Brw_GetFullTreeFromForm (void); static bool Brw_GetFullTreeFromForm (void);
static bool Brw_GetIfGroupFileBrowser (void);
static bool Brw_GetIfProjectFileBrowser (void);
static bool Brw_GetIfBriefcaseFileBrowser (void);
static bool Brw_GetIfUsrAssigWorksFileBrowser (void);
static bool Brw_GetIfCrsAssigWorksFileBrowser (void);
static void Brw_GetAndUpdateDateLastAccFileBrowser (void); static void Brw_GetAndUpdateDateLastAccFileBrowser (void);
static long Brw_GetGrpLastAccZone (const char *FieldNameDB); static long Brw_GetGrpLastAccZone (const char *FieldNameDB);
@ -1108,7 +1180,6 @@ static void Brw_GetFileNameToShowDependingOnLevel (Brw_FileBrowser_t FileBrowser
static void Brw_GetFileNameToShow (Brw_FileType_t FileType, static void Brw_GetFileNameToShow (Brw_FileType_t FileType,
const char FileName[NAME_MAX + 1], const char FileName[NAME_MAX + 1],
char FileNameToShow[NAME_MAX + 1]); char FileNameToShow[NAME_MAX + 1]);
static void Brw_WriteDatesAssignment (void);
static void Brw_WriteFileSizeAndDate (struct Brw_FileMetadata *FileMetadata); static void Brw_WriteFileSizeAndDate (struct Brw_FileMetadata *FileMetadata);
static void Brw_WriteFileOrFolderPublisher (unsigned Level,long UsrCod); static void Brw_WriteFileOrFolderPublisher (unsigned Level,long UsrCod);
static void Brw_AskConfirmRemoveFolderNotEmpty (void); static void Brw_AskConfirmRemoveFolderNotEmpty (void);
@ -1836,10 +1907,10 @@ void Brw_GetParAndInitFileBrowser (void)
Brw_SetFullPathInTree (); Brw_SetFullPathInTree ();
/***** Get other parameters *****/ /***** Get other parameters *****/
if (Brw_GetIfProjectFileBrowser ()) if (Brw_TypeIsAdmPrj[Gbl.FileBrowser.Type])
/* Get project code */ /* Get project code */
Prj_SetPrjCod (ParCod_GetPar (ParCod_Prj)); Prj_SetPrjCod (ParCod_GetPar (ParCod_Prj));
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
{ {
/* Get lists of the selected users if not already got */ /* Get lists of the selected users if not already got */
Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected); Usr_GetListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
@ -2064,13 +2135,13 @@ void Brw_PutImplicitParsFileBrowser (void *FilFolLnk)
void Brw_PutParsFileBrowser (const char *PathInTree,const char *FilFolLnkName, void Brw_PutParsFileBrowser (const char *PathInTree,const char *FilFolLnkName,
Brw_FileType_t FileType,long FilCod) Brw_FileType_t FileType,long FilCod)
{ {
if (Brw_GetIfGroupFileBrowser ()) // This file browser needs specify a group if (Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type]) // This file browser needs specify a group
/***** Group code *****/ /***** Group code *****/
ParCod_PutPar (ParCod_Grp,Gbl.Crs.Grps.GrpCod); ParCod_PutPar (ParCod_Grp,Gbl.Crs.Grps.GrpCod);
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project else if (Brw_TypeIsAdmPrj[Gbl.FileBrowser.Type]) // This file browser needs specify a project
/***** Project code *****/ /***** Project code *****/
ParCod_PutPar (ParCod_Prj,Prj_GetPrjCod ()); ParCod_PutPar (ParCod_Prj,Prj_GetPrjCod ());
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
{ {
/***** Users selected *****/ /***** Users selected *****/
Usr_PutParSelectedUsrsCods (&Gbl.Usrs.Selected); Usr_PutParSelectedUsrsCods (&Gbl.Usrs.Selected);
@ -2145,9 +2216,7 @@ static void Brw_GetParsPathInTreeAndFileName (void)
} }
/***** Get data of assignment *****/ /***** Get data of assignment *****/
if (Gbl.FileBrowser.Level && if (Gbl.FileBrowser.Level && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
(Gbl.FileBrowser.Type == Brw_ADMI_ASG_USR ||
Gbl.FileBrowser.Type == Brw_ADMI_ASG_CRS))
{ {
if (Gbl.FileBrowser.Level == 1) if (Gbl.FileBrowser.Level == 1)
// We are in this case: assignments/assignment-folder // We are in this case: assignments/assignment-folder
@ -2829,18 +2898,6 @@ static void Brw_FormToChangeCrsGrpZone (void)
struct ListCodGrps LstMyGrps; struct ListCodGrps LstMyGrps;
unsigned NumGrp; unsigned NumGrp;
struct GroupData GrpDat; struct GroupData GrpDat;
bool IsCourseZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_DOC_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_TCH_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_SHR_CRS ||
Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_MRK_CRS;
bool IsGroupZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP ||
Gbl.FileBrowser.Type == Brw_ADMI_DOC_GRP ||
Gbl.FileBrowser.Type == Brw_ADMI_TCH_GRP ||
Gbl.FileBrowser.Type == Brw_ADMI_SHR_GRP ||
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP ||
Gbl.FileBrowser.Type == Brw_ADMI_MRK_GRP;
/***** Get list of groups to show *****/ /***** Get list of groups to show *****/
if (Gbl.Crs.Grps.NumGrps) // This course has groups? if (Gbl.Crs.Grps.NumGrps) // This course has groups?
@ -2855,12 +2912,14 @@ static void Brw_FormToChangeCrsGrpZone (void)
HTM_UL_Begin ("class=\"LIST_LEFT\""); HTM_UL_Begin ("class=\"LIST_LEFT\"");
/***** Select the complete course, not a group *****/ /***** Select the complete course, not a group *****/
HTM_LI_Begin ("class=\"%s\"",IsCourseZone ? "BROWSER_TITLE" : HTM_LI_Begin ("class=\"%s\"",
"BROWSER_TITLE_LIGHT"); Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? "BROWSER_TITLE" :
"BROWSER_TITLE_LIGHT");
HTM_LABEL_Begin (NULL); HTM_LABEL_Begin (NULL);
HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK,
"value=\"-1\"%s", "value=\"-1\"%s",
IsCourseZone ? " checked=\"checked\"" : ""); Brw_TypeIsCrsBrw[Gbl.FileBrowser.Type] ? " checked=\"checked\"" :
"");
HTM_Txt (Gbl.Hierarchy.Node[Hie_CRS].FullName); HTM_Txt (Gbl.Hierarchy.Node[Hie_CRS].FullName);
HTM_LABEL_End (); HTM_LABEL_End ();
HTM_LI_End (); HTM_LI_End ();
@ -2878,7 +2937,7 @@ static void Brw_FormToChangeCrsGrpZone (void)
/* Select this group */ /* Select this group */
HTM_LI_Begin ("class=\"%s\"", HTM_LI_Begin ("class=\"%s\"",
(IsGroupZone && (Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type] &&
GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? "BROWSER_TITLE" : GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? "BROWSER_TITLE" :
"BROWSER_TITLE_LIGHT"); "BROWSER_TITLE_LIGHT");
HTM_IMG (Cfg_URL_ICON_PUBLIC, HTM_IMG (Cfg_URL_ICON_PUBLIC,
@ -2890,7 +2949,7 @@ static void Brw_FormToChangeCrsGrpZone (void)
HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK, HTM_INPUT_RADIO (Par_CodeStr[ParCod_Grp],HTM_SUBMIT_ON_CLICK,
"value=\"%ld\"%s", "value=\"%ld\"%s",
GrpDat.GrpCod, GrpDat.GrpCod,
(IsGroupZone && (Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type] &&
GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? " checked=\"checked\"" : GrpDat.GrpCod == Gbl.Crs.Grps.GrpCod) ? " checked=\"checked\"" :
""); "");
HTM_TxtF ("%s&nbsp;%s",GrpDat.GrpTypName,GrpDat.GrpName); HTM_TxtF ("%s&nbsp;%s",GrpDat.GrpTypName,GrpDat.GrpName);
@ -3040,11 +3099,11 @@ static void Brw_ShowFileBrowserOrWorksInternal (__attribute__((unused)) void *Ar
void Brw_ShowAgainFileBrowserOrWorks (void) void Brw_ShowAgainFileBrowserOrWorks (void)
{ {
if (Brw_GetIfUsrAssigWorksFileBrowser ()) if (Brw_TypeIsAdmUsrAsgWrk[Gbl.FileBrowser.Type])
Brw_ShowFileBrowsersAsgWrkUsr (); Brw_ShowFileBrowsersAsgWrkUsr ();
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
Brw_ShowFileBrowsersAsgWrkCrs (); Brw_ShowFileBrowsersAsgWrkCrs ();
else if (Brw_GetIfProjectFileBrowser ()) else if (Brw_TypeIsAdmPrj[Gbl.FileBrowser.Type])
Prj_ShowOneProject (); Prj_ShowOneProject ();
else else
Brw_ShowFileBrowserNormal (); Brw_ShowFileBrowserNormal ();
@ -3363,12 +3422,12 @@ static void Brw_WriteTopBeforeShowingFileBrowser (void)
/***** Contextual menu *****/ /***** Contextual menu *****/
Mnu_ContextMenuBegin (); Mnu_ContextMenuBegin ();
Brw_PutCheckboxFullTree (); // Checkbox to show the full tree Brw_PutCheckboxFullTree (); // Checkbox to show the full tree
if (Brw_GetIfBriefcaseFileBrowser ()) if (Brw_TypeIsAdmBrf[Gbl.FileBrowser.Type])
{ {
if (Gbl.Action.Act != ActReqRemOldBrf) if (Gbl.Action.Act != ActReqRemOldBrf)
Brw_PutLinkToAskRemOldFiles (); // Remove old files Brw_PutLinkToAskRemOldFiles (); // Remove old files
} }
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
{ {
if (!Gbl.FileBrowser.ZIP.CreateZIP) if (!Gbl.FileBrowser.ZIP.CreateZIP)
ZIP_PutLinkToCreateZIPAsgWrk (); // Create a zip file with the... ZIP_PutLinkToCreateZIPAsgWrk (); // Create a zip file with the...
@ -3658,11 +3717,11 @@ static void Brw_PutCheckboxFullTree (void)
static void Brw_PutParsFullTree (void) static void Brw_PutParsFullTree (void)
{ {
if (Brw_GetIfGroupFileBrowser ()) if (Brw_TypeIsGrpBrw[Gbl.FileBrowser.Type])
ParCod_PutPar (ParCod_Grp,Gbl.Crs.Grps.GrpCod); ParCod_PutPar (ParCod_Grp,Gbl.Crs.Grps.GrpCod);
else if (Brw_GetIfProjectFileBrowser ()) // This file browser needs specify a project else if (Brw_TypeIsAdmPrj[Gbl.FileBrowser.Type]) // This file browser needs specify a project
ParCod_PutPar (ParCod_Prj,Prj_GetPrjCod ()); ParCod_PutPar (ParCod_Prj,Prj_GetPrjCod ());
else if (Brw_GetIfCrsAssigWorksFileBrowser ()) else if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
Usr_PutParSelectedUsrsCods (&Gbl.Usrs.Selected); Usr_PutParSelectedUsrsCods (&Gbl.Usrs.Selected);
} }
@ -3686,83 +3745,6 @@ static bool Brw_GetFullTreeFromForm (void)
return Par_GetParBool ("FullTree"); return Par_GetParBool ("FullTree");
} }
/*****************************************************************************/
/********* Get if the current file browser is a group file browser ***********/
/*****************************************************************************/
static bool Brw_GetIfGroupFileBrowser (void)
{
switch (Gbl.FileBrowser.Type)
{
case Brw_SHOW_DOC_GRP:
case Brw_ADMI_DOC_GRP:
case Brw_ADMI_TCH_GRP:
case Brw_ADMI_SHR_GRP:
case Brw_SHOW_MRK_GRP:
case Brw_ADMI_MRK_GRP:
return true;
default:
return false;
}
}
/*****************************************************************************/
/******** Get if the current file browser is a project file browser **********/
/*****************************************************************************/
static bool Brw_GetIfProjectFileBrowser (void)
{
switch (Gbl.FileBrowser.Type)
{
case Brw_ADMI_DOC_PRJ: // Project documents
case Brw_ADMI_ASS_PRJ: // Project assessment
return true;
default:
return false;
}
}
/*****************************************************************************/
/****** Get if the current file browser is course assignments or works *******/
/*****************************************************************************/
static bool Brw_GetIfBriefcaseFileBrowser (void)
{
return (Gbl.FileBrowser.Type == Brw_ADMI_BRF_USR);
}
/*****************************************************************************/
/****** Get if the current file browser is course assignments or works *******/
/*****************************************************************************/
static bool Brw_GetIfUsrAssigWorksFileBrowser (void)
{
switch (Gbl.FileBrowser.Type)
{
case Brw_ADMI_ASG_USR: // My assignments
case Brw_ADMI_WRK_USR: // My works
return true;
default:
return false;
}
}
/*****************************************************************************/
/****** Get if the current file browser is course assignments or works *******/
/*****************************************************************************/
static bool Brw_GetIfCrsAssigWorksFileBrowser (void)
{
switch (Gbl.FileBrowser.Type)
{
case Brw_ADMI_ASG_CRS: // Course assignments
case Brw_ADMI_WRK_CRS: // Course works
return true;
default:
return false;
}
}
/*****************************************************************************/ /*****************************************************************************/
/******** Create a temporary public directory used to download files *********/ /******** Create a temporary public directory used to download files *********/
/*****************************************************************************/ /*****************************************************************************/
@ -4006,45 +3988,6 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
bool TreeContracted, bool TreeContracted,
Brw_IconTree_t IconThisRow) Brw_IconTree_t IconThisRow)
{ {
static bool SeeDoc[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_DOC_INS] = true,
[Brw_SHOW_DOC_CTR] = true,
[Brw_SHOW_DOC_DEG] = true,
[Brw_SHOW_DOC_CRS] = true,
[Brw_SHOW_DOC_GRP] = true,
};
static bool AdmDoc[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_DOC_INS] = true,
[Brw_ADMI_DOC_CTR] = true,
[Brw_ADMI_DOC_DEG] = true,
[Brw_ADMI_DOC_CRS] = true,
[Brw_ADMI_DOC_GRP] = true,
};
static bool AdmSha[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_SHR_INS] = true,
[Brw_ADMI_SHR_CTR] = true,
[Brw_ADMI_SHR_DEG] = true,
[Brw_ADMI_SHR_CRS] = true,
[Brw_ADMI_SHR_GRP] = true,
};
static bool AdmAsg[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_ASG_USR] = true,
[Brw_ADMI_ASG_CRS] = true,
};
static bool SeeMrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_SHOW_MRK_CRS] = true,
[Brw_SHOW_MRK_GRP] = true,
};
static bool AdmMrk[Brw_NUM_TYPES_FILE_BROWSER] =
{
[Brw_ADMI_MRK_CRS] = true,
[Brw_ADMI_MRK_GRP] = true,
};
char *Anchor; char *Anchor;
HidVis_HiddenOrVisible_t HiddenOrVisible = HidVis_VISIBLE; HidVis_HiddenOrVisible_t HiddenOrVisible = HidVis_VISIBLE;
bool RowSetAsPublic = false; bool RowSetAsPublic = false;
@ -4059,21 +4002,21 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Gbl.FileBrowser.Id); Gbl.FileBrowser.Id);
/***** Is this row hidden or visible? *****/ /***** Is this row hidden or visible? *****/
if (SeeDoc[Gbl.FileBrowser.Type] || if (Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] ||
SeeMrk[Gbl.FileBrowser.Type] || Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type] ||
AdmDoc[Gbl.FileBrowser.Type] || Brw_TypeIsAdmDoc[Gbl.FileBrowser.Type] ||
AdmMrk[Gbl.FileBrowser.Type]) Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
{ {
HiddenOrVisible = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type, HiddenOrVisible = Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (Gbl.FileBrowser.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full); Gbl.FileBrowser.FilFolLnk.Full);
if (HiddenOrVisible == HidVis_HIDDEN && if (HiddenOrVisible == HidVis_HIDDEN &&
(SeeDoc[Gbl.FileBrowser.Type] || (Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] ||
SeeMrk[Gbl.FileBrowser.Type]) && Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) &&
Level) // Don't return on level 0 Level) // Don't return on level 0
return false; return false;
if (AdmDoc[Gbl.FileBrowser.Type] || if (Brw_TypeIsAdmDoc[Gbl.FileBrowser.Type] ||
AdmMrk[Gbl.FileBrowser.Type]) Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
{ {
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER)
Gbl.FileBrowser.HiddenLevels[Level] = (HiddenOrVisible == HidVis_HIDDEN); Gbl.FileBrowser.HiddenLevels[Level] = (HiddenOrVisible == HidVis_HIDDEN);
@ -4098,9 +4041,9 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT); Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT);
/***** Is this row public or private? *****/ /***** Is this row public or private? *****/
if (SeeDoc[Gbl.FileBrowser.Type] || if (Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] ||
AdmDoc[Gbl.FileBrowser.Type] || Brw_TypeIsAdmDoc[Gbl.FileBrowser.Type] ||
AdmSha[Gbl.FileBrowser.Type]) Brw_TypeIsAdmSha[Gbl.FileBrowser.Type])
{ {
RowSetAsPublic = (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) ? Brw_DB_GetIfFolderHasPublicFiles (Gbl.FileBrowser.FilFolLnk.Full) : RowSetAsPublic = (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) ? Brw_DB_GetIfFolderHasPublicFiles (Gbl.FileBrowser.FilFolLnk.Full) :
FileMetadata.IsPublic; FileMetadata.IsPublic;
@ -4129,7 +4072,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
"LST_EDIT_REC"); "LST_EDIT_REC");
/***** Get data of assignment using the name of the folder *****/ /***** Get data of assignment using the name of the folder *****/
if (AdmAsg[Gbl.FileBrowser.Type]) if (Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
{ {
if (Level == 1) // Main folder of the assignment if (Level == 1) // Main folder of the assignment
{ {
@ -4218,8 +4161,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Brw_IndentAndWriteIconExpandContract (Level,FileBrowserId,RowId,IconThisRow); Brw_IndentAndWriteIconExpandContract (Level,FileBrowserId,RowId,IconThisRow);
/* Put icon to hide/unhide file or folder */ /* Put icon to hide/unhide file or folder */
if (AdmDoc[Gbl.FileBrowser.Type] || if (Brw_TypeIsAdmDoc[Gbl.FileBrowser.Type] ||
AdmMrk[Gbl.FileBrowser.Type]) Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
Brw_PutIconHideUnhide (Anchor,HiddenOrVisible); Brw_PutIconHideUnhide (Anchor,HiddenOrVisible);
/***** File or folder icon *****/ /***** File or folder icon *****/
@ -4253,12 +4196,12 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
/* End column */ /* End column */
HTM_TD_End (); HTM_TD_End ();
if (AdmMrk[Gbl.FileBrowser.Type]) if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
/***** Header and footer rows *****/ /***** Header and footer rows *****/
Mrk_GetAndWriteNumRowsHeaderAndFooter (); Mrk_GetAndWriteNumRowsHeaderAndFooter ();
else if (AdmAsg[Gbl.FileBrowser.Type] && Level == 1) else if (Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type] && Level == 1)
/***** Start and end dates of assignment *****/ /***** Start and end dates of assignment *****/
Brw_WriteDatesAssignment (); Asg_WriteDatesAssignment (&Gbl.FileBrowser.Asg);
else else
/***** File date and size *****/ /***** File date and size *****/
Brw_WriteFileSizeAndDate (&FileMetadata); Brw_WriteFileSizeAndDate (&FileMetadata);
@ -4268,8 +4211,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
/***** Put icon to download ZIP of folder *****/ /***** Put icon to download ZIP of folder *****/
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher... if (Gbl.Usrs.Me.Role.Logged >= Rol_STD && // Only ZIP folders if I am student, teacher...
!SeeMrk[Gbl.FileBrowser.Type] && // Do not ZIP folders when showing marks !Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type] && // Do not ZIP folders when showing marks
!(SeeDoc[Gbl.FileBrowser.Type] && HiddenOrVisible == HidVis_HIDDEN)) // When seeing docs, if folder is not hidden (this could happen for Level == 0) !(Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] && HiddenOrVisible == HidVis_HIDDEN)) // When seeing docs, if folder is not hidden (this could happen for Level == 0)
Brw_PutButtonToDownloadZIPOfAFolder (); Brw_PutButtonToDownloadZIPOfAFolder ();
HTM_TD_End (); HTM_TD_End ();
} }
@ -4284,8 +4227,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
The_ChangeRowColor (); The_ChangeRowColor ();
if (HiddenOrVisible == HidVis_HIDDEN && if (HiddenOrVisible == HidVis_HIDDEN &&
(SeeDoc[Gbl.FileBrowser.Type] || (Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] ||
SeeMrk[Gbl.FileBrowser.Type])) Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]))
return false; return false;
return true; return true;
} }
@ -4334,8 +4277,7 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
/***** 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 &&
(Gbl.FileBrowser.Type == Brw_ADMI_MRK_CRS || Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_ADMI_MRK_GRP))
return false; return false;
/**** If I can not create elements into this folder... *****/ /**** If I can not create elements into this folder... *****/
@ -4922,9 +4864,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic)
else else
{ {
/***** Write name of the folder *****/ /***** Write name of the folder *****/
if ((Level == 1) && if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
(Gbl.FileBrowser.Type == Brw_ADMI_ASG_USR ||
Gbl.FileBrowser.Type == Brw_ADMI_ASG_CRS))
HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title); HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title);
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
@ -4932,9 +4872,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic)
HTM_STRONG_End (); HTM_STRONG_End ();
HTM_NBSP (); HTM_NBSP ();
if ((Level == 1) && if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
(Gbl.FileBrowser.Type == Brw_ADMI_ASG_USR ||
Gbl.FileBrowser.Type == Brw_ADMI_ASG_CRS))
HTM_SPAN_End (); HTM_SPAN_End ();
} }
@ -4955,9 +4893,8 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic)
Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk);
/* Link to the form and to the file */ /* Link to the form and to the file */
HTM_BUTTON_Submit_Begin ((Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS || HTM_BUTTON_Submit_Begin (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type] ? Txt_Check_marks_in_the_file :
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP) ? Txt_Check_marks_in_the_file : Txt_Download,
Txt_Download,
"class=\"LM BT_LINK FILENAME\""); "class=\"LM BT_LINK FILENAME\"");
HTM_Txt (FileNameToShow); HTM_Txt (FileNameToShow);
HTM_BUTTON_End (); HTM_BUTTON_End ();
@ -5025,57 +4962,6 @@ void Brw_CreateTmpPublicLinkToPrivateFile (const char *FullPathIncludingFile,
Err_ShowErrorAndExit ("Can not create temporary link."); Err_ShowErrorAndExit ("Can not create temporary link.");
} }
/*****************************************************************************/
/************ Write start and end dates of a folder of assignment ************/
/*****************************************************************************/
static void Brw_WriteDatesAssignment (void)
{
extern const char *Txt_unknown_assignment;
static unsigned UniqueId = 0;
char *Id;
/***** Begin table cell *****/
HTM_TD_Begin ("colspan=\"2\" class=\"RM %s_%s %s\"",
Gbl.FileBrowser.Asg.Open ? "ASG_LST_DATE_GREEN" :
"ASG_LST_DATE_RED",
The_GetSuffix (),
The_GetColorRows ());
if (Gbl.FileBrowser.Asg.AsgCod > 0)
{
UniqueId++;
/***** Write start date *****/
if (asprintf (&Id,"asg_start_date_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit ();
HTM_SPAN_Begin ("id=\"%s\"",Id);
Dat_WriteLocalDateHMSFromUTC (Id,Gbl.FileBrowser.Asg.TimeUTC[Dat_STR_TIME],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
true,true,false,0x7);
HTM_SPAN_End ();
free (Id);
/***** Arrow *****/
HTM_Txt ("&rarr;");
/***** Write end date *****/
if (asprintf (&Id,"asg_end_date_%u",UniqueId) < 0)
Err_NotEnoughMemoryExit ();
HTM_SPAN_Begin ("id=\"%s\"",Id);
Dat_WriteLocalDateHMSFromUTC (Id,Gbl.FileBrowser.Asg.TimeUTC[Dat_END_TIME],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_COMMA,
true,false,false,0x7);
HTM_SPAN_End ();
free (Id);
}
else
HTM_TxtF ("&nbsp;(%s)",Txt_unknown_assignment);
/***** End table cell *****/
HTM_TD_End ();
}
/*****************************************************************************/ /*****************************************************************************/
/****************** Write size and date of a file or folder ******************/ /****************** Write size and date of a file or folder ******************/
/*****************************************************************************/ /*****************************************************************************/
@ -5862,13 +5748,13 @@ long Brw_GetCodForFileBrowser (void)
long Brw_GetZoneUsrCodForFileBrowser (void) long Brw_GetZoneUsrCodForFileBrowser (void)
{ {
if (Brw_GetIfBriefcaseFileBrowser ()) // Briefcase if (Brw_TypeIsAdmBrf[Gbl.FileBrowser.Type]) // My briefcase
return Gbl.Usrs.Me.UsrDat.UsrCod; return Gbl.Usrs.Me.UsrDat.UsrCod;
if (Brw_GetIfUsrAssigWorksFileBrowser ()) // My assignments or works if (Brw_TypeIsAdmUsrAsgWrk[Gbl.FileBrowser.Type]) // My assignments or works
return Gbl.Usrs.Me.UsrDat.UsrCod; return Gbl.Usrs.Me.UsrDat.UsrCod;
if (Brw_GetIfCrsAssigWorksFileBrowser ()) // Course assignments or works if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type]) // Course assignments or works
return Gbl.Usrs.Other.UsrDat.UsrCod; return Gbl.Usrs.Other.UsrDat.UsrCod;
return -1L; return -1L;
@ -6245,7 +6131,6 @@ static bool Brw_PasteTreeIntoFolder (struct BrwSiz_BrowserSize *Size,
char PathDstWithFile[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1]; char PathDstWithFile[PATH_MAX + 1 + PATH_MAX + 1 + NAME_MAX + 1];
struct stat FileStatus; struct stat FileStatus;
struct dirent **FileList; struct dirent **FileList;
bool AdminMarks;
struct Mrk_Properties Marks; struct Mrk_Properties Marks;
int NumFile; int NumFile;
int NumFiles; int NumFiles;
@ -6331,9 +6216,7 @@ static bool Brw_PasteTreeIntoFolder (struct BrwSiz_BrowserSize *Size,
else // Destination file does not exist else // Destination file does not exist
{ {
/***** If the target file browser is that of marks, only HTML files are allowed *****/ /***** If the target file browser is that of marks, only HTML files are allowed *****/
AdminMarks = Gbl.FileBrowser.Type == Brw_ADMI_MRK_CRS || if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_ADMI_MRK_GRP;
if (AdminMarks)
{ {
/* Check extension of the file */ /* Check extension of the file */
if (Str_FileIsHTML (FileNameOrg)) if (Str_FileIsHTML (FileNameOrg))
@ -6370,7 +6253,7 @@ static bool Brw_PasteTreeIntoFolder (struct BrwSiz_BrowserSize *Size,
*FirstFilCod = FilCod; *FirstFilCod = FilCod;
/* Add a new entry of marks into database */ /* Add a new entry of marks into database */
if (AdminMarks) if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
Mrk_DB_AddMarks (FilCod,&Marks); Mrk_DB_AddMarks (FilCod,&Marks);
if (FileType == Brw_IS_FILE) if (FileType == Brw_IS_FILE)
@ -7027,7 +6910,6 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
char PathTmp[PATH_MAX + 1 + PATH_MAX + 4 + 1]; char PathTmp[PATH_MAX + 1 + PATH_MAX + 4 + 1];
char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1]; char PathCompleteInTreeIncludingFile[PATH_MAX + 1 + NAME_MAX + 1];
char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1]; char MIMEType[Brw_MAX_BYTES_MIME_TYPE + 1];
bool AdminMarks;
bool FileIsValid = true; bool FileIsValid = true;
long FilCod = -1L; // Code of new file in database long FilCod = -1L; // Code of new file in database
struct Brw_FileMetadata FileMetadata; struct Brw_FileMetadata FileMetadata;
@ -7037,8 +6919,6 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
AdminMarks = Gbl.FileBrowser.Type == Brw_ADMI_MRK_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_MRK_GRP;
/***** 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))
@ -7083,7 +6963,7 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
/* Check if the content of the file of marks is valid */ /* Check if the content of the file of marks is valid */
if (FileIsValid) if (FileIsValid)
if (AdminMarks) if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
if (!Mrk_CheckFileOfMarks (PathTmp,&Marks)) if (!Mrk_CheckFileOfMarks (PathTmp,&Marks))
FileIsValid = false; FileIsValid = false;
@ -7147,7 +7027,7 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
Brw_GetFileMetadataByCod (&FileMetadata); Brw_GetFileMetadataByCod (&FileMetadata);
/* Add a new entry of marks into database */ /* Add a new entry of marks into database */
if (AdminMarks) if (Brw_TypeIsAdmMrk[Gbl.FileBrowser.Type])
Mrk_DB_AddMarks (FileMetadata.FilCod,&Marks); Mrk_DB_AddMarks (FileMetadata.FilCod,&Marks);
/* Notify new file */ /* Notify new file */
@ -7616,8 +7496,7 @@ void Brw_ShowFileMetadata (void)
FileHasPublisher = false; // Get user's data from database FileHasPublisher = false; // Get user's data from database
/***** Get link to download the file *****/ /***** Get link to download the file *****/
if (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS || if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP)
URL[0] = '\0'; URL[0] = '\0';
else else
Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path, Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path,
@ -8080,8 +7959,7 @@ void Brw_DownloadFile (void)
Brw_GetAndUpdateFileViews (&FileMetadata); Brw_GetAndUpdateFileViews (&FileMetadata);
/***** Get link to download the file *****/ /***** Get link to download the file *****/
if (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS || if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP)
URL[0] = '\0'; URL[0] = '\0';
else else
Brw_GetLinkToDownloadFile (Gbl.FileBrowser.FilFolLnk.Path, Brw_GetLinkToDownloadFile (Gbl.FileBrowser.FilFolLnk.Path,
@ -8248,8 +8126,7 @@ static void Brw_WriteBigLinkToDownloadFile (const char *URL,
const char *Title; const char *Title;
/***** On the screen a link will be shown to download the file *****/ /***** On the screen a link will be shown to download the file *****/
if (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS || if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP)
{ {
/* Form to see marks */ /* Form to see marks */
Frm_BeginForm (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ? ActSeeMyMrkCrs : Frm_BeginForm (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ? ActSeeMyMrkCrs :
@ -8315,8 +8192,7 @@ static void Brw_WriteSmallLinkToDownloadFile (const char *URL,
extern const char *Txt_Check_marks_in_the_file; extern const char *Txt_Check_marks_in_the_file;
/***** On the screen a link will be shown to download the file *****/ /***** On the screen a link will be shown to download the file *****/
if (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS || if (Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type])
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP)
{ {
/* Form to see marks */ /* Form to see marks */
Frm_BeginForm (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ? ActSeeMyMrkCrs : Frm_BeginForm (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ? ActSeeMyMrkCrs :
@ -8987,30 +8863,11 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
return Brw_CheckIfICanModifySharedFileOrFolder (); return Brw_CheckIfICanModifySharedFileOrFolder ();
case Brw_ADMI_ASG_USR: case Brw_ADMI_ASG_USR:
case Brw_ADMI_ASG_CRS: case Brw_ADMI_ASG_CRS:
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return true; // Folder can be removed or renamed
if (Gbl.FileBrowser.Asg.HiddenOrVisible == HidVis_HIDDEN)
return false; // Do not edit anything in hidden assigments
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 false; // Do not remove / rename main folder of assigment
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg);
return false; // I can not edit this assignment
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD: // Students...
case Rol_NET: // ...and non-editing teachers...
return Gbl.FileBrowser.Asg.Open; // ...can edit inside open assignments
case Rol_TCH: // Teachers...
return true; // ...can edit inside open or closed assignments
default:
break;
}
return false;
case Brw_ADMI_DOC_PRJ: case Brw_ADMI_DOC_PRJ:
return Brw_CheckIfICanModifyPrjDocFileOrFolder (); return Brw_CheckIfICanModifyPrjDocFileOrFolder ();
case Brw_ADMI_ASS_PRJ: case Brw_ADMI_ASS_PRJ:
@ -9073,27 +8930,7 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
if (Level == 0) // If root folder if (Level == 0) // If root folder
return false; // Folders of assigments (level 1) return false; // Folders of assigments (level 1)
// can only be created automatically // can only be created automatically
return Asg_CheckIfICanCreateIntoAssigment (&Gbl.FileBrowser.Asg);
if (Gbl.FileBrowser.Asg.AsgCod <= 0) // If folder does not correspond to any assignment
return false; // Do not create anything out of assignments
if (Gbl.FileBrowser.Asg.HiddenOrVisible == HidVis_HIDDEN)
return false; // Do not create anything in hidden assigments
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment
return false; // I can not create anything inside this assignment
switch (Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs)
{
case Rol_STD: // Students...
case Rol_NET: // ...and non-editing teachers...
return Gbl.FileBrowser.Asg.Open; // ...can create inside open assignments
case Rol_TCH: // Teachers...
return true; // ...can create inside open or closed assignments
default:
break;
}
return false;
default: default:
return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type); return Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type);
} }
@ -9851,7 +9688,7 @@ void Brw_RemoveOldFilesBriefcase (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_GetIfCrsAssigWorksFileBrowser ()) if (Brw_TypeIsAdmCrsAsgWrk[Gbl.FileBrowser.Type])
{ {
/***** Get parameter with number of months without access *****/ /***** Get parameter with number of months without access *****/
Months = (unsigned) Months = (unsigned)

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í? 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') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.18 (2023-09-29)" #define Log_PLATFORM_VERSION "SWAD 23.19 (2023-09-29)"
#define CSS_FILE "swad23.16.1.css" #define CSS_FILE "swad23.16.1.css"
#define JS_FILE "swad22.49.js" #define JS_FILE "swad22.49.js"
/* /*
Version 23.19: Sep 29, 2023 Code refactoring in file browser. (336600 lines)
Version 23.18: Sep 29, 2023 Code refactoring in file browser. (336670 lines) Version 23.18: Sep 29, 2023 Code refactoring in file browser. (336670 lines)
Version 23.17.5: Sep 28, 2023 Code refactoring in scopes. (336638 lines) Version 23.17.5: Sep 28, 2023 Code refactoring in scopes. (336638 lines)
Version 23.17.4: Sep 26, 2023 Code refactoring in hierarchy. (336661 lines) Version 23.17.4: Sep 26, 2023 Code refactoring in hierarchy. (336661 lines)

View File

@ -435,6 +435,8 @@ static void ZIP_CompressFolderIntoZIP (void)
static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,const char *PathInTree) static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,const char *PathInTree)
{ {
extern bool Brw_TypeIsSeeDoc[Brw_NUM_TYPES_FILE_BROWSER];
extern bool Brw_TypeIsSeeMrk[Brw_NUM_TYPES_FILE_BROWSER];
struct dirent **FileList; struct dirent **FileList;
int NumFile; int NumFile;
int NumFiles; int NumFiles;
@ -444,13 +446,6 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c
struct stat FileStatus; struct stat FileStatus;
Brw_FileType_t FileType; Brw_FileType_t FileType;
HidVis_HiddenOrVisible_t HiddenOrVisible; HidVis_HiddenOrVisible_t HiddenOrVisible;
bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_SHOW_DOC_INS ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_CTR ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_DEG ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_CRS ||
Gbl.FileBrowser.Type == Brw_SHOW_DOC_GRP;
bool SeeMarks = Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ||
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP;
unsigned long long FullSize = 0; unsigned long long FullSize = 0;
/***** Scan directory *****/ /***** Scan directory *****/
@ -479,9 +474,9 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c
FileType = Str_FileIs (FileList[NumFile]->d_name,"url") ? Brw_IS_LINK : // It's a link (URL inside a .url file) FileType = Str_FileIs (FileList[NumFile]->d_name,"url") ? Brw_IS_LINK : // It's a link (URL inside a .url file)
Brw_IS_FILE; // It's a file Brw_IS_FILE; // It's a file
HiddenOrVisible = (SeeDocsZone || HiddenOrVisible = (Brw_TypeIsSeeDoc[Gbl.FileBrowser.Type] ||
SeeMarks) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType, Brw_TypeIsSeeMrk[Gbl.FileBrowser.Type]) ? Brw_CheckIfFileOrFolderIsSetAsHiddenInDB (FileType,
PathFileInTree) : PathFileInTree) :
HidVis_VISIBLE; HidVis_VISIBLE;
if (HiddenOrVisible == HidVis_VISIBLE) // If file/folder is visible if (HiddenOrVisible == HidVis_VISIBLE) // If file/folder is visible