From 60a9c2ab2b10761a182c78ce316b3276079b285a Mon Sep 17 00:00:00 2001 From: acanas Date: Mon, 13 Sep 2021 23:55:28 +0200 Subject: [PATCH] Version 21.1: Sep 13, 2021 New module swad_browser_database for database queries related to file browsers. --- Makefile | 10 +- swad_API.c | 2 +- swad_assignment.h | 2 +- swad_assignment_database.h | 2 +- swad_file_browser.c => swad_browser.c | 1020 +---------------------- swad_file_browser.h => swad_browser.h | 10 +- swad_browser_database.c | 1110 +++++++++++++++++++++++++ swad_browser_database.h | 54 ++ swad_changelog.h | 3 +- swad_figure.c | 2 +- swad_global.h | 2 +- swad_mark.h | 2 +- swad_media.c | 2 +- swad_photo.c | 2 +- swad_project.h | 2 +- swad_text.c | 2 +- swad_timeline_database.h | 2 +- swad_timeline_publication.c | 1 + swad_zip.c | 2 +- 19 files changed, 1190 insertions(+), 1042 deletions(-) rename swad_file_browser.c => swad_browser.c (92%) rename swad_file_browser.h => swad_browser.h (97%) create mode 100644 swad_browser_database.c create mode 100644 swad_browser_database.h diff --git a/Makefile b/Makefile index 6340b340..f18394ef 100644 --- a/Makefile +++ b/Makefile @@ -31,8 +31,9 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \ swad_announcement.o swad_announcement_database.o swad_API.o \ swad_assignment.o swad_assignment_database.o swad_attendance.o \ swad_attendance_database.o \ - swad_banner.o swad_banner_database.o swad_box.o swad_building.o \ - swad_building_database.o swad_button.o \ + swad_banner.o swad_banner_database.o swad_box.o swad_browser.o \ + swad_browser_database.o swad_building.o swad_building_database.o \ + swad_button.o \ swad_calendar.o swad_call_for_exam.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_connected.o \ @@ -47,9 +48,8 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \ swad_exam_database.o swad_exam_log.o swad_exam_print.o \ swad_exam_result.o swad_exam_session.o swad_exam_set.o \ swad_figure.o swad_figure_cache.o swad_figure_database.o swad_file.o \ - swad_file_browser.o swad_file_extension.o swad_file_MIME.o \ - swad_firewall.o swad_follow.o swad_follow_database.o swad_form.o \ - swad_forum.o \ + swad_file_extension.o swad_file_MIME.o swad_firewall.o swad_follow.o \ + swad_follow_database.o swad_form.o swad_forum.o \ swad_game.o swad_global.o swad_group.o swad_group_database.o \ swad_help.o swad_hierarchy.o swad_hierarchy_config.o swad_holiday.o \ swad_HTML.o \ diff --git a/swad_API.c b/swad_API.c index 29f2e8ba..faf99e09 100644 --- a/swad_API.c +++ b/swad_API.c @@ -104,9 +104,9 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/ #include "swad_account.h" #include "swad_API.h" #include "swad_attendance_database.h" +#include "swad_browser.h" #include "swad_database.h" #include "swad_error.h" -#include "swad_file_browser.h" #include "swad_forum.h" #include "swad_global.h" #include "swad_group_database.h" diff --git a/swad_assignment.h b/swad_assignment.h index bf4ae129..937f5775 100644 --- a/swad_assignment.h +++ b/swad_assignment.h @@ -27,8 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#include "swad_browser.h" #include "swad_date.h" -#include "swad_file_browser.h" #include "swad_notification.h" #include "swad_user.h" diff --git a/swad_assignment_database.h b/swad_assignment_database.h index f3bbe545..5f0a56c1 100644 --- a/swad_assignment_database.h +++ b/swad_assignment_database.h @@ -30,7 +30,7 @@ #include // To access MySQL databases #include "swad_assignment.h" -#include "swad_file_browser.h" +#include "swad_browser.h" #include "swad_group.h" /*****************************************************************************/ diff --git a/swad_file_browser.c b/swad_browser.c similarity index 92% rename from swad_file_browser.c rename to swad_browser.c index 6ee2118b..0b229bb5 100644 --- a/swad_file_browser.c +++ b/swad_browser.c @@ -1,4 +1,4 @@ -// swad_file_browser.c: file browsers +// swad_browser.c: file browsers /* SWAD (Shared Workspace At a Distance), @@ -39,11 +39,11 @@ #include // For access, lstat, getpid, chdir, symlink #include "swad_box.h" +#include "swad_browser.h" #include "swad_config.h" #include "swad_database.h" #include "swad_error.h" #include "swad_figure.h" -#include "swad_file_browser.h" #include "swad_file_extension.h" #include "swad_file_MIME.h" #include "swad_form.h" @@ -2749,7 +2749,7 @@ static void Brw_CreateFoldersAssignmentsIfNotExist (long ZoneUsrCod) " WHERE grp_users.UsrCod=%ld" " AND asg_groups.GrpCod=grp_users.GrpCod)" ")", - Gbl.Hierarchy.Crs.CrsCod, + Gbl.Hierarchy.Crs.CrsCod, ZoneUsrCod); /***** Create one folder for each assignment *****/ @@ -12508,1017 +12508,3 @@ Act_Action_t Brw_GetActionContract (void) { return Brw_ActContractFolder[Gbl.FileBrowser.Type]; } - -/*****************************************************************************/ -/*********************** Get the size of a file zone *************************/ -/*****************************************************************************/ - -void Brw_DB_GetSizeOfFileZone (MYSQL_RES **mysql_res, - Brw_FileBrowser_t FileBrowser) - { - switch (Gbl.Scope.Current) - { - /* Scope = the whole platform */ - case HieLvl_SYS: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT Cod AS CrsCod," - "-1 AS GrpCod," - "NumLevels," - "NumFolders," - "NumFiles," - "TotalSize" - " FROM brw_sizes" - " WHERE FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT Cod)," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM brw_sizes" - " WHERE FileBrowser=%u", - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] - "COUNT(DISTINCT brw_sizes.Cod)," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT Cod)," // row[0] - "-1," // row[1] - "COUNT(DISTINCT ZoneUsrCod)," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM brw_sizes" - " WHERE FileBrowser=%u", - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT ZoneUsrCod)," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM brw_sizes" - " WHERE FileBrowser=%u", - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - /* Scope = the current country */ - case HieLvl_CTY: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT brw_sizes.Cod AS CrsCod," - "-1 AS GrpCod," // Course zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," // Group zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] - "COUNT(DISTINCT brw_sizes.Cod)," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "brw_sizes" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - /* Scope = the current institution */ - case HieLvl_INS: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT brw_sizes.Cod AS CrsCod," - "-1 AS GrpCod," // Course zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," // Group zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - Gbl.Hierarchy.Ins.InsCod, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] - "COUNT(DISTINCT brw_sizes.Cod)," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "brw_sizes" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - /* Scope = the current center */ - case HieLvl_CTR: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT brw_sizes.Cod AS CrsCod," - "-1 AS GrpCod," // Course zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," // Group zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," - "COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "MAX(brw_sizes.NumLevels)," // row[2] - "SUM(brw_sizes.NumFolders)," // row[3] - "SUM(brw_sizes.NumFiles)," // row[4] - "SUM(brw_sizes.TotalSize)" // row[5] - " FROM deg_degrees," - "crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM deg_degrees," - "crs_courses," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM deg_degrees," - "crs_courses," - "crs_users," - "brw_sizes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - /* Scope = the current degree */ - case HieLvl_DEG: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT brw_sizes.Cod AS CrsCod," - "-1 AS GrpCod," // Course zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM crs_courses," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," // Group zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - Gbl.Hierarchy.Deg.DegCod, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM crs_courses," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] - "COUNT(DISTINCT brw_sizes.Cod)," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM crs_courses," - "grp_types," - "grp_groups," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=grp_types.CrsCod" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM crs_courses," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM crs_courses," - "crs_users," - "brw_sizes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - /* Scope = the current course */ - case HieLvl_CRS: - switch (FileBrowser) - { - case Brw_UNKNOWN: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT CrsCod)," // row[0] - "COUNT(DISTINCT GrpCod)-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM " - "(" - "SELECT Cod AS CrsCod," - "-1 AS GrpCod," // Course zones - "NumLevels," - "NumFolders," - "NumFiles," - "TotalSize" - " FROM brw_sizes" - " WHERE Cod=%ld" - " AND FileBrowser IN (%u,%u,%u,%u,%u,%u)" - " UNION " - "SELECT grp_types.CrsCod," - "brw_sizes.Cod AS GrpCod," // Group zones - "brw_sizes.NumLevels," - "brw_sizes.NumFolders," - "brw_sizes.NumFiles," - "brw_sizes.TotalSize" - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.CrsCod=%ld" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" - ") AS sizes", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_TCH_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) Brw_ADMI_ASG_USR, - (unsigned) Brw_ADMI_WRK_USR, - (unsigned) Brw_ADMI_MRK_CRS, - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) Brw_ADMI_DOC_GRP, - (unsigned) Brw_ADMI_TCH_GRP, - (unsigned) Brw_ADMI_SHR_GRP, - (unsigned) Brw_ADMI_MRK_GRP); - break; - case Brw_ADMI_DOC_CRS: - case Brw_ADMI_TCH_CRS: - case Brw_ADMI_SHR_CRS: - case Brw_ADMI_MRK_CRS: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT 1," // row[0] - "-1," // row[1] - "-1," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM brw_sizes" - " WHERE Cod=%ld" - " AND FileBrowser=%u", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_DOC_GRP: - case Brw_ADMI_TCH_GRP: - case Brw_ADMI_SHR_GRP: - case Brw_ADMI_MRK_GRP: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] - "COUNT(DISTINCT brw_sizes.Cod)," // row[1] - "-1," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM grp_types," - "grp_groups," - "brw_sizes" - " WHERE grp_types.CrsCod=%ld" - " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" - " AND grp_groups.GrpCod=brw_sizes.Cod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_ASG_USR: - case Brw_ADMI_WRK_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT 1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT ZoneUsrCod)," // row[2] - "MAX(NumLevels)," // row[3] - "SUM(NumFolders)," // row[4] - "SUM(NumFiles)," // row[5] - "SUM(TotalSize)" // row[6] - " FROM brw_sizes" - " WHERE Cod=%ld" - " AND FileBrowser=%u", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) FileBrowser); - break; - case Brw_ADMI_BRF_USR: - DB_QuerySELECT (mysql_res,"can not get size of a file browser", - "SELECT -1," // row[0] - "-1," // row[1] - "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] - "MAX(brw_sizes.NumLevels)," // row[3] - "SUM(brw_sizes.NumFolders)," // row[4] - "SUM(brw_sizes.NumFiles)," // row[5] - "SUM(brw_sizes.TotalSize)" // row[6] - " FROM crs_users," - "brw_sizes" - " WHERE crs_users.CrsCod=%ld" - " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" - " AND brw_sizes.FileBrowser=%u", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) FileBrowser); - break; - default: - Err_WrongFileBrowserExit (); - break; - } - break; - default: - Err_WrongScopeExit (); - break; - } - } - -/*****************************************************************************/ -/***************** Get number of OERs depending on license *******************/ -/*****************************************************************************/ - -unsigned Brw_DB_GetNumberOfOERs (MYSQL_RES **mysql_res,Brw_License_t License) - { - switch (Gbl.Scope.Current) - { - case HieLvl_SYS: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT Public," // row[0] - "COUNT(*)" // row[1] - " FROM brw_files" - " WHERE License=%u" - " GROUP BY Public", - (unsigned) License); - case HieLvl_CTY: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT brw_files.Public," // row[0] - "COUNT(*)" // row[1] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "brw_files" - " WHERE ins_instits.CtyCod=%ld" - " AND ins_instits.InsCod=ctr_centers.InsCod" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_files.Cod" - " AND brw_files.FileBrowser IN (%u,%u)" - " AND brw_files.License=%u" - " GROUP BY brw_files.Public", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) License); - case HieLvl_INS: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT brw_files.Public," // row[0] - "COUNT(*)" // row[1] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "brw_files" - " WHERE ctr_centers.InsCod=%ld" - " AND ctr_centers.CtrCod=deg_degrees.CtrCod" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_files.Cod" - " AND brw_files.FileBrowser IN (%u,%u)" - " AND brw_files.License=%u" - " GROUP BY brw_files.Public", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) License); - case HieLvl_CTR: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT brw_files.Public," // row[0] - "COUNT(*)" // row[1] - " FROM deg_degrees," - "crs_courses," - "brw_files" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=brw_files.Cod" - " AND brw_files.FileBrowser IN (%u,%u)" - " AND brw_files.License=%u" - " GROUP BY brw_files.Public", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) License); - case HieLvl_DEG: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT brw_files.Public," // row[0] - "COUNT(*)" // row[1] - " FROM crs_courses," - "brw_files" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=brw_files.Cod" - " AND brw_files.FileBrowser IN (%u,%u)" - " AND brw_files.License=%u" - " GROUP BY brw_files.Public", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) License); - case HieLvl_CRS: - return (unsigned) - DB_QuerySELECT (mysql_res,"can not get number of OERs", - "SELECT Public," // row[0] - "COUNT(*)" // row[1] - " FROM brw_files" - " WHERE Cod=%ld" - " AND FileBrowser IN (%u,%u)" - " AND License=%u" - " GROUP BY Public", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) Brw_ADMI_DOC_CRS, - (unsigned) Brw_ADMI_SHR_CRS, - (unsigned) License); - default: - Err_WrongScopeExit (); - return 0; // Not reached - } - } diff --git a/swad_file_browser.h b/swad_browser.h similarity index 97% rename from swad_file_browser.h rename to swad_browser.h index 5b9ceb4c..8046e095 100644 --- a/swad_file_browser.h +++ b/swad_browser.h @@ -1,7 +1,7 @@ -// swad_file_browser.h: file browsers +// swad_browser.h: file browsers -#ifndef _SWAD_FILE_BROWSER -#define _SWAD_FILE_BROWSER +#ifndef _SWAD_BROWSER +#define _SWAD_BROWSER /* SWAD (Shared Workspace At a Distance in Spanish), is a web platform developed at the University of Granada (Spain), @@ -276,8 +276,4 @@ void Brw_RemoveOldFilesBriefcase (void); Act_Action_t Brw_GetActionExpand (void); Act_Action_t Brw_GetActionContract (void); -void Brw_DB_GetSizeOfFileZone (MYSQL_RES **mysql_res, - Brw_FileBrowser_t FileBrowser); -unsigned Brw_DB_GetNumberOfOERs (MYSQL_RES **mysql_res,Brw_License_t License); - #endif diff --git a/swad_browser_database.c b/swad_browser_database.c new file mode 100644 index 00000000..c057601e --- /dev/null +++ b/swad_browser_database.c @@ -0,0 +1,1110 @@ +// swad_browser_database.c: file browsers operations with database + +/* + 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-2021 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 . +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +// #define _GNU_SOURCE // For asprintf +// #include // For scandir, etc. +// #include // For errno +// #include // For PATH_MAX +#include // To access MySQL databases +// #include // For NULL +// #include // For asprintf +// #include // For exit, system, free, etc +// #include // For string functions +// #include // For lstat, time_t +// #include // For lstat +// #include // For time +// #include // For access, lstat, getpid, chdir, symlink + +// #include "swad_box.h" +// #include "swad_browser.h" +#include "swad_browser_database.h" +// #include "swad_config.h" +#include "swad_database.h" +#include "swad_error.h" +// #include "swad_figure.h" +// #include "swad_file_extension.h" +// #include "swad_file_MIME.h" +// #include "swad_form.h" +#include "swad_global.h" +// #include "swad_group_database.h" +// #include "swad_hierarchy.h" +// #include "swad_hierarchy_level.h" +// #include "swad_HTML.h" +// #include "swad_ID.h" +// #include "swad_logo.h" +// #include "swad_mark.h" +// #include "swad_notification.h" +// #include "swad_parameter.h" +// #include "swad_photo.h" +// #include "swad_profile.h" +// #include "swad_project.h" +// #include "swad_role.h" +// #include "swad_setting.h" +// #include "swad_string.h" +// #include "swad_timeline.h" +// #include "swad_timeline_note.h" +// #include "swad_zip.h" + +/*****************************************************************************/ +/******************** Global variables from other modules ********************/ +/*****************************************************************************/ + +extern struct Globals Gbl; + +/*****************************************************************************/ +/******************************* Private types *******************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Public constants ******************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Private variables *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/**************************** Private prototypes *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/*********************** Get the size of a file zone *************************/ +/*****************************************************************************/ + +void Brw_DB_GetSizeOfFileZone (MYSQL_RES **mysql_res, + Brw_FileBrowser_t FileBrowser) + { + switch (Gbl.Scope.Current) + { + /* Scope = the whole platform */ + case HieLvl_SYS: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT Cod AS CrsCod," + "-1 AS GrpCod," + "NumLevels," + "NumFolders," + "NumFiles," + "TotalSize" + " FROM brw_sizes" + " WHERE FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT Cod)," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM brw_sizes" + " WHERE FileBrowser=%u", + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] + "COUNT(DISTINCT brw_sizes.Cod)," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT Cod)," // row[0] + "-1," // row[1] + "COUNT(DISTINCT ZoneUsrCod)," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM brw_sizes" + " WHERE FileBrowser=%u", + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT ZoneUsrCod)," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM brw_sizes" + " WHERE FileBrowser=%u", + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + /* Scope = the current country */ + case HieLvl_CTY: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT brw_sizes.Cod AS CrsCod," + "-1 AS GrpCod," // Course zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," // Group zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] + "COUNT(DISTINCT brw_sizes.Cod)," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "brw_sizes" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + /* Scope = the current institution */ + case HieLvl_INS: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT brw_sizes.Cod AS CrsCod," + "-1 AS GrpCod," // Course zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," // Group zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + Gbl.Hierarchy.Ins.InsCod, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] + "COUNT(DISTINCT brw_sizes.Cod)," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "brw_sizes" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + /* Scope = the current center */ + case HieLvl_CTR: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT brw_sizes.Cod AS CrsCod," + "-1 AS GrpCod," // Course zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," // Group zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," + "COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "MAX(brw_sizes.NumLevels)," // row[2] + "SUM(brw_sizes.NumFolders)," // row[3] + "SUM(brw_sizes.NumFiles)," // row[4] + "SUM(brw_sizes.TotalSize)" // row[5] + " FROM deg_degrees," + "crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM deg_degrees," + "crs_courses," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM deg_degrees," + "crs_courses," + "crs_users," + "brw_sizes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + /* Scope = the current degree */ + case HieLvl_DEG: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT brw_sizes.Cod AS CrsCod," + "-1 AS GrpCod," // Course zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM crs_courses," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," // Group zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + Gbl.Hierarchy.Deg.DegCod, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM crs_courses," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] + "COUNT(DISTINCT brw_sizes.Cod)," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM crs_courses," + "grp_types," + "grp_groups," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=grp_types.CrsCod" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT brw_sizes.Cod)," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM crs_courses," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM crs_courses," + "crs_users," + "brw_sizes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + /* Scope = the current course */ + case HieLvl_CRS: + switch (FileBrowser) + { + case Brw_UNKNOWN: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT CrsCod)," // row[0] + "COUNT(DISTINCT GrpCod)-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM " + "(" + "SELECT Cod AS CrsCod," + "-1 AS GrpCod," // Course zones + "NumLevels," + "NumFolders," + "NumFiles," + "TotalSize" + " FROM brw_sizes" + " WHERE Cod=%ld" + " AND FileBrowser IN (%u,%u,%u,%u,%u,%u)" + " UNION " + "SELECT grp_types.CrsCod," + "brw_sizes.Cod AS GrpCod," // Group zones + "brw_sizes.NumLevels," + "brw_sizes.NumFolders," + "brw_sizes.NumFiles," + "brw_sizes.TotalSize" + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.CrsCod=%ld" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser IN (%u,%u,%u,%u)" + ") AS sizes", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_TCH_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) Brw_ADMI_ASG_USR, + (unsigned) Brw_ADMI_WRK_USR, + (unsigned) Brw_ADMI_MRK_CRS, + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) Brw_ADMI_DOC_GRP, + (unsigned) Brw_ADMI_TCH_GRP, + (unsigned) Brw_ADMI_SHR_GRP, + (unsigned) Brw_ADMI_MRK_GRP); + break; + case Brw_ADMI_DOC_CRS: + case Brw_ADMI_TCH_CRS: + case Brw_ADMI_SHR_CRS: + case Brw_ADMI_MRK_CRS: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT 1," // row[0] + "-1," // row[1] + "-1," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM brw_sizes" + " WHERE Cod=%ld" + " AND FileBrowser=%u", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_DOC_GRP: + case Brw_ADMI_TCH_GRP: + case Brw_ADMI_SHR_GRP: + case Brw_ADMI_MRK_GRP: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT COUNT(DISTINCT grp_types.CrsCod)," // row[0] + "COUNT(DISTINCT brw_sizes.Cod)," // row[1] + "-1," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM grp_types," + "grp_groups," + "brw_sizes" + " WHERE grp_types.CrsCod=%ld" + " AND grp_types.GrpTypCod=grp_groups.GrpTypCod" + " AND grp_groups.GrpCod=brw_sizes.Cod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_ASG_USR: + case Brw_ADMI_WRK_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT 1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT ZoneUsrCod)," // row[2] + "MAX(NumLevels)," // row[3] + "SUM(NumFolders)," // row[4] + "SUM(NumFiles)," // row[5] + "SUM(TotalSize)" // row[6] + " FROM brw_sizes" + " WHERE Cod=%ld" + " AND FileBrowser=%u", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) FileBrowser); + break; + case Brw_ADMI_BRF_USR: + DB_QuerySELECT (mysql_res,"can not get size of a file browser", + "SELECT -1," // row[0] + "-1," // row[1] + "COUNT(DISTINCT brw_sizes.ZoneUsrCod)," // row[2] + "MAX(brw_sizes.NumLevels)," // row[3] + "SUM(brw_sizes.NumFolders)," // row[4] + "SUM(brw_sizes.NumFiles)," // row[5] + "SUM(brw_sizes.TotalSize)" // row[6] + " FROM crs_users," + "brw_sizes" + " WHERE crs_users.CrsCod=%ld" + " AND crs_users.UsrCod=brw_sizes.ZoneUsrCod" + " AND brw_sizes.FileBrowser=%u", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) FileBrowser); + break; + default: + Err_WrongFileBrowserExit (); + break; + } + break; + default: + Err_WrongScopeExit (); + break; + } + } + +/*****************************************************************************/ +/***************** Get number of OERs depending on license *******************/ +/*****************************************************************************/ + +unsigned Brw_DB_GetNumberOfOERs (MYSQL_RES **mysql_res,Brw_License_t License) + { + switch (Gbl.Scope.Current) + { + case HieLvl_SYS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT Public," // row[0] + "COUNT(*)" // row[1] + " FROM brw_files" + " WHERE License=%u" + " GROUP BY Public", + (unsigned) License); + case HieLvl_CTY: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT brw_files.Public," // row[0] + "COUNT(*)" // row[1] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "brw_files" + " WHERE ins_instits.CtyCod=%ld" + " AND ins_instits.InsCod=ctr_centers.InsCod" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_files.Cod" + " AND brw_files.FileBrowser IN (%u,%u)" + " AND brw_files.License=%u" + " GROUP BY brw_files.Public", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) License); + case HieLvl_INS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT brw_files.Public," // row[0] + "COUNT(*)" // row[1] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "brw_files" + " WHERE ctr_centers.InsCod=%ld" + " AND ctr_centers.CtrCod=deg_degrees.CtrCod" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_files.Cod" + " AND brw_files.FileBrowser IN (%u,%u)" + " AND brw_files.License=%u" + " GROUP BY brw_files.Public", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) License); + case HieLvl_CTR: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT brw_files.Public," // row[0] + "COUNT(*)" // row[1] + " FROM deg_degrees," + "crs_courses," + "brw_files" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=brw_files.Cod" + " AND brw_files.FileBrowser IN (%u,%u)" + " AND brw_files.License=%u" + " GROUP BY brw_files.Public", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) License); + case HieLvl_DEG: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT brw_files.Public," // row[0] + "COUNT(*)" // row[1] + " FROM crs_courses," + "brw_files" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=brw_files.Cod" + " AND brw_files.FileBrowser IN (%u,%u)" + " AND brw_files.License=%u" + " GROUP BY brw_files.Public", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) License); + case HieLvl_CRS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of OERs", + "SELECT Public," // row[0] + "COUNT(*)" // row[1] + " FROM brw_files" + " WHERE Cod=%ld" + " AND FileBrowser IN (%u,%u)" + " AND License=%u" + " GROUP BY Public", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) Brw_ADMI_DOC_CRS, + (unsigned) Brw_ADMI_SHR_CRS, + (unsigned) License); + default: + Err_WrongScopeExit (); + return 0; // Not reached + } + } diff --git a/swad_browser_database.h b/swad_browser_database.h new file mode 100644 index 00000000..7784be98 --- /dev/null +++ b/swad_browser_database.h @@ -0,0 +1,54 @@ +// swad_browser_database.h: file browsers operations with database + +#ifndef _SWAD_BROWSER_DATABASE +#define _SWAD_BROWSER_DATABASE +/* + 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-2021 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 . +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +// #include // For PATH_MAX +#include // To access MySQL databases + +#include "swad_browser.h" +// #include "swad_course.h" +// #include "swad_group.h" +// #include "swad_notification.h" + +/*****************************************************************************/ +/************************ Public types and constants *************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/****************************** Public constants *****************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/***************************** Public prototypes *****************************/ +/*****************************************************************************/ + +void Brw_DB_GetSizeOfFileZone (MYSQL_RES **mysql_res, + Brw_FileBrowser_t FileBrowser); +unsigned Brw_DB_GetNumberOfOERs (MYSQL_RES **mysql_res,Brw_License_t License); + +#endif diff --git a/swad_changelog.h b/swad_changelog.h index 22e15f80..6fb3db51 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 21.0.2 (2021-09-13)" +#define Log_PLATFORM_VERSION "SWAD 21.1 (2021-09-13)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 21.1: Sep 13, 2021 New module swad_browser_database for database queries related to file browsers. (315050 lines) Version 21.0.2: Sep 13, 2021 Queries moved to module swad_notification. (314927 lines) Version 21.0.1: Sep 13, 2021 Queries moved to module swad_follow_database. (314910 lines) Version 21.0: Sep 13, 2021 Fixed bug in degrees photo. (314914 lines) diff --git a/swad_figure.c b/swad_figure.c index 2f3d1142..6f922303 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -34,12 +34,12 @@ #include "swad_agenda_database.h" #include "swad_assignment_database.h" #include "swad_box.h" +#include "swad_browser_database.h" #include "swad_database.h" #include "swad_error.h" #include "swad_exam_database.h" #include "swad_figure.h" #include "swad_figure_cache.h" -#include "swad_file_browser.h" #include "swad_follow.h" #include "swad_follow_database.h" #include "swad_form.h" diff --git a/swad_global.h b/swad_global.h index d955a652..d3950281 100644 --- a/swad_global.h +++ b/swad_global.h @@ -36,6 +36,7 @@ #include "swad_API.h" #include "swad_assignment.h" #include "swad_box.h" +#include "swad_browser.h" #include "swad_center.h" #include "swad_connected.h" #include "swad_config.h" @@ -45,7 +46,6 @@ #include "swad_degree_type.h" #include "swad_enrolment.h" #include "swad_file.h" -#include "swad_file_browser.h" #include "swad_icon.h" #include "swad_institution.h" #include "swad_layout.h" diff --git a/swad_mark.h b/swad_mark.h index f3605224..0a44ca2f 100644 --- a/swad_mark.h +++ b/swad_mark.h @@ -29,7 +29,7 @@ #include // For boolean type -#include "swad_file_browser.h" +#include "swad_browser.h" /*****************************************************************************/ /******************************* Public types ********************************/ diff --git a/swad_media.c b/swad_media.c index dfbd60d2..49ffeb31 100644 --- a/swad_media.c +++ b/swad_media.c @@ -37,12 +37,12 @@ #include // For unlink, lstat #include "swad_box.h" +#include "swad_browser.h" #include "swad_config.h" #include "swad_cookie.h" #include "swad_database.h" #include "swad_error.h" #include "swad_file.h" -#include "swad_file_browser.h" #include "swad_form.h" #include "swad_global.h" #include "swad_HTML.h" diff --git a/swad_photo.c b/swad_photo.c index 3d11548b..e95d3de5 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -37,12 +37,12 @@ #include "swad_action.h" #include "swad_box.h" +#include "swad_browser.h" #include "swad_config.h" #include "swad_database.h" #include "swad_enrolment.h" #include "swad_error.h" #include "swad_file.h" -#include "swad_file_browser.h" #include "swad_follow.h" #include "swad_form.h" #include "swad_global.h" diff --git a/swad_project.h b/swad_project.h index e00795b8..8a000a94 100644 --- a/swad_project.h +++ b/swad_project.h @@ -27,8 +27,8 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ +#include "swad_browser.h" #include "swad_date.h" -#include "swad_file_browser.h" #include "swad_notification.h" #include "swad_user.h" diff --git a/swad_text.c b/swad_text.c index 9aeab173..31722028 100644 --- a/swad_text.c +++ b/swad_text.c @@ -58,6 +58,7 @@ #include "swad_action.h" #include "swad_assignment.h" +#include "swad_browser.h" #include "swad_building.h" #include "swad_center.h" #include "swad_config.h" @@ -69,7 +70,6 @@ #include "swad_department.h" #include "swad_exam_log.h" #include "swad_figure.h" -#include "swad_file_browser.h" #include "swad_forum.h" #include "swad_holiday.h" #include "swad_info.h" diff --git a/swad_timeline_database.h b/swad_timeline_database.h index e7da4e86..6844f3a3 100644 --- a/swad_timeline_database.h +++ b/swad_timeline_database.h @@ -27,8 +27,8 @@ /********************************** Headers **********************************/ /*****************************************************************************/ +#include "swad_browser.h" #include "swad_database.h" -#include "swad_file_browser.h" #include "swad_timeline_comment.h" #include "swad_timeline_favourite.h" #include "swad_timeline_note.h" diff --git a/swad_timeline_publication.c b/swad_timeline_publication.c index e786e243..9b2284bc 100644 --- a/swad_timeline_publication.c +++ b/swad_timeline_publication.c @@ -30,6 +30,7 @@ #include "swad_error.h" #include "swad_follow.h" +#include "swad_follow_database.h" #include "swad_global.h" #include "swad_profile.h" #include "swad_timeline.h" diff --git a/swad_zip.c b/swad_zip.c index 8ebe25ab..bd7d7ba6 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -37,9 +37,9 @@ #include // For chdir... #include "swad_box.h" +#include "swad_browser.h" #include "swad_config.h" #include "swad_error.h" -#include "swad_file_browser.h" #include "swad_form.h" #include "swad_global.h" #include "swad_HTML.h"