mirror of https://github.com/acanas/swad-core.git
Version 22.59: Nov 06, 2022 New module swad_browser_size.
This commit is contained in:
parent
46cab63cba
commit
0f6686f7a1
4
Makefile
4
Makefile
|
@ -33,8 +33,8 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_action_list.o \
|
||||||
swad_assignment_database.o swad_assignment_resource.o swad_attendance.o \
|
swad_assignment_database.o swad_assignment_resource.o swad_attendance.o \
|
||||||
swad_attendance_database.o swad_attendance_resource.o swad_autolink.o \
|
swad_attendance_database.o swad_attendance_resource.o swad_autolink.o \
|
||||||
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \
|
||||||
swad_browser_database.o swad_browser_resource.o swad_building.o \
|
swad_browser_database.o swad_browser_resource.o swad_browser_size.o \
|
||||||
swad_building_database.o swad_button.o \
|
swad_building.o swad_building_database.o swad_button.o \
|
||||||
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_resource.o \
|
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_resource.o \
|
||||||
swad_call_for_exam_database.o swad_center.o swad_center_config.o \
|
swad_call_for_exam_database.o swad_center.o swad_center_config.o \
|
||||||
swad_center_database.o swad_chat.o swad_chat_database.o swad_config.o \
|
swad_center_database.o swad_chat.o swad_chat_database.o swad_config.o \
|
||||||
|
|
758
swad_browser.c
758
swad_browser.c
File diff suppressed because it is too large
Load Diff
|
@ -147,23 +147,13 @@ struct Brw_FileMetadata
|
||||||
unsigned NumLoggedUsrs;
|
unsigned NumLoggedUsrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Brw_SizeOfFileZones
|
|
||||||
{
|
|
||||||
int NumCrss; // -1 stands for not aplicable
|
|
||||||
int NumGrps; // -1 stands for not aplicable
|
|
||||||
int NumUsrs; // -1 stands for not aplicable
|
|
||||||
unsigned MaxLevels;
|
|
||||||
unsigned long NumFolders;
|
|
||||||
unsigned long NumFiles;
|
|
||||||
unsigned long long int Size; // Total size in bytes
|
|
||||||
};
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Brw_MAX_DIR_LEVELS 10 // Maximum number of subdirectory levels in file browsers
|
#define BrwSiz_MAX_DIR_LEVELS 10 // Maximum number of subdirectory levels in file browsers
|
||||||
#define Brw_MAX_ROW_ID ((1 + Brw_MAX_DIR_LEVELS) * (10 + 1))
|
|
||||||
|
#define Brw_MAX_ROW_ID ((1 + BrwSiz_MAX_DIR_LEVELS) * (10 + 1))
|
||||||
|
|
||||||
#define Brw_MAX_BYTES_MIME_TYPE (128 - 1) // 127: maximum size in bytes of "image/jpeg", "text/html", etc.
|
#define Brw_MAX_BYTES_MIME_TYPE (128 - 1) // 127: maximum size in bytes of "image/jpeg", "text/html", etc.
|
||||||
|
|
||||||
|
@ -248,15 +238,13 @@ void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
|
||||||
long *CrsCod,
|
long *CrsCod,
|
||||||
long *GrpCod);
|
long *GrpCod);
|
||||||
|
|
||||||
bool Prj_CheckIfICanViewProjectFiles (long PrjCod);
|
bool Brw_CheckIfFileBrowserIsEditable (Brw_FileBrowser_t FileBrowser);
|
||||||
|
|
||||||
long Brw_GetCodForFileBrowser (void);
|
long Brw_GetCodForFileBrowser (void);
|
||||||
long Brw_GetZoneUsrCodForFileBrowser (void);
|
long Brw_GetZoneUsrCodForFileBrowser (void);
|
||||||
|
|
||||||
void Brw_DB_RemoveExpiredExpandedFolders (void);
|
void Brw_DB_RemoveExpiredExpandedFolders (void);
|
||||||
|
|
||||||
void Brw_CalcSizeOfDir (char *Path);
|
|
||||||
|
|
||||||
void Brw_SetFullPathInTree (void);
|
void Brw_SetFullPathInTree (void);
|
||||||
|
|
||||||
void Brw_PutIconFile (const char *FileName,
|
void Brw_PutIconFile (const char *FileName,
|
||||||
|
|
|
@ -2845,12 +2845,11 @@ void Brw_DB_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
|
||||||
/*********************** Store size of a file zone ***************************/
|
/*********************** Store size of a file zone ***************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Brw_DB_StoreSizeOfFileZone (void)
|
void Brw_DB_StoreSizeOfFileBrowser (const struct BrwSiz_BrowserSize *Size)
|
||||||
{
|
{
|
||||||
long Cod = Brw_GetCodForFileBrowser ();
|
long Cod = Brw_GetCodForFileBrowser ();
|
||||||
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
|
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
|
||||||
|
|
||||||
/***** Update size of the file browser in database *****/
|
|
||||||
DB_QueryREPLACE ("can not store the size of a file zone",
|
DB_QueryREPLACE ("can not store the size of a file zone",
|
||||||
"REPLACE INTO brw_sizes"
|
"REPLACE INTO brw_sizes"
|
||||||
" (FileBrowser,Cod,ZoneUsrCod,"
|
" (FileBrowser,Cod,ZoneUsrCod,"
|
||||||
|
@ -2860,10 +2859,10 @@ void Brw_DB_StoreSizeOfFileZone (void)
|
||||||
"%u,'%lu','%lu','%llu')",
|
"%u,'%lu','%lu','%llu')",
|
||||||
(unsigned) Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type],
|
(unsigned) Brw_DB_FileBrowserForDB_files[Gbl.FileBrowser.Type],
|
||||||
Cod,ZoneUsrCod,
|
Cod,ZoneUsrCod,
|
||||||
Gbl.FileBrowser.Size.NumLevls,
|
Size->NumLevls,
|
||||||
Gbl.FileBrowser.Size.NumFolds,
|
Size->NumFolds,
|
||||||
Gbl.FileBrowser.Size.NumFiles,
|
Size->NumFiles,
|
||||||
Gbl.FileBrowser.Size.TotalSiz);
|
Size->TotalSiz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <mysql/mysql.h> // To access MySQL databases
|
#include <mysql/mysql.h> // To access MySQL databases
|
||||||
|
|
||||||
#include "swad_browser.h"
|
#include "swad_browser.h"
|
||||||
|
#include "swad_browser_size.h"
|
||||||
#include "swad_search.h"
|
#include "swad_search.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -121,7 +122,7 @@ void Brw_DB_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,
|
||||||
long MyUsrCod,long WorksUsrCod);
|
long MyUsrCod,long WorksUsrCod);
|
||||||
|
|
||||||
//-------------------------- Size of file zones -------------------------------
|
//-------------------------- Size of file zones -------------------------------
|
||||||
void Brw_DB_StoreSizeOfFileZone (void);
|
void Brw_DB_StoreSizeOfFileBrowser (const struct BrwSiz_BrowserSize *Size);
|
||||||
void Brw_DB_GetSizeOfFileBrowser (MYSQL_RES **mysql_res,
|
void Brw_DB_GetSizeOfFileBrowser (MYSQL_RES **mysql_res,
|
||||||
Brw_FileBrowser_t FileBrowser);
|
Brw_FileBrowser_t FileBrowser);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,487 @@
|
||||||
|
// swad_browser_size.c: file browser size
|
||||||
|
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2022 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*********************************** Headers *********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include <dirent.h> // For scandir, etc.
|
||||||
|
#include <string.h> // For string functions
|
||||||
|
#include <sys/stat.h> // For lstat
|
||||||
|
|
||||||
|
#include "swad_alert.h"
|
||||||
|
#include "swad_browser_database.h"
|
||||||
|
#include "swad_browser_size.h"
|
||||||
|
#include "swad_database.h"
|
||||||
|
#include "swad_error.h"
|
||||||
|
#include "swad_global.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**************************** Private constants ******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/* All quotas must be multiple of 1 GiB (Gibibyte)*/
|
||||||
|
#define BrwSiz_GiB (1024ULL * 1024ULL * 1024ULL)
|
||||||
|
|
||||||
|
/* Maximum quotas for each type of file browser */
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOCUM_INS (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOCUM_INS 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOCUM_INS 1000
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOCUM_CTR (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOCUM_CTR 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOCUM_CTR 1000
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOCUM_DEG (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOCUM_DEG 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOCUM_DEG 1000
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOCUM_CRS (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOCUM_CRS 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOCUM_CRS 1000
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOCUM_GRP ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOCUM_GRP 1000
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOCUM_GRP 500
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_TEACH_CRS BrwSiz_MAX_QUOTA_DOCUM_CRS
|
||||||
|
#define BrwSiz_MAX_FILES_TEACH_CRS BrwSiz_MAX_FILES_DOCUM_CRS
|
||||||
|
#define BrwSiz_MAX_FOLDS_TEACH_CRS BrwSiz_MAX_FOLDS_DOCUM_CRS
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_TEACH_GRP BrwSiz_MAX_QUOTA_DOCUM_GRP
|
||||||
|
#define BrwSiz_MAX_FILES_TEACH_GRP BrwSiz_MAX_FILES_DOCUM_GRP
|
||||||
|
#define BrwSiz_MAX_FOLDS_TEACH_GRP BrwSiz_MAX_FOLDS_DOCUM_GRP
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_SHARE_INS (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_SHARE_INS 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_SHARE_INS 1000 // Many, because every student can create his own directories
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_SHARE_CTR (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_SHARE_CTR 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_SHARE_CTR 1000 // Many, because every student can create his own directories
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_SHARE_DEG (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_SHARE_DEG 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_SHARE_DEG 1000 // Many, because every student can create his own directories
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_SHARE_CRS (64ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_SHARE_CRS 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_SHARE_CRS 1000 // Many, because every student can create his own directories
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_SHARE_GRP ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_SHARE_GRP 1000
|
||||||
|
#define BrwSiz_MAX_FOLDS_SHARE_GRP 500 // Many, because every student can create his own directories
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_ASSIG_PER_STD ( 2ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_ASSIG_PER_STD 500
|
||||||
|
#define BrwSiz_MAX_FOLDS_ASSIG_PER_STD 50
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_WORKS_PER_STD ( 2ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_WORKS_PER_STD 500
|
||||||
|
#define BrwSiz_MAX_FOLDS_WORKS_PER_STD 50
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_DOC_PRJ ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_DOC_PRJ 500
|
||||||
|
#define BrwSiz_MAX_FOLDS_DOC_PRJ 50
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_ASS_PRJ ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_ASS_PRJ 200
|
||||||
|
#define BrwSiz_MAX_FOLDS_ASS_PRJ 20
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_MARKS_CRS ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_MARKS_CRS 500
|
||||||
|
#define BrwSiz_MAX_FOLDS_MARKS_CRS 50
|
||||||
|
|
||||||
|
#define BrwSiz_MAX_QUOTA_MARKS_GRP ( 1ULL*BrwSiz_GiB)
|
||||||
|
#define BrwSiz_MAX_FILES_MARKS_GRP 200
|
||||||
|
#define BrwSiz_MAX_FOLDS_MARKS_GRP 20
|
||||||
|
|
||||||
|
static const unsigned long long BrwSiz_MAX_QUOTA_BRIEF[Rol_NUM_ROLES] = // MaxRole is used
|
||||||
|
{
|
||||||
|
[Rol_STD] = 32ULL*BrwSiz_GiB,
|
||||||
|
[Rol_NET] = 32ULL*BrwSiz_GiB,
|
||||||
|
[Rol_TCH] = 64ULL*BrwSiz_GiB,
|
||||||
|
};
|
||||||
|
#define BrwSiz_MAX_FILES_BRIEF 5000
|
||||||
|
#define BrwSiz_MAX_FOLDS_BRIEF 1000
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************** External global variables from others modules ****************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
extern struct Globals Gbl;
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************* Private global variables **************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
struct BrwSiz_BrowserSize Brw_Size;
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Private prototypes ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void BrwSiz_CalcSizeOfDirRecursive (struct BrwSiz_BrowserSize *Size,
|
||||||
|
unsigned Level,char *Path);
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Get pointer to browser size struct ********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
struct BrwSiz_BrowserSize *BrwSiz_GetSize (void)
|
||||||
|
{
|
||||||
|
return &Brw_Size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*** Initialize maximum quota of current file browser and check if exceded ***/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_SetAndCheckQuota (struct BrwSiz_BrowserSize *Size)
|
||||||
|
{
|
||||||
|
extern const char *Txt_Quota_exceeded;
|
||||||
|
|
||||||
|
/***** Check the quota *****/
|
||||||
|
BrwSiz_SetMaxQuota (Size);
|
||||||
|
BrwSiz_CalcSizeOfDir (Size,Gbl.FileBrowser.Priv.PathRootFolder);
|
||||||
|
if (BrwSiz_CheckIfQuotaExceded (Size))
|
||||||
|
Ale_ShowAlert (Ale_WARNING,Txt_Quota_exceeded);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************ Initialize maximum quota of current file browser ***************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_SetMaxQuota (struct BrwSiz_BrowserSize *Size)
|
||||||
|
{
|
||||||
|
switch (Gbl.FileBrowser.Type)
|
||||||
|
{
|
||||||
|
case Brw_SHOW_DOC_INS:
|
||||||
|
case Brw_ADMI_DOC_INS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOCUM_INS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOCUM_INS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOCUM_INS;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_SHR_INS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_SHARE_INS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_SHARE_INS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_SHARE_INS;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_DOC_CTR:
|
||||||
|
case Brw_ADMI_DOC_CTR:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOCUM_CTR;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOCUM_CTR;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOCUM_CTR;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_SHR_CTR:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_SHARE_CTR;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_SHARE_CTR;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_SHARE_CTR;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_DOC_DEG:
|
||||||
|
case Brw_ADMI_DOC_DEG:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOCUM_DEG;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOCUM_DEG;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOCUM_DEG;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_SHR_DEG:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_SHARE_DEG;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_SHARE_DEG;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_SHARE_DEG;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_DOC_CRS:
|
||||||
|
case Brw_ADMI_DOC_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOCUM_CRS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOCUM_CRS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOCUM_CRS;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_DOC_GRP:
|
||||||
|
case Brw_ADMI_DOC_GRP:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOCUM_GRP;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOCUM_GRP;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOCUM_GRP;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_TCH_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_TEACH_CRS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_TEACH_CRS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_TEACH_CRS;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_TCH_GRP:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_TEACH_GRP;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_TEACH_GRP;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_TEACH_GRP;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_SHR_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_SHARE_CRS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_SHARE_CRS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_SHARE_CRS;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_SHR_GRP:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_SHARE_GRP;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_SHARE_GRP;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_SHARE_GRP;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_ASG_USR:
|
||||||
|
case Brw_ADMI_ASG_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_ASSIG_PER_STD;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_ASSIG_PER_STD;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_ASSIG_PER_STD;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_WRK_USR:
|
||||||
|
case Brw_ADMI_WRK_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_WORKS_PER_STD;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_WORKS_PER_STD;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_WORKS_PER_STD;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_DOC_PRJ:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_DOC_PRJ;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_DOC_PRJ;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_DOC_PRJ;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_ASS_PRJ:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_ASS_PRJ;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_ASS_PRJ;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_ASS_PRJ;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_MRK_CRS:
|
||||||
|
case Brw_ADMI_MRK_CRS:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_MARKS_CRS;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_MARKS_CRS;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_MARKS_CRS;
|
||||||
|
break;
|
||||||
|
case Brw_SHOW_MRK_GRP:
|
||||||
|
case Brw_ADMI_MRK_GRP:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_MARKS_GRP;
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_MARKS_GRP;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_MARKS_GRP;
|
||||||
|
break;
|
||||||
|
case Brw_ADMI_BRF_USR:
|
||||||
|
Size->MaxQuota = BrwSiz_MAX_QUOTA_BRIEF[Gbl.Usrs.Me.Role.Max];
|
||||||
|
Size->MaxFiles = BrwSiz_MAX_FILES_BRIEF;
|
||||||
|
Size->MaxFolds = BrwSiz_MAX_FOLDS_BRIEF;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************** Check if quota has been exceeded *********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool BrwSiz_CheckIfQuotaExceded (const struct BrwSiz_BrowserSize *Size)
|
||||||
|
{
|
||||||
|
return (Size->NumLevls > BrwSiz_MAX_DIR_LEVELS ||
|
||||||
|
Size->NumFolds > Size->MaxFolds ||
|
||||||
|
Size->NumFiles > Size->MaxFiles ||
|
||||||
|
Size->TotalSiz > Size->MaxQuota);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Reset the size of a file browser **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_ResetFileBrowserSize (struct BrwSiz_BrowserSize *Size)
|
||||||
|
{
|
||||||
|
Size->NumLevls = 0;
|
||||||
|
Size->NumFolds =
|
||||||
|
Size->NumFiles = 0L;
|
||||||
|
Size->TotalSiz = 0ULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************** Compute the size of a directory **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_CalcSizeOfDir (struct BrwSiz_BrowserSize *Size,char *Path)
|
||||||
|
{
|
||||||
|
BrwSiz_ResetFileBrowserSize (Size);
|
||||||
|
BrwSiz_CalcSizeOfDirRecursive (Size,1,Path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**************** Compute the size of a directory recursively ****************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void BrwSiz_CalcSizeOfDirRecursive (struct BrwSiz_BrowserSize *Size,
|
||||||
|
unsigned Level,char *Path)
|
||||||
|
{
|
||||||
|
struct dirent **FileList;
|
||||||
|
int NumFile;
|
||||||
|
int NumFiles;
|
||||||
|
char PathFileRel[PATH_MAX + 1];
|
||||||
|
struct stat FileStatus;
|
||||||
|
|
||||||
|
/***** Scan the directory *****/
|
||||||
|
if ((NumFiles = scandir (Path,&FileList,NULL,NULL)) >= 0) // No error
|
||||||
|
{
|
||||||
|
/***** Compute recursively the total number and size of the files and folders *****/
|
||||||
|
for (NumFile = 0;
|
||||||
|
NumFile < NumFiles;
|
||||||
|
NumFile++)
|
||||||
|
{
|
||||||
|
if (strcmp (FileList[NumFile]->d_name,".") &&
|
||||||
|
strcmp (FileList[NumFile]->d_name,"..")) // Skip directories "." and ".."
|
||||||
|
{
|
||||||
|
/* There are files in this directory ==> update level */
|
||||||
|
if (Level > Size->NumLevls)
|
||||||
|
Size->NumLevls++;
|
||||||
|
|
||||||
|
/* Update counters depending on whether it's a directory or a regular file */
|
||||||
|
snprintf (PathFileRel,sizeof (PathFileRel),"%s/%s",
|
||||||
|
Path,FileList[NumFile]->d_name);
|
||||||
|
if (lstat (PathFileRel,&FileStatus)) // On success ==> 0 is returned
|
||||||
|
Err_ShowErrorAndExit ("Can not get information about a file or folder.");
|
||||||
|
else if (S_ISDIR (FileStatus.st_mode)) // It's a directory
|
||||||
|
{
|
||||||
|
Size->NumFolds++;
|
||||||
|
Size->TotalSiz += (unsigned long long) FileStatus.st_size;
|
||||||
|
BrwSiz_CalcSizeOfDirRecursive (Size,Level + 1,PathFileRel);
|
||||||
|
}
|
||||||
|
else if (S_ISREG (FileStatus.st_mode)) // It's a regular file
|
||||||
|
{
|
||||||
|
Size->NumFiles++;
|
||||||
|
Size->TotalSiz += (unsigned long long) FileStatus.st_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free (FileList[NumFile]);
|
||||||
|
}
|
||||||
|
free (FileList);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Err_ShowErrorAndExit ("Error while scanning directory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**************** Get the size of a file zone from database ******************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_GetSizeOfFileZone (Brw_FileBrowser_t FileBrowser,
|
||||||
|
struct BrwSiz_SizeOfFileZone *SizeOfFileZone)
|
||||||
|
{
|
||||||
|
MYSQL_RES *mysql_res;
|
||||||
|
MYSQL_ROW row;
|
||||||
|
|
||||||
|
/***** Get the size of a file browser *****/
|
||||||
|
/* Query database */
|
||||||
|
Brw_DB_GetSizeOfFileBrowser (&mysql_res,FileBrowser);
|
||||||
|
|
||||||
|
/* Get row */
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
|
/* Reset default values to zero */
|
||||||
|
SizeOfFileZone->NumCrss =
|
||||||
|
SizeOfFileZone->NumUsrs = 0;
|
||||||
|
SizeOfFileZone->MaxLevels = 0;
|
||||||
|
SizeOfFileZone->NumFolders =
|
||||||
|
SizeOfFileZone->NumFiles = 0;
|
||||||
|
SizeOfFileZone->Size = 0;
|
||||||
|
|
||||||
|
/* Get number of courses (row[0]) */
|
||||||
|
if (row[0])
|
||||||
|
if (sscanf (row[0],"%d",&(SizeOfFileZone->NumCrss)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting number of courses.");
|
||||||
|
|
||||||
|
/* Get number of groups (row[1]) */
|
||||||
|
if (row[1])
|
||||||
|
if (sscanf (row[1],"%d",&(SizeOfFileZone->NumGrps)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting number of groups.");
|
||||||
|
|
||||||
|
/* Get number of users (row[2]) */
|
||||||
|
if (row[2])
|
||||||
|
if (sscanf (row[2],"%d",&(SizeOfFileZone->NumUsrs)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting number of users.");
|
||||||
|
|
||||||
|
/* Get maximum number of levels (row[3]) */
|
||||||
|
if (row[3])
|
||||||
|
if (sscanf (row[3],"%u",&(SizeOfFileZone->MaxLevels)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting maximum number of levels.");
|
||||||
|
|
||||||
|
/* Get number of folders (row[4]) */
|
||||||
|
if (row[4])
|
||||||
|
if (sscanf (row[4],"%lu",&(SizeOfFileZone->NumFolders)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting number of folders.");
|
||||||
|
|
||||||
|
/* Get number of files (row[5]) */
|
||||||
|
if (row[5])
|
||||||
|
if (sscanf (row[5],"%lu",&(SizeOfFileZone->NumFiles)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting number of files.");
|
||||||
|
|
||||||
|
/* Get total size (row[6]) */
|
||||||
|
if (row[6])
|
||||||
|
if (sscanf (row[6],"%llu",&(SizeOfFileZone->Size)) != 1)
|
||||||
|
Err_ShowErrorAndExit ("Error when getting toal size.");
|
||||||
|
|
||||||
|
/* Free structure that stores the query result */
|
||||||
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************* Show size of a file browser ***********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void BrwSiz_ShowAndStoreSizeOfFileBrowser (const struct BrwSiz_BrowserSize *Size)
|
||||||
|
{
|
||||||
|
extern const char *Txt_level;
|
||||||
|
extern const char *Txt_levels;
|
||||||
|
extern const char *Txt_folder;
|
||||||
|
extern const char *Txt_folders;
|
||||||
|
extern const char *Txt_file;
|
||||||
|
extern const char *Txt_files;
|
||||||
|
extern const char *Txt_of_PART_OF_A_TOTAL;
|
||||||
|
char FileSizeStr[Fil_MAX_BYTES_FILE_SIZE_STRING + 1];
|
||||||
|
|
||||||
|
HTM_DIV_Begin ("class=\"CM DAT_%s\"",The_GetSuffix ());
|
||||||
|
|
||||||
|
if (Brw_CheckIfFileBrowserIsEditable (Gbl.FileBrowser.Type))
|
||||||
|
{
|
||||||
|
Fil_WriteFileSizeFull ((double) Size->TotalSiz,FileSizeStr);
|
||||||
|
HTM_TxtF ("%u %s; %lu %s; %lu %s; %s",
|
||||||
|
Size->NumLevls,
|
||||||
|
Size->NumLevls == 1 ? Txt_level :
|
||||||
|
Txt_levels ,
|
||||||
|
Size->NumFolds,
|
||||||
|
Size->NumFolds == 1 ? Txt_folder :
|
||||||
|
Txt_folders,
|
||||||
|
Size->NumFiles,
|
||||||
|
Size->NumFiles == 1 ? Txt_file :
|
||||||
|
Txt_files,
|
||||||
|
FileSizeStr);
|
||||||
|
|
||||||
|
if (Size->MaxQuota)
|
||||||
|
{
|
||||||
|
Fil_WriteFileSizeBrief ((double) Size->MaxQuota,FileSizeStr);
|
||||||
|
HTM_TxtF (" (%.1f%% %s %s)",
|
||||||
|
100.0 * ((double) Size->TotalSiz /
|
||||||
|
(double) Size->MaxQuota),
|
||||||
|
Txt_of_PART_OF_A_TOTAL,
|
||||||
|
FileSizeStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
Brw_DB_StoreSizeOfFileBrowser (Size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
HTM_NBSP (); // Blank to occupy the same space as the text for the browser size
|
||||||
|
|
||||||
|
HTM_DIV_End ();
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
// swad_browser_size.h: file browser size
|
||||||
|
|
||||||
|
#ifndef _SWAD_BRW_SIZ
|
||||||
|
#define _SWAD_BRW_SIZ
|
||||||
|
/*
|
||||||
|
SWAD (Shared Workspace At a Distance in Spanish),
|
||||||
|
is a web platform developed at the University of Granada (Spain),
|
||||||
|
and used to support university teaching.
|
||||||
|
|
||||||
|
This file is part of SWAD core.
|
||||||
|
Copyright (C) 1999-2022 Antonio Cañas Vargas
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************************* Headers ***********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
#include "swad_browser.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************************* Public types ********************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
struct BrwSiz_SizeOfFileZone
|
||||||
|
{
|
||||||
|
int NumCrss; // -1 stands for not aplicable
|
||||||
|
int NumGrps; // -1 stands for not aplicable
|
||||||
|
int NumUsrs; // -1 stands for not aplicable
|
||||||
|
unsigned MaxLevels;
|
||||||
|
unsigned long NumFolders;
|
||||||
|
unsigned long NumFiles;
|
||||||
|
unsigned long long int Size; // Total size in bytes
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BrwSiz_BrowserSize
|
||||||
|
{
|
||||||
|
unsigned long MaxFiles;
|
||||||
|
unsigned long MaxFolds;
|
||||||
|
unsigned long long int MaxQuota;
|
||||||
|
unsigned NumLevls;
|
||||||
|
unsigned long NumFolds;
|
||||||
|
unsigned long NumFiles;
|
||||||
|
unsigned long long int TotalSiz;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public prototypes *****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
struct BrwSiz_BrowserSize *BrwSiz_GetSize (void);
|
||||||
|
|
||||||
|
void BrwSiz_SetAndCheckQuota (struct BrwSiz_BrowserSize *Size);
|
||||||
|
void BrwSiz_SetMaxQuota (struct BrwSiz_BrowserSize *Size);
|
||||||
|
|
||||||
|
bool BrwSiz_CheckIfQuotaExceded (const struct BrwSiz_BrowserSize *Size);
|
||||||
|
|
||||||
|
void BrwSiz_ResetFileBrowserSize (struct BrwSiz_BrowserSize *Size);
|
||||||
|
void BrwSiz_CalcSizeOfDir (struct BrwSiz_BrowserSize *Size,char *Path);
|
||||||
|
|
||||||
|
void BrwSiz_GetSizeOfFileZone (Brw_FileBrowser_t FileBrowser,
|
||||||
|
struct BrwSiz_SizeOfFileZone *SizeOfFileZone);
|
||||||
|
|
||||||
|
void BrwSiz_ShowAndStoreSizeOfFileBrowser (const struct BrwSiz_BrowserSize *Size);
|
||||||
|
|
||||||
|
#endif
|
|
@ -615,6 +615,7 @@ Que al subir un fichero por defecto est
|
||||||
Al subir cosas para los grupos, en documentos, resltar más los grupos porque no son conscientes...
|
Al subir cosas para los grupos, en documentos, resltar más los grupos porque no son conscientes...
|
||||||
Exportar listas en CSV.
|
Exportar listas en CSV.
|
||||||
|
|
||||||
|
Version 22.59: Nov 06, 2022 New module swad_browser_size. (334067 lines)
|
||||||
Version 22.58: Nov 06, 2022 New module swad_action_list for list of actions. (333958 lines)
|
Version 22.58: Nov 06, 2022 New module swad_action_list for list of actions. (333958 lines)
|
||||||
Version 22.57.1: Oct 29, 2022 Change in layout of heading title. (333789 lines)
|
Version 22.57.1: Oct 29, 2022 Change in layout of heading title. (333789 lines)
|
||||||
Version 22.57: Oct 29, 2022 Code refactoring in search. (333762 lines)
|
Version 22.57: Oct 29, 2022 Code refactoring in search. (333762 lines)
|
||||||
|
|
|
@ -257,16 +257,6 @@ struct Globals
|
||||||
bool FullTree; // Show full tree?
|
bool FullTree; // Show full tree?
|
||||||
bool ShowOnlyPublicFiles; // Show only public files?
|
bool ShowOnlyPublicFiles; // Show only public files?
|
||||||
bool UploadingWithDropzone;
|
bool UploadingWithDropzone;
|
||||||
struct
|
|
||||||
{
|
|
||||||
unsigned long MaxFiles;
|
|
||||||
unsigned long MaxFolds;
|
|
||||||
unsigned long long int MaxQuota;
|
|
||||||
unsigned NumLevls;
|
|
||||||
unsigned long NumFolds;
|
|
||||||
unsigned long NumFiles;
|
|
||||||
unsigned long long int TotalSiz;
|
|
||||||
} Size;
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
char PathAboveRootFolder[PATH_MAX + 1];
|
char PathAboveRootFolder[PATH_MAX + 1];
|
||||||
|
@ -291,7 +281,7 @@ struct Globals
|
||||||
char L[2 + 1]; // Left directory: 2 first chars
|
char L[2 + 1]; // Left directory: 2 first chars
|
||||||
char R[NAME_MAX + 1]; // Right directory: rest of chars
|
char R[NAME_MAX + 1]; // Right directory: rest of chars
|
||||||
} TmpPubDir;
|
} TmpPubDir;
|
||||||
bool HiddenLevels[1 + Brw_MAX_DIR_LEVELS];
|
bool HiddenLevels[1 + BrwSiz_MAX_DIR_LEVELS];
|
||||||
char TxtStyle[64];
|
char TxtStyle[64];
|
||||||
const char *InputStyle;
|
const char *InputStyle;
|
||||||
struct Asg_Assignment Asg; // Data of assignment when browsing level 1 or an assignment zone.
|
struct Asg_Assignment Asg; // Data of assignment when browsing level 1 or an assignment zone.
|
||||||
|
|
|
@ -177,6 +177,8 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects);
|
||||||
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects);
|
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects);
|
||||||
static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects);
|
static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects);
|
||||||
|
|
||||||
|
static bool Prj_CheckIfICanViewProjectFiles (long PrjCod);
|
||||||
|
|
||||||
static void Prj_PutCurrentParams (void *Projects);
|
static void Prj_PutCurrentParams (void *Projects);
|
||||||
static void Prj_PutHiddenParamAssign (unsigned Assign);
|
static void Prj_PutHiddenParamAssign (unsigned Assign);
|
||||||
static void Prj_PutHiddenParamHidden (unsigned Hidden);
|
static void Prj_PutHiddenParamHidden (unsigned Hidden);
|
||||||
|
@ -841,6 +843,66 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
|
||||||
HTM_DIV_End ();
|
HTM_DIV_End ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************** Can I view files of a given project? *******************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static bool Prj_CheckIfICanViewProjectFiles (long PrjCod)
|
||||||
|
{
|
||||||
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
|
{
|
||||||
|
case Rol_STD:
|
||||||
|
case Rol_NET:
|
||||||
|
return (Prj_GetMyRolesInProject (PrjCod) != 0); // Am I a member?
|
||||||
|
case Rol_TCH: // Editing teachers in a course can access to all files
|
||||||
|
case Rol_SYS_ADM:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******** Check if I have permission to view project documents zone **********/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool Prj_CheckIfICanViewProjectDocuments (long PrjCod)
|
||||||
|
{
|
||||||
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
|
{
|
||||||
|
case Rol_STD:
|
||||||
|
case Rol_NET:
|
||||||
|
return (Prj_GetMyRolesInProject (PrjCod) != 0); // Am I a member?
|
||||||
|
case Rol_TCH: // Editing teachers in a course can access to all files
|
||||||
|
case Rol_SYS_ADM:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******** Check if I have permission to view project assessment zone *********/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool Prj_CheckIfICanViewProjectAssessment (long PrjCod)
|
||||||
|
{
|
||||||
|
switch (Gbl.Usrs.Me.Role.Logged)
|
||||||
|
{
|
||||||
|
case Rol_STD:
|
||||||
|
case Rol_NET:
|
||||||
|
return ((Prj_GetMyRolesInProject (PrjCod) & (1 << Prj_ROLE_TUT | // Tutor...
|
||||||
|
1 << Prj_ROLE_EVL)) != 0); // ...or evaluator
|
||||||
|
case Rol_TCH: // Editing teachers in a course can access to all files
|
||||||
|
case Rol_SYS_ADM:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********************** Put parameters used in projects **********************/
|
/********************** Put parameters used in projects **********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -213,6 +213,9 @@ void Prj_SeeProjects (void);
|
||||||
void Prj_ShowProjects (struct Prj_Projects *Projects);
|
void Prj_ShowProjects (struct Prj_Projects *Projects);
|
||||||
void Prj_ShowTableSelectedPrjs (void);
|
void Prj_ShowTableSelectedPrjs (void);
|
||||||
|
|
||||||
|
bool Prj_CheckIfICanViewProjectDocuments (long PrjCod);
|
||||||
|
bool Prj_CheckIfICanViewProjectAssessment (long PrjCod);
|
||||||
|
|
||||||
void Prj_PutParams (struct Prj_Filter *Filter,
|
void Prj_PutParams (struct Prj_Filter *Filter,
|
||||||
Prj_Order_t Order,
|
Prj_Order_t Order,
|
||||||
unsigned NumPage,
|
unsigned NumPage,
|
||||||
|
|
|
@ -41,6 +41,10 @@
|
||||||
/************** External global variables from others modules ****************/
|
/************** External global variables from others modules ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/************************** Public global variables **************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************* Private global variables **************************/
|
/************************* Private global variables **************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue