From b67123091aec9187f6bf5e220ef03e5184bb1f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 20 Jan 2015 18:55:59 +0100 Subject: [PATCH] Version 14.62 --- sql/swad.sql | 6 + swad_account.c | 2 +- swad_centre.c | 3 + swad_changelog.h | 7 +- swad_course.c | 2 +- swad_database.c | 32 ++-- swad_degree.c | 3 + swad_file_browser.c | 375 ++++++++++++++++++++++++++++++++------------ swad_file_browser.h | 2 +- swad_institution.c | 3 + 10 files changed, 316 insertions(+), 119 deletions(-) diff --git a/sql/swad.sql b/sql/swad.sql index afcd6715..41de1b2a 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -459,12 +459,18 @@ CREATE TABLE IF NOT EXISTS exam_announcements ( CREATE TABLE IF NOT EXISTS expanded_folders ( UsrCod INT NOT NULL, FileBrowser TINYINT NOT NULL, + InsCod INT NOT NULL DEFAULT -1, + CtrCod INT NOT NULL DEFAULT -1, + DegCod INT NOT NULL DEFAULT -1, CrsCod INT NOT NULL DEFAULT -1, GrpCod INT NOT NULL, WorksUsrCod INT NOT NULL, Path TEXT COLLATE latin1_bin NOT NULL, ClickTime DATETIME NOT NULL, INDEX(UsrCod,FileBrowser), + INDEX(InsCod), + INDEX(CtrCod), + INDEX(DegCod), INDEX(CrsCod)); -- -- Table file_browser_size: stores the sizes of the file zones diff --git a/swad_account.c b/swad_account.c index 091f3c78..e87d437b 100644 --- a/swad_account.c +++ b/swad_account.c @@ -775,7 +775,7 @@ static void Acc_RemoveUsrBriefcase (struct UsrData *UsrDat) Brw_RemoveTree (PathRelUsr); /***** Remove files in the course from database *****/ - Brw_RemoveFilesFromDB (-1L,-1L,UsrDat->UsrCod); + Brw_RemoveFilesFromDB (-1L,-1L,-1L,-1L,-1L,UsrDat->UsrCod); /***** Remove size of the briefcase of the user from database *****/ Brw_RemoveSizeOfFileTreeFromDB (-1L,-1L,UsrDat->UsrCod); diff --git a/swad_centre.c b/swad_centre.c index eaac46bb..6677b2f9 100644 --- a/swad_centre.c +++ b/swad_centre.c @@ -1429,6 +1429,9 @@ void Ctr_RemoveCentre (void) Ctr.CtrCod); DB_QueryDELETE (Query,"can not remove clipboards in a centre"); + /* Remove files in the centre from database */ + Brw_RemoveFilesFromDB (-1L,Ctr.CtrCod,-1L,-1L,-1L,-1L); + /***** Remove centre *****/ sprintf (Query,"DELETE FROM centres WHERE CtrCod='%ld'", Ctr.CtrCod); diff --git a/swad_changelog.h b/swad_changelog.h index 5469a65a..fa12eee0 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -44,7 +44,12 @@ // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h | tail -1 /* -TODO: adapt table file_view !!!!! + Version 14.62: Jan 20, 2015 See/admin documents of degree, centre and institution (not finished). (175296 lines) + 3 changes necessary in database: +ALTER TABLE expanded_folders ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (InsCod); +ALTER TABLE expanded_folders ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod, ADD INDEX (CtrCod); +ALTER TABLE expanded_folders ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod, ADD INDEX (DegCod); + Version 14.61: Jan 20, 2015 See/admin documents of degree, centre and institution (not finished). (175112 lines) 6 changes necessary in database: ALTER TABLE files ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FilCod; diff --git a/swad_course.c b/swad_course.c index 3c20ed62..7723d083 100644 --- a/swad_course.c +++ b/swad_course.c @@ -2444,7 +2444,7 @@ static void Crs_EmptyCourseCompletely (long CrsCod) DB_QueryDELETE (Query,"can not remove the properties of marks associated to a course"); /* Remove files in the course from database */ - Brw_RemoveFilesFromDB (CrsCod,-1L,-1L); + Brw_RemoveFilesFromDB (-1L,-1L,-1L,CrsCod,-1L,-1L); /* Remove size of file zones in the course from database */ Brw_RemoveSizeOfFileTreeFromDB (CrsCod,-1L,-1L); diff --git a/swad_database.c b/swad_database.c index 39fd1b78..a9a4006c 100644 --- a/swad_database.c +++ b/swad_database.c @@ -969,28 +969,34 @@ mysql> DESCRIBE exam_announcements; /***** Table expanded_folders *****/ /* mysql> DESCRIBE expanded_folders; -+-------------+------------+------+-----+---------------------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+------------+------+-----+---------------------+-------+ -| UsrCod | int(11) | NO | MUL | NULL | | -| FileBrowser | tinyint(4) | NO | | NULL | | -| CrsCod | int(11) | NO | MUL | -1 | | -| GrpCod | int(11) | NO | | 0 | | -| WorksUsrCod | int(11) | NO | | NULL | | -| Path | text | NO | | NULL | | -| ClickTime | datetime | NO | | 0000-00-00 00:00:00 | | -+-------------+------------+------+-----+---------------------+-------+ -7 rows in set (0.00 sec) ++-------------+------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-------------+------------+------+-----+---------+-------+ +| UsrCod | int(11) | NO | MUL | NULL | | +| FileBrowser | tinyint(4) | NO | | NULL | | +| InsCod | int(11) | NO | MUL | -1 | | +| CtrCod | int(11) | NO | MUL | -1 | | +| DegCod | int(11) | NO | MUL | -1 | | +| CrsCod | int(11) | NO | MUL | -1 | | +| GrpCod | int(11) | NO | | NULL | | +| WorksUsrCod | int(11) | NO | | NULL | | +| Path | text | NO | | NULL | | +| ClickTime | datetime | NO | | NULL | | ++-------------+------------+------+-----+---------+-------+ +10 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS expanded_folders (" "UsrCod INT NOT NULL," "FileBrowser TINYINT NOT NULL," + "InsCod INT NOT NULL DEFAULT -1," + "CtrCod INT NOT NULL DEFAULT -1," + "DegCod INT NOT NULL DEFAULT -1," "CrsCod INT NOT NULL DEFAULT -1," "GrpCod INT NOT NULL," "WorksUsrCod INT NOT NULL," "Path TEXT COLLATE latin1_bin NOT NULL," "ClickTime DATETIME NOT NULL," - "INDEX(UsrCod,FileBrowser),INDEX(CrsCod))"); + "INDEX(UsrCod,FileBrowser),INDEX(InsCod),INDEX(CtrCod),INDEX(DegCod),INDEX(CrsCod))"); /***** Table file_browser_size *****/ /* diff --git a/swad_degree.c b/swad_degree.c index 01a1aaac..e366f1cd 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -3188,6 +3188,9 @@ static void Deg_RemoveDegreeCompletely (long DegCod) DegCod); DB_QueryDELETE (Query,"can not remove clipboards in a degree"); + /* Remove files in the degree from database */ + Brw_RemoveFilesFromDB (-1L,-1L,DegCod,-1L,-1L,-1L); + /***** Remove administrators of this degree *****/ sprintf (Query,"DELETE FROM deg_admin WHERE DegCod='%ld'", DegCod); diff --git a/swad_file_browser.c b/swad_file_browser.c index 88e5ee61..88061ac9 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -72,6 +72,16 @@ typedef enum Brw_ADMIN, } Brw_ShowOrAdmin_t; +struct Brw_Codes + { + long InsCod; + long CtrCod; + long DegCod; + long CrsCod; + long GrpCod; + long WorksUsrCod; + }; + /*****************************************************************************/ /**************************** Internal constants *****************************/ /*****************************************************************************/ @@ -1228,6 +1238,7 @@ static inline void Brw_GetAndWriteClipboard (void); static void Brw_WriteCurrentClipboard (void); static bool Brw_GetMyClipboard (void); static bool Brw_CheckIfClipboardIsInThisTree (void); +static void Brw_SetCodes (struct Brw_Codes *Codes); static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path); static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path); static void Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (const char *Path); @@ -3486,13 +3497,40 @@ void Brw_RemoveSizeOfFileTreeFromDB (long CrsCod,long GrpCod,long UsrCod) /**************** Remove a file or folder from the database ******************/ /*****************************************************************************/ -void Brw_RemoveFilesFromDB (long CrsCod,long GrpCod,long UsrCod) +void Brw_RemoveFilesFromDB (long InsCod,long CtrCod,long DegCod,long CrsCod,long GrpCod,long UsrCod) { char Query1[512]; char Query2[512]; /***** Remove size of the file browser from database *****/ - if (CrsCod > 0 && GrpCod <= 0 && UsrCod <= 0) // All the zones of the course + if (InsCod > 0) // Documents of the institution + { + sprintf (Query1,"DELETE FROM file_view USING file_view,files" + " WHERE files.InsCod='%ld'" + " AND files.FilCod=file_view.FilCod", + InsCod); + sprintf (Query2,"DELETE FROM files WHERE InsCod='%ld'", + InsCod); + } + else if (CtrCod > 0) // Documents of the centre + { + sprintf (Query1,"DELETE FROM file_view USING file_view,files" + " WHERE files.CtrCod='%ld'" + " AND files.FilCod=file_view.FilCod", + CtrCod); + sprintf (Query2,"DELETE FROM files WHERE CtrCod='%ld'", + DegCod); + } + else if (DegCod > 0) // Documents of the degree + { + sprintf (Query1,"DELETE FROM file_view USING file_view,files" + " WHERE files.DegCod='%ld'" + " AND files.FilCod=file_view.FilCod", + DegCod); + sprintf (Query2,"DELETE FROM files WHERE DegCod='%ld'", + DegCod); + } + else if (CrsCod > 0 && GrpCod <= 0 && UsrCod <= 0) // All the zones of the course { sprintf (Query1,"DELETE FROM file_view USING file_view,files" " WHERE files.CrsCod='%ld'" @@ -5831,6 +5869,51 @@ static bool Brw_CheckIfClipboardIsInThisTree (void) return IsThisTree; } +/*****************************************************************************/ +/************* Set ins/ctr/deg/crs/grp code and works user code **************/ +/*****************************************************************************/ + +static void Brw_SetCodes (struct Brw_Codes *Codes) + { + /***** Set default codes *****/ + Codes->InsCod = -1L; + Codes->CtrCod = -1L; + Codes->DegCod = -1L; + Codes->CrsCod = -1L; + Codes->GrpCod = -1L; + Codes->WorksUsrCod = -1L; + + switch (Gbl.FileBrowser.Type) + { + case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS: + Codes->InsCod = Gbl.CurrentIns.Ins.InsCod; + break; + case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR: + Codes->CtrCod = Gbl.CurrentCtr.Ctr.CtrCod; + break; + case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG: + Codes->DegCod = Gbl.CurrentDeg.Deg.DegCod; + break; + case Brw_FILE_BRW_ASSIGNMENTS_CRS: + case Brw_FILE_BRW_WORKS_CRS: + Codes->WorksUsrCod = Gbl.Usrs.Other.UsrDat.UsrCod; + /* no break */ + case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS: + case Brw_FILE_BRW_COMMON_CRS: + case Brw_FILE_BRW_ADMIN_MARKS_CRS: + Codes->CrsCod = Gbl.CurrentCrs.Crs.CrsCod; + break; + case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: + case Brw_FILE_BRW_COMMON_GRP: + case Brw_FILE_BRW_ADMIN_MARKS_GRP: + Codes->CrsCod = Gbl.CurrentCrs.Crs.CrsCod; + Codes->GrpCod = Gbl.CurrentCrs.Grps.GrpCod; + break; + default: + break; + } + } + /*****************************************************************************/ /***************************** Add path to clipboards ************************/ /*****************************************************************************/ @@ -5838,51 +5921,24 @@ static bool Brw_CheckIfClipboardIsInThisTree (void) static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path) { char Query[512+PATH_MAX]; - long InsCod = -1L; - long CtrCod = -1L; - long DegCod = -1L; - long CrsCod = -1L; - long GrpCod = -1L; - long WorksUsrCod = -1L; - - switch (Gbl.FileBrowser.Type) - { - case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS: - InsCod = Gbl.CurrentIns.Ins.InsCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR: - CtrCod = Gbl.CurrentCtr.Ctr.CtrCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG: - DegCod = Gbl.CurrentDeg.Deg.DegCod; - break; - case Brw_FILE_BRW_ASSIGNMENTS_CRS: - case Brw_FILE_BRW_WORKS_CRS: - WorksUsrCod = Gbl.Usrs.Other.UsrDat.UsrCod; - /* no break */ - case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS: - case Brw_FILE_BRW_COMMON_CRS: - case Brw_FILE_BRW_ADMIN_MARKS_CRS: - CrsCod = Gbl.CurrentCrs.Crs.CrsCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: - case Brw_FILE_BRW_COMMON_GRP: - case Brw_FILE_BRW_ADMIN_MARKS_GRP: - CrsCod = Gbl.CurrentCrs.Crs.CrsCod; - GrpCod = Gbl.CurrentCrs.Grps.GrpCod; - break; - default: - break; - } + struct Brw_Codes Codes; /***** Add path to clipboards *****/ - sprintf (Query,"INSERT INTO clipboard (UsrCod,FileBrowser,InsCod,CtrCod,DegCod," - "CrsCod,GrpCod,WorksUsrCod,FileType,Path)" - " VALUES ('%ld','%u','%ld','%ld','%ld'," - "'%ld','%ld','%ld','%u','%s')", + Brw_SetCodes (&Codes); + sprintf (Query,"INSERT INTO clipboard (UsrCod,FileBrowser," + "InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod," + "FileType,Path)" + " VALUES ('%ld','%u'," + "'%ld','%ld','%ld','%ld','%ld','%ld'," + "'%u','%s')", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Gbl.FileBrowser.Type, - InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod, + Codes.InsCod, + Codes.CtrCod, + Codes.DegCod, + Codes.CrsCod, + Codes.GrpCod, + Codes.WorksUsrCod, (unsigned) FileType, Path); DB_QueryINSERT (Query,"can not add source of copy to clipboard"); @@ -5895,50 +5951,22 @@ static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path) static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path) { char Query[512+PATH_MAX]; - long InsCod = -1L; - long CtrCod = -1L; - long DegCod = -1L; - long CrsCod = -1L; - long GrpCod = -1L; - long WorksUsrCod = -1L; - - switch (Gbl.FileBrowser.Type) - { - case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS: - InsCod = Gbl.CurrentIns.Ins.InsCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR: - CtrCod = Gbl.CurrentCtr.Ctr.CtrCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG: - DegCod = Gbl.CurrentDeg.Deg.DegCod; - break; - case Brw_FILE_BRW_ASSIGNMENTS_CRS: - case Brw_FILE_BRW_WORKS_CRS: - WorksUsrCod = Gbl.Usrs.Other.UsrDat.UsrCod; - /* no break */ - case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS: - case Brw_FILE_BRW_COMMON_CRS: - case Brw_FILE_BRW_ADMIN_MARKS_CRS: - CrsCod = Gbl.CurrentCrs.Crs.CrsCod; - break; - case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: - case Brw_FILE_BRW_COMMON_GRP: - case Brw_FILE_BRW_ADMIN_MARKS_GRP: - CrsCod = Gbl.CurrentCrs.Crs.CrsCod; - GrpCod = Gbl.CurrentCrs.Grps.GrpCod; - break; - default: - break; - } + struct Brw_Codes Codes; /***** Update path in my clipboard *****/ - sprintf (Query,"UPDATE clipboard" - " SET FileBrowser='%u',InsCod='%ld',CtrCod='%ld',DegCod='%ld'," - "CrsCod='%ld',GrpCod='%ld',WorksUsrCod='%ld',FileType='%u',Path='%s'" + Brw_SetCodes (&Codes); + sprintf (Query,"UPDATE clipboard SET FileBrowser='%u'," + "InsCod='%ld',CtrCod='%ld',DegCod='%ld'," + "CrsCod='%ld',GrpCod='%ld',WorksUsrCod='%ld'," + "FileType='%u',Path='%s'" " WHERE UsrCod='%ld'", (unsigned) Gbl.FileBrowser.Type, - InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod, + Codes.InsCod, + Codes.CtrCod, + Codes.DegCod, + Codes.CrsCod, + Codes.GrpCod, + Codes.WorksUsrCod, (unsigned) FileType, Path, Gbl.Usrs.Me.UsrDat.UsrCod); @@ -6006,25 +6034,23 @@ static void Brw_RemThisFolderAndUpdOtherFoldersFromExpandedFolders (const char * static void Brw_InsertFolderInExpandedFolders (const char *Path) { char Query[512+PATH_MAX]; + struct Brw_Codes Codes; /***** Add path to expanded folders *****/ + Brw_SetCodes (&Codes); + // Path must be stored with final '/' sprintf (Query,"INSERT INTO expanded_folders (UsrCod,FileBrowser," - "CrsCod,GrpCod,WorksUsrCod,Path,ClickTime)" - " VALUES ('%ld','%u','%ld','%ld','%ld','%s/',NOW())", + "InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,Path,ClickTime)" + " VALUES ('%ld','%u','%ld','%ld','%ld','%ld','%ld','%ld','%s/',NOW())", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Brw_FileBrowserForExpandedFolders[Gbl.FileBrowser.Type], - (Gbl.FileBrowser.Type == Brw_FILE_BRW_BRIEFCASE_USR) ? -1L : - Gbl.CurrentCrs.Crs.CrsCod, - (Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_GRP || - Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP || - Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_GRP || - Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_MARKS_GRP || - Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_MARKS_GRP) ? Gbl.CurrentCrs.Grps.GrpCod : - -1L, - (Gbl.FileBrowser.Type == Brw_FILE_BRW_ASSIGNMENTS_CRS || - Gbl.FileBrowser.Type == Brw_FILE_BRW_WORKS_CRS) ? Gbl.Usrs.Other.UsrDat.UsrCod : - -1L, + Codes.InsCod, + Codes.CtrCod, + Codes.DegCod, + Codes.CrsCod, + Codes.GrpCod, + Codes.WorksUsrCod, Path); DB_QueryINSERT (Query,"can not expand the content of a folder"); } @@ -6041,6 +6067,30 @@ static void Brw_UpdateClickTimeOfThisFileBrowserInExpandedFolders (void) /***** Update path in table of expanded folders *****/ switch (FileBrowserForExpandedFolders) { + case Brw_FILE_BRW_SEE_DOCUMENTS_INS: + sprintf (Query,"UPDATE expanded_folders SET ClickTime=NOW()" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND InsCod='%ld'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentIns.Ins.InsCod); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: + sprintf (Query,"UPDATE expanded_folders SET ClickTime=NOW()" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND CtrCod='%ld'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentCtr.Ctr.CtrCod); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: + sprintf (Query,"UPDATE expanded_folders SET ClickTime=NOW()" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND DegCod='%ld'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentDeg.Deg.DegCod); + break; case Brw_FILE_BRW_SEE_DOCUMENTS_CRS: case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_SEE_MARKS_CRS: @@ -6098,6 +6148,30 @@ static void Brw_RemoveFolderFromExpandedFolders (const char *Path) /***** Remove expanded folders associated to a file browser from a course or from a user *****/ switch (FileBrowserForExpandedFolders) { + case Brw_FILE_BRW_SEE_DOCUMENTS_INS: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND InsCod='%ld' AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentIns.Ins.InsCod,Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND CtrCod='%ld' AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentCtr.Ctr.CtrCod,Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND DegCod='%ld' AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentDeg.Deg.DegCod,Path); + break; case Brw_FILE_BRW_SEE_DOCUMENTS_CRS: case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_SEE_MARKS_CRS: @@ -6314,6 +6388,27 @@ static void Brw_RemoveAffectedExpandedFolders (const char *Path) /***** Remove expanded folders associated to a file browser from a course or from a user *****/ switch (FileBrowserForExpandedFolders) { + case Brw_FILE_BRW_SEE_DOCUMENTS_INS: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE FileBrowser='%u'" + " AND InsCod='%ld' AND Path LIKE '%s/%%'", + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentIns.Ins.InsCod,Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE FileBrowser='%u'" + " AND CtrCod='%ld' AND Path LIKE '%s/%%'", + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentCtr.Ctr.CtrCod,Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: + sprintf (Query,"DELETE FROM expanded_folders" + " WHERE FileBrowser='%u'" + " AND DegCod='%ld' AND Path LIKE '%s/%%'", + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentDeg.Deg.DegCod,Path); + break; case Brw_FILE_BRW_SEE_DOCUMENTS_CRS: case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_SEE_MARKS_CRS: @@ -6376,6 +6471,30 @@ static void Brw_RenameAffectedExpandedFolders (Brw_FileBrowser_t FileBrowser,lon /***** Update expanded folders associated to a file browser from a course or from a user *****/ switch (FileBrowserForExpandedFolders) { + case Brw_FILE_BRW_SEE_DOCUMENTS_INS: + sprintf (Query,"UPDATE expanded_folders SET Path=CONCAT('%s','/',SUBSTRING(Path,%u))" + " WHERE FileBrowser='%u'" + " AND InsCod='%ld' AND Path LIKE '%s/%%'", + NewPath,StartFinalSubpathNotChanged, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentIns.Ins.InsCod,OldPath); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: + sprintf (Query,"UPDATE expanded_folders SET Path=CONCAT('%s','/',SUBSTRING(Path,%u))" + " WHERE FileBrowser='%u'" + " AND CtrCod='%ld' AND Path LIKE '%s/%%'", + NewPath,StartFinalSubpathNotChanged, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentCtr.Ctr.CtrCod,OldPath); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: + sprintf (Query,"UPDATE expanded_folders SET Path=CONCAT('%s','/',SUBSTRING(Path,%u))" + " WHERE FileBrowser='%u'" + " AND DegCod='%ld' AND Path LIKE '%s/%%'", + NewPath,StartFinalSubpathNotChanged, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentDeg.Deg.DegCod,OldPath); + break; case Brw_FILE_BRW_SEE_DOCUMENTS_CRS: case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_SEE_MARKS_CRS: @@ -9421,6 +9540,36 @@ static bool Brw_GetIfExpandedTree (const char *Path) /***** Get if a folder is expanded from database *****/ switch (FileBrowserForExpandedFolders) { + case Brw_FILE_BRW_SEE_DOCUMENTS_INS: + sprintf (Query,"SELECT COUNT(*) FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND InsCod='%ld'" + " AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentIns.Ins.InsCod, + Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: + sprintf (Query,"SELECT COUNT(*) FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND CtrCod='%ld'" + " AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentCtr.Ctr.CtrCod, + Path); + break; + case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: + sprintf (Query,"SELECT COUNT(*) FROM expanded_folders" + " WHERE UsrCod='%ld' AND FileBrowser='%u'" + " AND DegCod='%ld'" + " AND Path='%s/'", + Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) FileBrowserForExpandedFolders, + Gbl.CurrentDeg.Deg.DegCod, + Path); + break; case Brw_FILE_BRW_SEE_DOCUMENTS_CRS: case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_SEE_MARKS_CRS: @@ -9484,10 +9633,14 @@ static void Brw_ChangeFileOrFolderHiddenInDB (const char *Path,bool IsHidden) /***** Mark file as hidden in database *****/ sprintf (Query,"UPDATE files SET Hidden='%c'" - " WHERE CrsCod='%ld' AND GrpCod='%ld' AND ZoneUsrCod='%ld'" + " WHERE InsCod='%ld' AND CtrCod='%ld' AND DegCod='%ld'" + " AND CrsCod='%ld' AND GrpCod='%ld' AND ZoneUsrCod='%ld'" " AND FileBrowser='%u' AND Path='%s'", IsHidden ? 'Y' : 'N', + Brw_GetInsCod (), + Brw_GetCtrCod (), + Brw_GetDegCod (), Brw_GetCrsCod (), Brw_GetGrpCod (), Brw_GetZoneUsrCod (), @@ -9507,12 +9660,16 @@ static void Brw_ChangeFilePublicInDB (long PublisherUsrCod,const char *Path, /***** Change publisher, public and license of file in database *****/ sprintf (Query,"UPDATE files SET PublisherUsrCod='%ld',Public='%c',License='%u'" - " WHERE CrsCod='%ld' AND GrpCod='%ld' AND ZoneUsrCod='%ld'" + " WHERE InsCod='%ld' AND CtrCod='%ld' AND DegCod='%ld'" + " AND CrsCod='%ld' AND GrpCod='%ld' AND ZoneUsrCod='%ld'" " AND FileBrowser='%u' AND Path='%s'", PublisherUsrCod, IsPublic ? 'Y' : 'N', (unsigned) License, + Brw_GetInsCod (), + Brw_GetCtrCod (), + Brw_GetDegCod (), Brw_GetCrsCod (), Brw_GetGrpCod (), Brw_GetZoneUsrCod (), @@ -9628,6 +9785,9 @@ long Brw_AddPathToDB (long PublisherUsrCod,Brw_FileType_t FileType, static void Brw_RemoveOneFileOrFolderFromDB (const char *Path) { char Query[512+PATH_MAX]; + long InsCod = Brw_GetInsCod (); + long CtrCod = Brw_GetCtrCod (); + long DegCod = Brw_GetDegCod (); long CrsCod = Brw_GetCrsCod (); long GrpCod = Brw_GetGrpCod (); long ZoneUsrCod = Brw_GetZoneUsrCod (); @@ -9653,9 +9813,13 @@ static void Brw_RemoveOneFileOrFolderFromDB (const char *Path) /***** Remove from database the entries that store the file views *****/ sprintf (Query,"DELETE FROM file_view USING file_view,files" - " WHERE files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.ZoneUsrCod='%ld'" + " WHERE files.InsCod='%ld' AND files.CtrCod='%ld' AND files.DegCod='%ld'" + " AND files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.ZoneUsrCod='%ld'" " AND files.FileBrowser='%u' AND files.Path='%s'" " AND files.FilCod=file_view.FilCod", + InsCod, + CtrCod, + DegCod, CrsCod, GrpCod, ZoneUsrCod, @@ -9680,6 +9844,9 @@ static void Brw_RemoveOneFileOrFolderFromDB (const char *Path) static void Brw_RemoveChildrenOfFolderFromDB (const char *Path) { char Query[512+PATH_MAX]; + long InsCod = Brw_GetInsCod (); + long CtrCod = Brw_GetCtrCod (); + long DegCod = Brw_GetDegCod (); long CrsCod = Brw_GetCrsCod (); long GrpCod = Brw_GetGrpCod (); long ZoneUsrCod = Brw_GetZoneUsrCod (); @@ -9705,9 +9872,13 @@ static void Brw_RemoveChildrenOfFolderFromDB (const char *Path) /***** Remove from database the entries that store the file views *****/ sprintf (Query,"DELETE FROM file_view USING file_view,files" - " WHERE files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.ZoneUsrCod='%ld'" + " WHERE files.InsCod='%ld' AND files.CtrCod='%ld' AND files.DegCod='%ld'" + " AND files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.ZoneUsrCod='%ld'" " AND files.FileBrowser='%u' AND files.Path LIKE '%s/%%'" " AND files.FilCod=file_view.FilCod", + InsCod, + CtrCod, + DegCod, CrsCod, GrpCod, ZoneUsrCod, @@ -9948,7 +10119,7 @@ void Brw_RemoveGrpZones (long CrsCod,long GrpCod) Ntf_SetNotifFilesInGroupAsRemoved (CrsCod,GrpCod); /***** Remove files in the course from database *****/ - Brw_RemoveFilesFromDB (CrsCod,GrpCod,-1L); + Brw_RemoveFilesFromDB (-1L,-1L,-1L,CrsCod,GrpCod,-1L); /***** Remove size of file zones in the group from database *****/ Brw_RemoveSizeOfFileTreeFromDB (CrsCod,GrpCod,-1L); @@ -9974,7 +10145,7 @@ void Brw_RemoveUsrWorksInCrs (struct UsrData *UsrDat,struct Course *Crs,Cns_Quie // If this was the last user in his/her subfolder ==> the subfolder will be empty /***** Remove files in the course from database *****/ - Brw_RemoveFilesFromDB (Crs->CrsCod,-1L,UsrDat->UsrCod); + Brw_RemoveFilesFromDB (-1L,-1L,-1L,Crs->CrsCod,-1L,UsrDat->UsrCod); /***** Remove size of file zone of the course from database *****/ Brw_RemoveSizeOfFileTreeFromDB (Crs->CrsCod,-1L,UsrDat->UsrCod); diff --git a/swad_file_browser.h b/swad_file_browser.h index 9501b565..30b7f803 100644 --- a/swad_file_browser.h +++ b/swad_file_browser.h @@ -147,7 +147,7 @@ void Brw_RemoveFoldersAssignmentsIfExistForAllUsrs (const char *FolderName); void Brw_ShowFileBrowserOrWorks (void); void Brw_ShowAgainFileBrowserOrWorks (void); void Brw_RemoveSizeOfFileTreeFromDB (long CrsCod,long GrpCod,long UsrCod); -void Brw_RemoveFilesFromDB (long CrsCod,long GrpCod,long UsrCod); +void Brw_RemoveFilesFromDB (long InsCod,long CtrCod,long DegCod,long CrsCod,long GrpCod,long UsrCod); void Brw_CreateDirDownloadTmp (void); void Brw_AskEditWorksCrs (void); void Brw_AskRemFileFromTree (void); diff --git a/swad_institution.c b/swad_institution.c index b6c648b0..da67e389 100644 --- a/swad_institution.c +++ b/swad_institution.c @@ -1384,6 +1384,9 @@ void Ins_RemoveInstitution (void) Ins.InsCod); DB_QueryDELETE (Query,"can not remove clipboards in an institution"); + /* Remove files in the institution from database */ + Brw_RemoveFilesFromDB (Ins.InsCod,-1L,-1L,-1L,-1L,-1L); + /***** Remove institution *****/ sprintf (Query,"DELETE FROM institutions WHERE InsCod='%ld'", Ins.InsCod);