Version 21.2.2: Sep 14, 2021 Queries moved to module swad_browser_database.

This commit is contained in:
acanas 2021-09-14 23:32:18 +02:00
parent eb872c73a3
commit ef9d714feb
10 changed files with 414 additions and 356 deletions

View File

@ -1330,10 +1330,7 @@ static void Brw_WriteSmallLinkToDownloadFile (const char *URL,
static bool Brw_GetParamPublicFile (void);
static Brw_License_t Brw_GetParLicense (void);
static void Brw_GetFileViewsFromLoggedUsrs (struct FileMetadata *FileMetadata);
static unsigned Brw_DB_GetFileViewsFromNonLoggedUsrs (long FilCod);
static unsigned Brw_GetFileViewsFromMe (long FilCod);
static void Brw_UpdateFileViews (unsigned NumViews,long FilCod);
static bool Brw_GetIfFolderHasPublicFiles (const char Path[PATH_MAX + 1]);
static void Brw_ChangeFileOrFolderHiddenInDB (const char Path[PATH_MAX + 1],bool IsHidden);
@ -4513,8 +4510,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
/***** Is this row public or private? *****/
if (SeeDocsZone || AdminDocsZone || SharedZone)
{
RowSetAsPublic = (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) ? Brw_GetIfFolderHasPublicFiles (Gbl.FileBrowser.FilFolLnk.Full) :
FileMetadata.IsPublic;
RowSetAsPublic = (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) ? Brw_DB_GetIfFolderHasPublicFiles (Gbl.FileBrowser.FilFolLnk.Full) :
FileMetadata.IsPublic;
if (Gbl.FileBrowser.ShowOnlyPublicFiles && !RowSetAsPublic)
return false;
}
@ -8244,24 +8241,24 @@ void Brw_ShowFileMetadata (void)
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE,
FileMetadata.FilCod);
FileMetadata.FilCod);
break;
case Brw_ADMI_TCH_CRS:
case Brw_ADMI_TCH_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE,
FileMetadata.FilCod);
FileMetadata.FilCod);
break;
case Brw_ADMI_SHR_CRS:
case Brw_ADMI_SHR_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE,
FileMetadata.FilCod);
FileMetadata.FilCod);
break;
case Brw_SHOW_MRK_CRS:
case Brw_SHOW_MRK_GRP:
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE,
FileMetadata.FilCod);
FileMetadata.FilCod);
break;
default:
break;
@ -8784,34 +8781,6 @@ static Brw_License_t Brw_GetParLicense (void)
(unsigned long) Brw_LICENSE_UNKNOWN);
}
/*****************************************************************************/
/*********************** Get file code using its path ************************/
/*****************************************************************************/
// Path is the full path in tree
// Example: descarga/folder/file.pdf
long Brw_GetFilCodByPath (const char *Path,bool OnlyIfPublic)
{
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
/***** Get code of a file from database *****/
return DB_QuerySELECTCode ("can not get file code",
"SELECT FilCod"
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path='%s'"
"%s",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
ZoneUsrCod,
Path,
OnlyIfPublic ? " AND Public='Y'" :
"");
}
/*****************************************************************************/
/********************* Get file metadata using its path **********************/
/*****************************************************************************/
@ -8820,32 +8789,12 @@ long Brw_GetFilCodByPath (const char *Path,bool OnlyIfPublic)
void Brw_GetFileMetadataByPath (struct FileMetadata *FileMetadata)
{
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned UnsignedNum;
/***** Get metadata of a file from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get file metadata",
"SELECT FilCod," // row[0]
"FileBrowser," // row[1]
"Cod," // row[2]
"ZoneUsrCod," // row[3]
"PublisherUsrCod," // row[4]
"FileType," // row[5]
"Path," // row[6]
"Hidden," // row[7]
"Public," // row[8]
"License" // row[9]
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path='%s'",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,ZoneUsrCod,
Gbl.FileBrowser.FilFolLnk.Full))
if (Brw_DB_GetFileMetadataByPath (&mysql_res,Gbl.FileBrowser.FilFolLnk.Full))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -8969,20 +8918,7 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata)
unsigned UnsignedNum;
/***** Get metadata of a file from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get file metadata",
"SELECT FilCod," // row[0]
"FileBrowser," // row[1]
"Cod," // row[2]
"ZoneUsrCod," // row[3]
"PublisherUsrCod," // row[4]
"FileType," // row[5]
"Path," // row[6]
"Hidden," // row[7]
"Public," // row[8]
"License" // row[9]
" FROM brw_files"
" WHERE FilCod=%ld",
FileMetadata->FilCod))
if (Brw_DB_GetFileMetadataByCod (&mysql_res,FileMetadata->FilCod))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -9160,7 +9096,7 @@ void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata)
FileMetadata->NumMyViews = FileMetadata->NumPublicViews;
/***** Update number of my views *****/
Brw_UpdateFileViews (FileMetadata->NumMyViews,FileMetadata->FilCod);
Brw_DB_UpdateFileViews (FileMetadata->NumMyViews,FileMetadata->FilCod);
/***** Increment number of file views in my user's figures *****/
if (Gbl.Usrs.Me.Logged)
@ -9180,21 +9116,7 @@ void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata)
void Brw_UpdateMyFileViews (long FilCod)
{
/***** Update number of my views *****/
Brw_UpdateFileViews (Brw_GetFileViewsFromMe (FilCod),FilCod);
}
/*****************************************************************************/
/******************** Get number of file views from a user *******************/
/*****************************************************************************/
unsigned Brw_DB_GetNumFileViewsUsr (long UsrCod)
{
/***** Get number of filw views *****/
return DB_QuerySELECTUnsigned ("can not get number of file views",
"SELECT SUM(NumViews)"
" FROM brw_views"
" WHERE UsrCod=%ld",
UsrCod);
Brw_DB_UpdateFileViews (Brw_GetFileViewsFromMe (FilCod),FilCod);
}
/*****************************************************************************/
@ -9211,14 +9133,7 @@ static void Brw_GetFileViewsFromLoggedUsrs (struct FileMetadata *FileMetadata)
MYSQL_ROW row;
/***** Get number total of views from logged users *****/
if (DB_QuerySELECT (&mysql_res,"can not get number of views of a file"
" from logged users",
"SELECT COUNT(DISTINCT UsrCod)," // row[0]
"SUM(NumViews)" // row[1]
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod>0",
FileMetadata->FilCod))
if (Brw_DB_GetFileViewsFromLoggedUsrs (&mysql_res,FileMetadata->FilCod))
{
row = mysql_fetch_row (mysql_res);
@ -9242,21 +9157,6 @@ static void Brw_GetFileViewsFromLoggedUsrs (struct FileMetadata *FileMetadata)
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/******************** Get number of public views of a file *******************/
/*****************************************************************************/
static unsigned Brw_DB_GetFileViewsFromNonLoggedUsrs (long FilCod)
{
return
DB_QuerySELECTUnsigned ("can not get number of public views of a file",
"SELECT SUM(NumViews)"
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod<=0",
FilCod);
}
/*****************************************************************************/
/************************** Get file views from me ***************************/
/*****************************************************************************/
@ -9268,12 +9168,7 @@ static unsigned Brw_GetFileViewsFromMe (long FilCod)
unsigned NumMyViews;
/***** Get number of my views *****/
if (DB_QuerySELECT (&mysql_res,"can not get your number of views of a file",
"SELECT NumViews" // row[0]
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod=%ld",
FilCod,Gbl.Usrs.Me.UsrDat.UsrCod))
if (Brw_DB_GetFileViewsFromMe (&mysql_res,FilCod))
{
/* Get number of my views */
row = mysql_fetch_row (mysql_res);
@ -9289,91 +9184,6 @@ static unsigned Brw_GetFileViewsFromMe (long FilCod)
return NumMyViews;
}
/*****************************************************************************/
/*************************** Update file views *******************************/
/*****************************************************************************/
static void Brw_UpdateFileViews (unsigned NumViews,long FilCod)
{
if (NumViews)
/* Update number of views in database */
DB_QueryUPDATE ("can not update number of views of a file",
"UPDATE brw_views"
" SET NumViews=NumViews+1"
" WHERE FilCod=%ld"
" AND UsrCod=%ld",
FilCod,Gbl.Usrs.Me.UsrDat.UsrCod);
else // NumViews == 0
/* Insert number of views in database */
DB_QueryINSERT ("can not insert number of views of a file",
"INSERT INTO brw_views"
" (FilCod,UsrCod,NumViews)"
" VALUES"
" (%ld,%ld,1)",
FilCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
}
/*****************************************************************************/
/*********** Check if a folder contains file(s) marked as public *************/
/*****************************************************************************/
static bool Brw_GetIfFolderHasPublicFiles (const char Path[PATH_MAX + 1])
{
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
/***** Get if a file or folder is public from database *****/
return (DB_QueryCOUNT ("can not check if a folder contains public files",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path LIKE '%s/%%'"
" AND Public='Y'",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,ZoneUsrCod,
Path) != 0);
}
/*****************************************************************************/
/*********************** Get number of files from a user *********************/
/*****************************************************************************/
unsigned Brw_DB_GetNumFilesUsr (long UsrCod)
{
/***** Get current number of files published by a user from database *****/
return (unsigned)
DB_QueryCOUNT ("can not get number of files from a user",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE PublisherUsrCod=%ld"
" AND FileType IN (%u,%u)",
UsrCod,
(unsigned) Brw_IS_FILE,
(unsigned) Brw_IS_UNKNOWN); // Unknown entries are counted as files
}
/*****************************************************************************/
/******************* Get number of public files from a user ******************/
/*****************************************************************************/
unsigned Brw_DB_GetNumPublicFilesUsr (long UsrCod)
{
/***** Get current number of public files published by a user from database *****/
return (unsigned)
DB_QueryCOUNT ("can not get number of public files from a user",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE PublisherUsrCod=%ld"
" AND FileType IN (%u,%u)"
" AND Public='Y'",
UsrCod,
(unsigned) Brw_IS_FILE,
(unsigned) Brw_IS_UNKNOWN); // Unknown entries are counted as files
}
/*****************************************************************************/
/***************** Change hiddeness of file in the database ******************/
/*****************************************************************************/

View File

@ -211,15 +211,11 @@ void Brw_ShowFileMetadata (void);
void Brw_DownloadFile (void);
void Brw_GetLinkToDownloadFile (const char *PathInTree,const char *FileName,char *URL);
void Brw_ChgFileMetadata (void);
long Brw_GetFilCodByPath (const char *Path,bool OnlyIfPublic);
void Brw_GetFileMetadataByPath (struct FileMetadata *FileMetadata);
void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata);
bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata);
void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata);
void Brw_UpdateMyFileViews (long FilCod);
unsigned Brw_DB_GetNumFileViewsUsr (long UsrCod);
unsigned Brw_DB_GetNumFilesUsr (long UsrCod);
unsigned Brw_DB_GetNumPublicFilesUsr (long UsrCod);
long Brw_GetZoneUsrCodForFileBrowser (void);
void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,

