From b4b1e17db2871350289b7f38ac41f0b61db3de2b Mon Sep 17 00:00:00 2001 From: acanas Date: Sat, 11 Sep 2021 17:44:00 +0200 Subject: [PATCH] Version 20.100.4: Sep 11, 2021 Queries moved to module swad_timeline_database. --- swad_changelog.h | 4 +- swad_figure.c | 337 +++------------------------------------ swad_file_browser.c | 113 +++++++++++++ swad_file_browser.h | 1 + swad_timeline_database.c | 195 +++++++++++++++++++++- swad_timeline_database.h | 6 + 6 files changed, 339 insertions(+), 317 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index cd0aa438..92787d19 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,15 @@ 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 20.100.2 (2021-09-11)" +#define Log_PLATFORM_VERSION "SWAD 20.100.4 (2021-09-11)" #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 20.100.4: Sep 11, 2021 Queries moved to module swad_timeline_database. (314934 lines) + Version 20.100.3: Sep 11, 2021 Queries moved to module swad_file_browser. (314923 lines) Version 20.100.2: Sep 11, 2021 Queries moved to module swad_institution_database. (314919 lines) Version 20.100.1: Sep 10, 2021 Queries moved to module swad_institution_database. (314941 lines) Version 20.100: Sep 10, 2021 New module swad_figure_database for database queries related to figures. (314940 lines) diff --git a/swad_figure.c b/swad_figure.c index 0a37b72b..b7e248c4 100644 --- a/swad_figure.c +++ b/swad_figure.c @@ -61,6 +61,7 @@ #include "swad_survey.h" #include "swad_test.h" #include "swad_timeline.h" +#include "swad_timeline_database.h" #include "swad_timeline_note.h" /*****************************************************************************/ @@ -1764,117 +1765,8 @@ static void Fig_GetNumberOfOERs (Brw_License_t License, unsigned Public; /***** Get the size of a file browser *****/ - switch (Gbl.Scope.Current) - { - case HieLvl_SYS: - NumRows = (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); - break; - case HieLvl_CTY: - NumRows = (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); - break; - case HieLvl_INS: - NumRows = (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); - break; - case HieLvl_CTR: - NumRows = (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); - break; - case HieLvl_DEG: - NumRows = (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); - break; - case HieLvl_CRS: - NumRows = (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); - break; - default: - Err_WrongScopeExit (); - break; - } + /* Query database */ + NumRows = Brw_DB_GetNumberOfOERs (&mysql_res,License); /* Reset values to zero */ NumFiles[0] = NumFiles[1] = 0L; @@ -2338,7 +2230,6 @@ static void Fig_GetAndShowTimelineActivityStats (void) MYSQL_ROW row; Tml_Not_NoteType_t NoteType; unsigned NumNotes; - unsigned NumRows; unsigned NumUsrs; unsigned NumUsrsTotal; @@ -2359,120 +2250,17 @@ static void Fig_GetAndShowTimelineActivityStats (void) /***** Get total number of users *****/ NumUsrsTotal = Usr_GetTotalNumberOfUsers (); - /***** Get total number of following/followers from database *****/ + /***** Get total number of timeline notes and users for each note type *****/ for (NoteType = (Tml_Not_NoteType_t) 0; NoteType <= (Tml_Not_NoteType_t) (TL_NOT_NUM_NOTE_TYPES - 1); NoteType++) { - switch (Gbl.Scope.Current) + /***** Get number of timeline notes and users for this type *****/ + if (Tml_DB_GetNumNotesAndUsrsByType (&mysql_res,NoteType)) { - case HieLvl_SYS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(*)," // row[0] - "COUNT(DISTINCT UsrCod)" // row[1] - " FROM tml_notes WHERE NoteType=%u", - NoteType); - break; - case HieLvl_CTY: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " 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=tml_notes.UsrCod" - " AND tml_notes.NoteType=%u", - Gbl.Hierarchy.Cty.CtyCod, - (unsigned) NoteType); - break; - case HieLvl_INS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " 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=tml_notes.UsrCod" - " AND tml_notes.NoteType=%u", - Gbl.Hierarchy.Ins.InsCod, - (unsigned) NoteType); - break; - case HieLvl_CTR: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=tml_notes.UsrCod" - " AND tml_notes.NoteType=%u", - Gbl.Hierarchy.Ctr.CtrCod, - (unsigned) NoteType); - break; - case HieLvl_DEG: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM crs_courses," - "crs_users," - "tml_notes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=tml_notes.UsrCod" - " AND tml_notes.NoteType=%u", - Gbl.Hierarchy.Deg.DegCod, - (unsigned) NoteType); - break; - case HieLvl_CRS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM crs_users," - "tml_notes" - " WHERE crs_users.CrsCod=%ld" - " AND crs_users.UsrCod=tml_notes.UsrCod" - " AND tml_notes.NoteType=%u", - Gbl.Hierarchy.Crs.CrsCod, - (unsigned) NoteType); - break; - default: - Err_WrongScopeExit (); - NumRows = 0; // Initialized to avoid warning - break; - } - NumNotes = 0; - NumUsrs = 0; - - if (NumRows) - { - /***** Get number of social notes and number of users *****/ row = mysql_fetch_row (mysql_res); - /* Get number of social notes */ + /* Get number of timeline notes */ if (row[0]) if (sscanf (row[0],"%u",&NumNotes) != 1) NumNotes = 0; @@ -2482,11 +2270,16 @@ static void Fig_GetAndShowTimelineActivityStats (void) if (sscanf (row[1],"%u",&NumUsrs) != 1) NumUsrs = 0; } + else + { + NumNotes = 0; + NumUsrs = 0; + } /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); - /***** Write number of social notes and number of users *****/ + /***** Write number of timeline notes and number of users *****/ HTM_TR_Begin (NULL); HTM_TD_Begin ("class=\"DAT LM\""); @@ -2508,107 +2301,16 @@ static void Fig_GetAndShowTimelineActivityStats (void) HTM_TD_End (); HTM_TD_Begin ("class=\"DAT RM\""); - HTM_Double2Decimals (NumUsrs ? (double) NumNotes / (double) NumUsrs : - 0.0); + HTM_Double2Decimals (NumUsrs ? (double) NumNotes / + (double) NumUsrs : + 0.0); HTM_TD_End (); HTM_TR_End (); } /***** Get and write totals *****/ - switch (Gbl.Scope.Current) - { - case HieLvl_SYS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(*)," // row[0] - "COUNT(DISTINCT UsrCod)" // row[1] - " FROM tml_notes"); - break; - case HieLvl_CTY: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM ins_instits," - "ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " 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=tml_notes.UsrCod", - Gbl.Hierarchy.Cty.CtyCod); - break; - case HieLvl_INS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM ctr_centers," - "deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " 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=tml_notes.UsrCod", - Gbl.Hierarchy.Ins.InsCod); - break; - case HieLvl_CTR: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM deg_degrees," - "crs_courses," - "crs_users," - "tml_notes" - " WHERE deg_degrees.CtrCod=%ld" - " AND deg_degrees.DegCod=crs_courses.DegCod" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=tml_notes.UsrCod", - Gbl.Hierarchy.Ctr.CtrCod); - break; - case HieLvl_DEG: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM crs_courses," - "crs_users," - "tml_notes" - " WHERE crs_courses.DegCod=%ld" - " AND crs_courses.CrsCod=crs_users.CrsCod" - " AND crs_users.UsrCod=tml_notes.UsrCod", - Gbl.Hierarchy.Deg.DegCod); - break; - case HieLvl_CRS: - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get number of social notes", - "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] - "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] - " FROM crs_users," - "tml_notes" - " WHERE crs_users.CrsCod=%ld" - " AND crs_users.UsrCod=tml_notes.UsrCod", - Gbl.Hierarchy.Crs.CrsCod); - break; - default: - Err_WrongScopeExit (); - NumRows = 0; // Initialized to avoid warning - break; - } - NumNotes = 0; - NumUsrs = 0; - - if (NumRows) + if (Tml_DB_GetNumNotesAndUsrsTotal (&mysql_res)) { /* Get number of social notes and number of users */ row = mysql_fetch_row (mysql_res); @@ -2623,6 +2325,11 @@ static void Fig_GetAndShowTimelineActivityStats (void) if (sscanf (row[1],"%u",&NumUsrs) != 1) NumUsrs = 0; } + else + { + NumNotes = 0; + NumUsrs = 0; + } /* Free structure that stores the query result */ DB_FreeMySQLResult (&mysql_res); diff --git a/swad_file_browser.c b/swad_file_browser.c index 298e5755..6ee2118b 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -13409,3 +13409,116 @@ void Brw_DB_GetSizeOfFileZone (MYSQL_RES **mysql_res, 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_file_browser.h index eb267bfa..5b9ceb4c 100644 --- a/swad_file_browser.h +++ b/swad_file_browser.h @@ -278,5 +278,6 @@ 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_timeline_database.c b/swad_timeline_database.c index be290ca2..ddf00ded 100644 --- a/swad_timeline_database.c +++ b/swad_timeline_database.c @@ -212,6 +212,199 @@ void Tml_DB_MarkNotesChildrenOfFolderAsUnavailable (Tml_Not_NoteType_t NoteType, Path); } +/*****************************************************************************/ +/********** Get number of notes and users depending on note type *************/ +/*****************************************************************************/ + +unsigned Tml_DB_GetNumNotesAndUsrsByType (MYSQL_RES **mysql_res, + Tml_Not_NoteType_t NoteType) + { + switch (Gbl.Scope.Current) + { + case HieLvl_SYS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(*)," // row[0] + "COUNT(DISTINCT UsrCod)" // row[1] + " FROM tml_notes" + " WHERE NoteType=%u", + (unsigned) NoteType); + case HieLvl_CTY: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " 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=tml_notes.UsrCod" + " AND tml_notes.NoteType=%u", + Gbl.Hierarchy.Cty.CtyCod, + (unsigned) NoteType); + case HieLvl_INS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " 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=tml_notes.UsrCod" + " AND tml_notes.NoteType=%u", + Gbl.Hierarchy.Ins.InsCod, + (unsigned) NoteType); + case HieLvl_CTR: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=tml_notes.UsrCod" + " AND tml_notes.NoteType=%u", + Gbl.Hierarchy.Ctr.CtrCod, + (unsigned) NoteType); + case HieLvl_DEG: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM crs_courses," + "crs_users," + "tml_notes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=tml_notes.UsrCod" + " AND tml_notes.NoteType=%u", + Gbl.Hierarchy.Deg.DegCod, + (unsigned) NoteType); + case HieLvl_CRS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM crs_users," + "tml_notes" + " WHERE crs_users.CrsCod=%ld" + " AND crs_users.UsrCod=tml_notes.UsrCod" + " AND tml_notes.NoteType=%u", + Gbl.Hierarchy.Crs.CrsCod, + (unsigned) NoteType); + default: + Err_WrongScopeExit (); + return 0; // Not reached + } + } + +/*****************************************************************************/ +/******************** Get total number of notes and users ********************/ +/*****************************************************************************/ + +unsigned Tml_DB_GetNumNotesAndUsrsTotal (MYSQL_RES **mysql_res) + { + switch (Gbl.Scope.Current) + { + case HieLvl_SYS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(*)," // row[0] + "COUNT(DISTINCT UsrCod)" // row[1] + " FROM tml_notes"); + case HieLvl_CTY: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM ins_instits," + "ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " 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=tml_notes.UsrCod", + Gbl.Hierarchy.Cty.CtyCod); + case HieLvl_INS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM ctr_centers," + "deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " 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=tml_notes.UsrCod", + Gbl.Hierarchy.Ins.InsCod); + case HieLvl_CTR: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM deg_degrees," + "crs_courses," + "crs_users," + "tml_notes" + " WHERE deg_degrees.CtrCod=%ld" + " AND deg_degrees.DegCod=crs_courses.DegCod" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=tml_notes.UsrCod", + Gbl.Hierarchy.Ctr.CtrCod); + case HieLvl_DEG: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM crs_courses," + "crs_users," + "tml_notes" + " WHERE crs_courses.DegCod=%ld" + " AND crs_courses.CrsCod=crs_users.CrsCod" + " AND crs_users.UsrCod=tml_notes.UsrCod", + Gbl.Hierarchy.Deg.DegCod); + case HieLvl_CRS: + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get number of social notes", + "SELECT COUNT(DISTINCT tml_notes.NotCod)," // row[0] + "COUNT(DISTINCT tml_notes.UsrCod)" // row[1] + " FROM crs_users," + "tml_notes" + " WHERE crs_users.CrsCod=%ld" + " AND crs_users.UsrCod=tml_notes.UsrCod", + Gbl.Hierarchy.Crs.CrsCod); + default: + Err_WrongScopeExit (); + return 0; // Not reached + } + } + /*****************************************************************************/ /******* Create temporary tables used to not get notes already shown *********/ /*****************************************************************************/ @@ -489,7 +682,7 @@ unsigned Tml_DB_GetNumCommsInNote (long NotCod) } /*****************************************************************************/ -/************** Get publication codes of comments of a note from database *****************/ +/******* Get publication codes of comments of a note from database ***********/ /*****************************************************************************/ // Returns the number of rows got diff --git a/swad_timeline_database.h b/swad_timeline_database.h index 8ff5fddc..e7da4e86 100644 --- a/swad_timeline_database.h +++ b/swad_timeline_database.h @@ -60,6 +60,11 @@ void Tml_DB_MarkNoteAsUnavailable (Tml_Not_NoteType_t NoteType,long Cod); void Tml_DB_MarkNotesChildrenOfFolderAsUnavailable (Tml_Not_NoteType_t NoteType, Brw_FileBrowser_t FileBrowser, long Cod,const char *Path); + +unsigned Tml_DB_GetNumNotesAndUsrsByType (MYSQL_RES **mysql_res, + Tml_Not_NoteType_t NoteType); +unsigned Tml_DB_GetNumNotesAndUsrsTotal (MYSQL_RES **mysql_res); + void Tml_DB_CreateTmpTableJustRetrievedNotes (void); void Tml_DB_CreateTmpTableVisibleTimeline (void); void Tml_DB_InsertNoteInJustRetrievedNotes (long NotCod); @@ -69,6 +74,7 @@ void Tml_DB_DropTmpTableJustRetrievedNotes (void); void Tml_DB_DropTmpTableVisibleTimeline (void); void Tml_DB_ClearOldTimelinesNotesFromDB (void); void Tml_DB_ClearTimelineNotesOfSessionFromDB (void); + void Tml_DB_RemoveNoteFavs (long NotCod); void Tml_DB_RemoveNotePubs (long NotCod); void Tml_DB_RemoveNote (long NotCod);