View File

@ -166,36 +166,109 @@ static const Brw_FileBrowser_t Brw_FileBrowserForDB_expanded_folders[Brw_NUM_TYP
/*****************************************************************************/
/*****************************************************************************/
/*********************** Get folders of assignments **************************/
/*********************** Get file code using its path ************************/
/*****************************************************************************/
// Get folder of an assignment when:
// 1. The assignment is visible (not hidden)
// 2. ...and the folder name is not empty (the teacher has set that the user must send work(s) for that assignment)
// 3. ...the assignment is not restricted to groups or (if restricted to groups), the owner of zone belong to any of the groups
// Path is the full path in tree
// Example: descarga/folder/file.pdf
unsigned Brw_DB_GetFoldersAssignments (MYSQL_RES **mysql_res,long ZoneUsrCod)
long Brw_DB_GetFilCodByPath (const char *Path,bool OnlyIfPublic)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
return DB_QuerySELECTCode ("can not get file code",
"SELECT FilCod"
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path='%s'"
"%s",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
ZoneUsrCod,
Path,
OnlyIfPublic ? " AND Public='Y'" :
"");
}
/*****************************************************************************/
/********************* Get file metadata using its path **********************/
/*****************************************************************************/
// This function only gets metadata stored in table files,
// does not get size, time, numviews...
unsigned Brw_DB_GetFileMetadataByPath (MYSQL_RES **mysql_res,const char *Path)
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get file metadata",
"SELECT FilCod," // row[0]
"FileBrowser," // row[1]
"Cod," // row[2]
"ZoneUsrCod," // row[3]
"PublisherUsrCod," // row[4]
"FileType," // row[5]
"Path," // row[6]
"Hidden," // row[7]
"Public," // row[8]
"License" // row[9]
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path='%s'",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
ZoneUsrCod,
Path);
}
/*****************************************************************************/
/********************* Get file metadata using its code **********************/
/*****************************************************************************/
// FileMetadata.FilCod must be filled
// This function only gets metadata stored in table files,
// does not get size, time, numviews...
unsigned Brw_DB_GetFileMetadataByCod (MYSQL_RES **mysql_res,long FilCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get folders of assignments",
"SELECT Folder" // row[0]
" FROM asg_assignments"
" WHERE CrsCod=%ld"
" AND Hidden='N'"
" AND Folder<>''"
" AND ("
"AsgCod NOT IN"
" (SELECT AsgCod"
" FROM asg_groups)"
" OR "
"AsgCod IN"
" (SELECT asg_groups.AsgCod"
" FROM grp_users,"
"asg_groups"
" WHERE grp_users.UsrCod=%ld"
" AND asg_groups.GrpCod=grp_users.GrpCod)"
")",
Gbl.Hierarchy.Crs.CrsCod,
ZoneUsrCod);
DB_QuerySELECT (mysql_res,"can not get file metadata",
"SELECT FilCod," // row[0]
"FileBrowser," // row[1]
"Cod," // row[2]
"ZoneUsrCod," // row[3]
"PublisherUsrCod," // row[4]
"FileType," // row[5]
"Path," // row[6]
"Hidden," // row[7]
"Public," // row[8]
"License" // row[9]
" FROM brw_files"
" WHERE FilCod=%ld",
FilCod);
}
/*****************************************************************************/
/************ Get current number of files published by a user ****************/
/*****************************************************************************/
unsigned Brw_DB_GetNumFilesUsr (long UsrCod)
{
return (unsigned)
DB_QueryCOUNT ("can not get number of files from a user",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE PublisherUsrCod=%ld"
" AND FileType IN (%u,%u)",
UsrCod,
(unsigned) Brw_IS_FILE,
(unsigned) Brw_IS_UNKNOWN); // Unknown entries are counted as files
}
/*****************************************************************************/
@ -1015,6 +1088,195 @@ void Brw_DB_RemoveUsrFiles (long UsrCod)
UsrCod);
}
/*****************************************************************************/
/*********** Check if a folder contains file(s) marked as public *************/
/*****************************************************************************/
bool Brw_DB_GetIfFolderHasPublicFiles (const char Path[PATH_MAX + 1])
{
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
long Cod = Brw_GetCodForFileBrowser ();
long ZoneUsrCod = Brw_GetZoneUsrCodForFileBrowser ();
/***** Get if a file or folder is public from database *****/
return (DB_QueryCOUNT ("can not check if a folder contains public files",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE FileBrowser=%u"
" AND Cod=%ld"
" AND ZoneUsrCod=%ld"
" AND Path LIKE '%s/%%'"
" AND Public='Y'",
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
Cod,
ZoneUsrCod,
Path) != 0);
}
/*****************************************************************************/
/********** Get current number of public files published by a user ***********/
/*****************************************************************************/
unsigned Brw_DB_GetNumPublicFilesUsr (long UsrCod)
{
return (unsigned)
DB_QueryCOUNT ("can not get number of public files from a user",
"SELECT COUNT(*)"
" FROM brw_files"
" WHERE PublisherUsrCod=%ld"
" AND FileType IN (%u,%u)"
" AND Public='Y'",
UsrCod,
(unsigned) Brw_IS_FILE,
(unsigned) Brw_IS_UNKNOWN); // Unknown entries are counted as files
}
/*****************************************************************************/
/***************** Get number of OERs depending on license *******************/
/*****************************************************************************/
unsigned Brw_DB_GetNumberOfPublicFiles (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
}
}
/*****************************************************************************/
/*********************** Get folders of assignments **************************/
/*****************************************************************************/
// Get folder of an assignment when:
// 1. The assignment is visible (not hidden)
// 2. ...and the folder name is not empty (the teacher has set that the user must send work(s) for that assignment)
// 3. ...the assignment is not restricted to groups or (if restricted to groups), the owner of zone belong to any of the groups
unsigned Brw_DB_GetFoldersAssignments (MYSQL_RES **mysql_res,long ZoneUsrCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get folders of assignments",
"SELECT Folder" // row[0]
" FROM asg_assignments"
" WHERE CrsCod=%ld"
" AND Hidden='N'"
" AND Folder<>''"
" AND ("
"AsgCod NOT IN"
" (SELECT AsgCod"
" FROM asg_groups)"
" OR "
"AsgCod IN"
" (SELECT asg_groups.AsgCod"
" FROM grp_users,"
"asg_groups"
" WHERE grp_users.UsrCod=%ld"
" AND asg_groups.GrpCod=grp_users.GrpCod)"
")",
Gbl.Hierarchy.Crs.CrsCod,
ZoneUsrCod);
}
/*****************************************************************************/
/************ Update the date of my last access to file browser **************/
/*****************************************************************************/
@ -1072,6 +1334,94 @@ unsigned Brw_DB_GetGrpLastAccFileBrowser (MYSQL_RES **mysql_res,const char *Fiel
Gbl.Hierarchy.Crs.CrsCod);
}
/*****************************************************************************/
/*************************** Update file views *******************************/
/*****************************************************************************/
void Brw_DB_UpdateFileViews (unsigned NumViews,long FilCod)
{
if (NumViews)
/* Update number of views in database */
DB_QueryUPDATE ("can not update number of views of a file",
"UPDATE brw_views"
" SET NumViews=NumViews+1"
" WHERE FilCod=%ld"
" AND UsrCod=%ld",
FilCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
else // NumViews == 0
/* Insert number of views in database */
DB_QueryINSERT ("can not insert number of views of a file",
"INSERT INTO brw_views"
" (FilCod,UsrCod,NumViews)"
" VALUES"
" (%ld,%ld,1)",
FilCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
}
/*****************************************************************************/
/************************** Get file views from me ***************************/
/*****************************************************************************/
unsigned Brw_DB_GetFileViewsFromMe (MYSQL_RES **mysql_res,long FilCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get your number of views of a file",
"SELECT NumViews" // row[0]
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod=%ld",
FilCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
}
/*****************************************************************************/
/******************** Get file views from logged users ***********************/
/*****************************************************************************/
unsigned Brw_DB_GetFileViewsFromLoggedUsrs (MYSQL_RES **mysql_res,long FilCod)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get number of views of a file"
" from logged users",
"SELECT COUNT(DISTINCT UsrCod)," // row[0]
"SUM(NumViews)" // row[1]
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod>0",
FilCod);
}
/*****************************************************************************/
/******************** Get number of public views of a file *******************/
/*****************************************************************************/
unsigned Brw_DB_GetFileViewsFromNonLoggedUsrs (long FilCod)
{
return
DB_QuerySELECTUnsigned ("can not get number of public views of a file",
"SELECT SUM(NumViews)"
" FROM brw_views"
" WHERE FilCod=%ld"
" AND UsrCod<=0",
FilCod);
}
/*****************************************************************************/
/******************** Get number of file views from a user *******************/
/*****************************************************************************/
unsigned Brw_DB_GetNumFileViewsUsr (long UsrCod)
{
return
DB_QuerySELECTUnsigned ("can not get number of file views",
"SELECT SUM(NumViews)"
" FROM brw_views"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/
/************** Check if a file / folder from is set as hidden ***************/
/*****************************************************************************/
@ -2540,116 +2890,3 @@ void Brw_DB_GetSizeOfFileBrowser (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
}
}

View File

@ -47,10 +47,11 @@
/***************************** Public prototypes *****************************/
/*****************************************************************************/
//------------------------------- Assignments ---------------------------------
unsigned Brw_DB_GetFoldersAssignments (MYSQL_RES **mysql_res,long ZoneUsrCod);
//---------------------------------- Files ------------------------------------
long Brw_DB_GetFilCodByPath (const char *Path,bool OnlyIfPublic);
unsigned Brw_DB_GetFileMetadataByPath (MYSQL_RES **mysql_res,const char *Path);
unsigned Brw_DB_GetFileMetadataByCod (MYSQL_RES **mysql_res,long FilCod);
unsigned Brw_DB_GetNumFilesUsr (long UsrCod);
void Brw_DB_RemoveInsFiles (long InsCod);
void Brw_DB_RemoveCtrFiles (long CtrCod);
void Brw_DB_RemoveDegFiles (long DegCod);
@ -61,11 +62,26 @@ void Brw_DB_RemoveSomeInfoAboutCrsUsrFiles (long UsrCod,long CrsCod);
void Brw_DB_RemoveWrkFiles (long CrsCod,long UsrCod);
void Brw_DB_RemoveUsrFiles (long UsrCod);
//------------------------------ Public files ---------------------------------
bool Brw_DB_GetIfFolderHasPublicFiles (const char Path[PATH_MAX + 1]);
unsigned Brw_DB_GetNumPublicFilesUsr (long UsrCod);
unsigned Brw_DB_GetNumberOfPublicFiles (MYSQL_RES **mysql_res,Brw_License_t License);
//------------------------------- Assignments ---------------------------------
unsigned Brw_DB_GetFoldersAssignments (MYSQL_RES **mysql_res,long ZoneUsrCod);
//--------------------- My last access to file browsers -----------------------
void Brw_DB_UpdateDateMyLastAccFileBrowser (void);
unsigned Brw_DB_GetDateMyLastAccFileBrowser (MYSQL_RES **mysql_res);
unsigned Brw_DB_GetGrpLastAccFileBrowser (MYSQL_RES **mysql_res,const char *FieldNameDB);
//-------------------------------- File views ---------------------------------
void Brw_DB_UpdateFileViews (unsigned NumViews,long FilCod);
unsigned Brw_DB_GetFileViewsFromMe (MYSQL_RES **mysql_res,long FilCod);
unsigned Brw_DB_GetFileViewsFromLoggedUsrs (MYSQL_RES **mysql_res,long FilCod);
unsigned Brw_DB_GetFileViewsFromNonLoggedUsrs (long FilCod);
unsigned Brw_DB_GetNumFileViewsUsr (long UsrCod);
//------------------------------- Hidden files --------------------------------
unsigned Brw_DB_CheckIfFileOrFolderIsSetAsHiddenUsingPath (MYSQL_RES **mysql_res,
const char *Path);
@ -94,7 +110,4 @@ void Brw_DB_StoreSizeOfFileZone (void);
void Brw_DB_GetSizeOfFileBrowser (MYSQL_RES **mysql_res,
Brw_FileBrowser_t FileBrowser);
//-------------------- OERs (Open Educational Resources) ----------------------
unsigned Brw_DB_GetNumberOfOERs (MYSQL_RES **mysql_res,Brw_License_t License);
#endif

View File

@ -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.2.1 (2021-09-14)"
#define Log_PLATFORM_VERSION "SWAD 21.2.2 (2021-09-14)"
#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.2.2: Sep 14, 2021 Queries moved to module swad_browser_database. (315051 lines)
Version 21.2.1: Sep 14, 2021 Queries moved to module swad_browser_database. (315003 lines)
Version 21.2: Sep 14, 2021 Code refactoring related to file browsers. (314983 lines)
Version 21.1.1: Sep 14, 2021 Queries moved to module swad_enrolment_database. (315050 lines)

View File

@ -1767,7 +1767,7 @@ static void Fig_GetNumberOfOERs (Brw_License_t License,
/***** Get the size of a file browser *****/
/* Query database */
NumRows = Brw_DB_GetNumberOfOERs (&mysql_res,License);
NumRows = Brw_DB_GetNumberOfPublicFiles (&mysql_res,License);
/* Reset values to zero */
NumFiles[0] = NumFiles[1] = 0L;

View File

@ -1064,7 +1064,7 @@ void Ntf_MarkNotifOneFileAsRemoved (const char *Path)
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
/***** Get file code *****/
FilCod = Brw_GetFilCodByPath (Path,false); // Any file, public or not
FilCod = Brw_DB_GetFilCodByPath (Path,false); // Any file, public or not
if (FilCod > 0)
{
/***** Set notification as removed *****/

View File

@ -32,6 +32,7 @@
#include <string.h> // For string functions
#include "swad_box.h"
#include "swad_browser_database.h"
#include "swad_config.h"
#include "swad_database.h"
#include "swad_error.h"

View File

@ -953,7 +953,7 @@ void Tml_Not_MarkNoteOneFileAsUnavailable (const char *Path)
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_SHR_CRS:
/***** Get file code *****/
FilCod = Brw_GetFilCodByPath (Path,true); // Only if file is public
FilCod = Brw_DB_GetFilCodByPath (Path,true); // Only if file is public
if (FilCod > 0)
{
/***** Mark possible note as unavailable *****/

View File

@ -514,7 +514,7 @@ static unsigned long long ZIP_CloneDir (const char *Path,const char *PathClone,c
Err_ShowErrorAndExit ("Can not create temporary link for compression.");
/***** Update number of my views of this file *****/
Brw_UpdateMyFileViews (Brw_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not
Brw_UpdateMyFileViews (Brw_DB_GetFilCodByPath (PathFileInTree,false)); // Any file, public or not
}
}
}