Version 14.60

This commit is contained in:
Antonio Cañas Vargas 2015-01-20 02:00:42 +01:00
parent d8be8a2bd9
commit af750fb581
9 changed files with 297 additions and 63 deletions

View File

@ -10358,7 +10358,9 @@ UPDATE usr_last SET WhatToSearch=WhatToSearch+1 WHERE WhatToSearch>=7;
----- 2014-10-05, swad14.1.2
ALTER TABLE debug ADD COLUMN DbgCod INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (DbgCod);
ALTER TABLE debug ADD COLUMN DbgCod INT NOT NULL AUTO_INCREMENT FIRST
----- 2014-10-07, swad14.4
@ -10454,4 +10456,10 @@ ALTER TABLE IP_prefs ADD COLUMN Menu TINYINT NOT NULL DEFAULT 0 AFTER IconSet;
ALTER TABLE usr_data DROP COLUMN WWW,DROP COLUMN Twitter,DROP COLUMN Skype;
SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,ShortName,FullName,FirstYear,LastYear,OptYear,WWW FROM degrees;
SELECT DegCod,CtrCod,DegTypCod,Status,RequesterUsrCod,ShortName,FullName,FirstYear,LastYear,OptYear,WWW FROM degrees;
----- 2015-01-20, swad14.59.4
ALTER TABLE clipboard ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (InsCod);
ALTER TABLE clipboard ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod, ADD INDEX (CtrCod);
ALTER TABLE clipboard ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod, ADD INDEX (DegCod);

View File

@ -1423,8 +1423,15 @@ void Ctr_RemoveCentre (void)
Lay_ShowAlert (Lay_WARNING,Txt_To_remove_a_centre_you_must_first_remove_all_degrees_and_teachers_in_the_centre);
else // Centre has no teachers ==> remove it
{
/***** Remove information related to files in centre *****/
/* Remove clipboards related to the centre */
sprintf (Query,"DELETE FROM clipboard WHERE CtrCod='%ld'",
Ctr.CtrCod);
DB_QueryDELETE (Query,"can not remove clipboards in a centre");
/***** Remove centre *****/
sprintf (Query,"DELETE FROM centres WHERE CtrCod='%ld'",Ctr.CtrCod);
sprintf (Query,"DELETE FROM centres WHERE CtrCod='%ld'",
Ctr.CtrCod);
DB_QueryDELETE (Query,"can not remove a centre");
/***** Write message to show the change made *****/

View File

@ -39,11 +39,18 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 14.59.3 (2015/01/20)"
#define Log_PLATFORM_VERSION "SWAD 14.60 (2015/01/20)"
// 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 tables files and file_view !!!!!
Version 14.60: Jan 20, 2015 See/admin documents of degree, centre and institution (not finished). (175079 lines)
3 changes necessary in database:
ALTER TABLE clipboard ADD COLUMN InsCod INT NOT NULL DEFAULT -1 AFTER FileBrowser, ADD INDEX (InsCod);
ALTER TABLE clipboard ADD COLUMN CtrCod INT NOT NULL DEFAULT -1 AFTER InsCod, ADD INDEX (CtrCod);
ALTER TABLE clipboard ADD COLUMN DegCod INT NOT NULL DEFAULT -1 AFTER CtrCod, ADD INDEX (DegCod);
Version 14.59.3: Jan 20, 2015 See/admin documents of degree, centre and institution (not finished). (174862 lines)
Version 14.59.2: Jan 19, 2015 See/admin documents of degree, centre and institution (not finished). (174864 lines)
Version 14.59.1: Jan 19, 2015 See/admin documents of degree, centre and institution (not finished). (174711 lines)

View File

@ -435,6 +435,9 @@ mysql> DESCRIBE clipboard;
+-------------+------------+------+-----+-------------------+-----------------------------+
| UsrCod | int(11) | NO | PRI | NULL | |
| FileBrowser | tinyint(4) | NO | MUL | 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 | |
@ -442,18 +445,21 @@ mysql> DESCRIBE clipboard;
| Path | text | NO | | NULL | |
| CopyTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+------------+------+-----+-------------------+-----------------------------+
8 rows in set (0.00 sec)
11 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS clipboard ("
"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,"
"FileType TINYINT NOT NULL DEFAULT 0,"
"Path TEXT COLLATE latin1_bin NOT NULL,"
"CopyTime TIMESTAMP,"
"UNIQUE INDEX(UsrCod),INDEX(FileBrowser),INDEX(CrsCod))");
"UNIQUE INDEX(UsrCod),INDEX(FileBrowser),INDEX(InsCod),INDEX(CtrCod),INDEX(DegCod),INDEX(CrsCod))");
/***** Table connected *****/
/*

View File

@ -3182,12 +3182,20 @@ static void Deg_RemoveDegreeCompletely (long DegCod)
For_FORUM_DEGREE_USRS,For_FORUM_DEGREE_TCHS,DegCod);
DB_QueryDELETE (Query,"can not remove threads in forums of a degree");
/***** Remove information related to files in degree *****/
/* Remove clipboards related to the degree */
sprintf (Query,"DELETE FROM clipboard WHERE DegCod='%ld'",
DegCod);
DB_QueryDELETE (Query,"can not remove clipboards in a degree");
/***** Remove administrators of this degree *****/
sprintf (Query,"DELETE FROM deg_admin WHERE DegCod='%ld'",DegCod);
sprintf (Query,"DELETE FROM deg_admin WHERE DegCod='%ld'",
DegCod);
DB_QueryDELETE (Query,"can not remove administrators of a degree");
/***** Remove the degree *****/
sprintf (Query,"DELETE FROM degrees WHERE DegCod='%ld'",DegCod);
sprintf (Query,"DELETE FROM degrees WHERE DegCod='%ld'",
DegCod);
DB_QueryDELETE (Query,"can not remove a degree");
/***** Delete all the degrees in sta_degrees table not present in degrees table *****/

View File

@ -3221,7 +3221,7 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,struct Course *
/***** Remove fields of this user in its course record *****/
Rec_RemoveFieldsCrsRecordInCrs (UsrDat->UsrCod,Crs,QuietOrVerbose);
/***** Remove user's clipboard in course *****/
/***** Remove user's clipboard *****/
Brw_RemoveUsrClipboardInCrs (UsrDat->UsrCod,Crs->CrsCod);
/***** Remove user's expanded folders in course *****/

View File

@ -2054,42 +2054,42 @@ static void Brw_SetPathFileBrowser (void)
case Brw_FILE_BRW_SEE_DOCUMENTS_INS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_INS);
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_INS);
Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_INS,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_INS,
(unsigned) (Gbl.CurrentIns.Ins.InsCod % 100));
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_INS,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_INS,
(unsigned) (Gbl.CurrentIns.Ins.InsCod % 100),
(unsigned) Gbl.CurrentIns.Ins.InsCod);
break;
case Brw_FILE_BRW_SEE_DOCUMENTS_CTR:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_CTR);
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CTR);
Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_CTR,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CTR,
(unsigned) (Gbl.CurrentCtr.Ctr.CtrCod % 100));
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_CTR,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CTR,
(unsigned) (Gbl.CurrentCtr.Ctr.CtrCod % 100),
(unsigned) Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Brw_FILE_BRW_SEE_DOCUMENTS_DEG:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_DEG);
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_DEG);
Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_DEG,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_DEG,
(unsigned) (Gbl.CurrentDeg.Deg.DegCod % 100));
Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_DEG,
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_DEG,
(unsigned) (Gbl.CurrentDeg.Deg.DegCod % 100),
(unsigned) Gbl.CurrentDeg.Deg.DegCod);
break;
@ -3951,9 +3951,15 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
bool IsRecent = false;
struct FileMetadata FileMetadata;
char FileNameToShow[NAME_MAX+1];
bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_CRS ||
bool SeeDocsZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_INS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_CTR ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_DEG ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_CRS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_SEE_DOCUMENTS_GRP;
bool AdminDocsZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS ||
bool AdminDocsZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_INS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP;
bool CommonZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_CRS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_GRP;
@ -5479,6 +5485,9 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_works_zone;
extern const char *Txt_marks_management_zone;
extern const char *Txt_private_storage_zone;
extern const char *Txt_institution;
extern const char *Txt_centre;
extern const char *Txt_degree;
extern const char *Txt_course;
extern const char *Txt_group;
extern const char *Txt_user[Usr_NUM_SEXS];
@ -5487,6 +5496,9 @@ static void Brw_WriteCurrentClipboard (void)
extern const char *Txt_file;
extern const char *Txt_folder;
extern const char *Txt_link;
struct Institution Ins;
struct Centre Ctr;
struct Degree Deg;
struct Course Crs;
struct GroupData GrpDat;
struct UsrData UsrDat;
@ -5496,8 +5508,26 @@ static void Brw_WriteCurrentClipboard (void)
if (Gbl.FileBrowser.Clipboard.FileBrowser != Brw_FILE_BRW_BRIEFCASE_USR)
{
Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod;
Crs_GetDataOfCourseByCod (&Crs);
if (Gbl.FileBrowser.Clipboard.CrsCod > 0)
{
Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod;
Crs_GetDataOfCourseByCod (&Crs);
}
else if (Gbl.FileBrowser.Clipboard.DegCod > 0)
{
Deg.DegCod = Gbl.FileBrowser.Clipboard.DegCod;
Deg_GetDataOfDegreeByCod (&Deg);
}
else if (Gbl.FileBrowser.Clipboard.CtrCod > 0)
{
Ctr.CtrCod = Gbl.FileBrowser.Clipboard.CtrCod;
Ctr_GetDataOfCentreByCod (&Ctr);
}
else if (Gbl.FileBrowser.Clipboard.InsCod > 0)
{
Ins.InsCod = Gbl.FileBrowser.Clipboard.InsCod;
Ins_GetDataOfInstitutionByCod (&Ins,false);
}
}
fprintf (Gbl.F.Out,"<div class=\"DAT\" style=\"text-align:center;\">"
@ -5505,6 +5535,21 @@ static void Brw_WriteCurrentClipboard (void)
Txt_Copy_source);
switch (Gbl.FileBrowser.Clipboard.FileBrowser)
{
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
Txt_documents_management_zone,
Txt_institution,Ins.ShortName);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
Txt_documents_management_zone,
Txt_centre,Ctr.ShortName);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
Txt_documents_management_zone,
Txt_degree,Deg.ShortName);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
Txt_documents_management_zone,
@ -5635,7 +5680,7 @@ static bool Brw_GetMyClipboard (void)
unsigned UnsignedNum;
/***** Get my current clipboard from database *****/
sprintf (Query,"SELECT FileBrowser,CrsCod,GrpCod,WorksUsrCod,FileType,Path"
sprintf (Query,"SELECT FileBrowser,InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,FileType,Path"
" FROM clipboard WHERE UsrCod='%ld'",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get source of copy from clipboard");
@ -5645,6 +5690,9 @@ static bool Brw_GetMyClipboard (void)
{
/***** Clear clipboard data *****/
Gbl.FileBrowser.Clipboard.FileBrowser = Brw_FILE_BRW_UNKNOWN;
Gbl.FileBrowser.Clipboard.InsCod = -1L;
Gbl.FileBrowser.Clipboard.CtrCod = -1L;
Gbl.FileBrowser.Clipboard.DegCod = -1L;
Gbl.FileBrowser.Clipboard.CrsCod = -1L;
Gbl.FileBrowser.Clipboard.GrpCod = -1L;
Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L;
@ -5662,24 +5710,33 @@ static bool Brw_GetMyClipboard (void)
{
Gbl.FileBrowser.Clipboard.FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
/* Get course code (row[1]) */
Gbl.FileBrowser.Clipboard.CrsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get institution code (row[1]) */
Gbl.FileBrowser.Clipboard.InsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get group code (row[2]) */
if (sscanf (row[2],"%ld",&Gbl.FileBrowser.Clipboard.GrpCod) != 1)
/* Get centre code (row[2]) */
Gbl.FileBrowser.Clipboard.CtrCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get degree code (row[3]) */
Gbl.FileBrowser.Clipboard.DegCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get course code (row[4]) */
Gbl.FileBrowser.Clipboard.CrsCod = Str_ConvertStrCodToLongCod (row[4]);
/* Get group code (row[5]) */
if (sscanf (row[5],"%ld",&Gbl.FileBrowser.Clipboard.GrpCod) != 1)
Gbl.FileBrowser.Clipboard.GrpCod = -1L;
/* Get works user's code (row[3]) */
Gbl.FileBrowser.Clipboard.WorksUsrCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get works user's code (row[6]) */
Gbl.FileBrowser.Clipboard.WorksUsrCod = Str_ConvertStrCodToLongCod (row[6]);
/* Get file type (row[4]) */
/* Get file type (row[7]) */
Gbl.FileBrowser.Clipboard.FileType = Brw_IS_UNKNOWN; // default
if (sscanf (row[4],"%u",&UnsignedNum) == 1)
if (sscanf (row[7],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Brw_NUM_FILE_TYPES)
Gbl.FileBrowser.Clipboard.FileType = (Brw_FileType_t) UnsignedNum;
/* Get file path (row[5]) */
strcpy (Gbl.FileBrowser.Clipboard.Path,row[5]);
/* Get file path (row[8]) */
strcpy (Gbl.FileBrowser.Clipboard.Path,row[8]);
Str_SplitFullPathIntoPathAndFileName (Gbl.FileBrowser.Clipboard.Path,
PathUntilFileName,
Gbl.FileBrowser.Clipboard.FileName);
@ -5687,6 +5744,9 @@ static bool Brw_GetMyClipboard (void)
else
{
Gbl.FileBrowser.Clipboard.FileBrowser = Brw_FILE_BRW_UNKNOWN;
Gbl.FileBrowser.Clipboard.InsCod = -1L;
Gbl.FileBrowser.Clipboard.CtrCod = -1L;
Gbl.FileBrowser.Clipboard.DegCod = -1L;
Gbl.FileBrowser.Clipboard.CrsCod = -1L;
Gbl.FileBrowser.Clipboard.GrpCod = -1L;
Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L;
@ -5717,6 +5777,18 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
{
switch (Gbl.FileBrowser.Type)
{
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
if (Gbl.FileBrowser.Clipboard.InsCod == Gbl.CurrentIns.Ins.InsCod)
IsThisTree = true; // I am in the institution of the clipboard
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
if (Gbl.FileBrowser.Clipboard.CtrCod == Gbl.CurrentCtr.Ctr.CtrCod)
IsThisTree = true; // I am in the centre of the clipboard
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
if (Gbl.FileBrowser.Clipboard.DegCod == Gbl.CurrentDeg.Deg.DegCod)
IsThisTree = true; // I am in the degree of the clipboard
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_CRS:
@ -5728,7 +5800,7 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
case Brw_FILE_BRW_ASSIGNMENTS_CRS:
case Brw_FILE_BRW_WORKS_CRS:
if (Gbl.FileBrowser.Clipboard.CrsCod == Gbl.CurrentCrs.Crs.CrsCod)
IsThisTree = true; // We are in the course of the clipboard
IsThisTree = true; // I am in the course of the clipboard
break;
case Brw_FILE_BRW_BRIEFCASE_USR:
IsThisTree = true;
@ -5763,21 +5835,51 @@ 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;
}
/***** Add path to clipboards *****/
sprintf (Query,"INSERT INTO clipboard (UsrCod,FileBrowser,CrsCod,GrpCod,WorksUsrCod,FileType,Path)"
" VALUES ('%ld','%u','%ld','%ld','%ld','%u','%s')",
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,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_BRIEFCASE_USR) ? -1L :
Gbl.CurrentCrs.Crs.CrsCod,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_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,
InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,
(unsigned) FileType,
Path);
DB_QueryINSERT (Query,"can not add source of copy to clipboard");
@ -5790,21 +5892,50 @@ 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;
}
/***** Update path in my clipboard *****/
sprintf (Query,"UPDATE clipboard"
" SET FileBrowser='%u',CrsCod='%ld',GrpCod='%ld',WorksUsrCod='%ld',FileType='%u',Path='%s'"
" 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,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_BRIEFCASE_USR) ? -1L :
Gbl.CurrentCrs.Crs.CrsCod,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_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,
InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,
(unsigned) FileType,
Path,
Gbl.Usrs.Me.UsrDat.UsrCod);
@ -6116,6 +6247,21 @@ static void Brw_RemoveAffectedClipboards (Brw_FileBrowser_t FileBrowser,long MyU
from a course or from a user *****/
switch (FileBrowser)
{
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser='%u' AND InsCod='%ld'",
(unsigned) FileBrowser,Gbl.CurrentIns.Ins.InsCod);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser='%u' AND CtrCod='%ld'",
(unsigned) FileBrowser,Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
sprintf (Query,"DELETE FROM clipboard"
" WHERE FileBrowser='%u' AND DegCod='%ld'",
(unsigned) FileBrowser,Gbl.CurrentDeg.Deg.DegCod);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_COMMON_CRS:
case Brw_FILE_BRW_ADMIN_MARKS_CRS:
@ -6321,11 +6467,17 @@ void Brw_PasteIntoFileBrowser (void)
/*****************************************************************************/
// Source:
// Type of file browser: Gbl.FileBrowser.Clipboard.FileBrowser
// Possible institution: Gbl.FileBrowser.Clipboard.InsCod
// Possible centre: Gbl.FileBrowser.Clipboard.CtrCod
// Possible degree: Gbl.FileBrowser.Clipboard.DegCod
// Possible course: Gbl.FileBrowser.Clipboard.CrsCod
// Possible student in works: Gbl.FileBrowser.Clipboard.WorksUsrCod
// Path (file or folder): Gbl.FileBrowser.Clipboard.Path
// Destination:
// Type of file browser: Gbl.FileBrowser.Type
// Possible institution: Gbl.CurrentIns.Ins.InsCod
// Possible centre: Gbl.CurrentCtr.Ctr.CtrCod
// Possible degree: Gbl.CurrentDeg.Deg.DegCod
// Possible course: Gbl.CurrentCrs.Crs.CrsCod
// Possible student in works: Gbl.Usrs.Other.UsrDat.UsrCod
// Path (should be a folder): Gbl.FileBrowser.Priv.FullPathInTree
@ -6338,8 +6490,11 @@ static void Brw_PasteClipboard (void)
extern const char *Txt_Folders_copied;
extern const char *Txt_Links_copied;
extern const char *Txt_You_can_not_paste_file_or_folder_here;
struct Institution Ins;
struct Centre Ctr;
struct Degree Deg;
struct Course Crs;
char PathCrsOrg[PATH_MAX+1];
char PathAboveRootFolderOrg[PATH_MAX+1];
char PathOrg[PATH_MAX+1];
unsigned NumFilesPasted = 0;
unsigned NumFoldsPasted = 0;
@ -6354,6 +6509,36 @@ static void Brw_PasteClipboard (void)
/***** Construct the relative path of the origin file or folder *****/
switch (Gbl.FileBrowser.Clipboard.FileBrowser)
{
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
Ins.InsCod = Gbl.FileBrowser.Clipboard.InsCod;
if (Ins_GetDataOfInstitutionByCod (&Ins,false))
sprintf (PathAboveRootFolderOrg,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_INS,
(unsigned) (Ins.InsCod % 100),
(unsigned) Ins.InsCod);
else
Lay_ShowErrorAndExit ("The institution of copy source does not exist.");
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
Ctr.CtrCod = Gbl.FileBrowser.Clipboard.CtrCod;
if (Ctr_GetDataOfCentreByCod (&Ctr))
sprintf (PathAboveRootFolderOrg,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CTR,
(unsigned) (Ctr.CtrCod % 100),
(unsigned) Ctr.CtrCod);
else
Lay_ShowErrorAndExit ("The centre of copy source does not exist.");
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
Deg.DegCod = Gbl.FileBrowser.Clipboard.DegCod;
if (Deg_GetDataOfDegreeByCod (&Deg))
sprintf (PathAboveRootFolderOrg,"%s/%s/%02u/%u",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_DEG,
(unsigned) (Deg.DegCod % 100),
(unsigned) Deg.DegCod);
else
Lay_ShowErrorAndExit ("The degree of copy source does not exist.");
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_CRS:
@ -6366,7 +6551,7 @@ static void Brw_PasteClipboard (void)
case Brw_FILE_BRW_WORKS_CRS:
Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod;
if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathCrsOrg,"%s/%s/%ld",
sprintf (PathAboveRootFolderOrg,"%s/%s/%ld",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod);
else
Lay_ShowErrorAndExit ("The course of copy source does not exist.");
@ -6376,25 +6561,28 @@ static void Brw_PasteClipboard (void)
}
switch (Gbl.FileBrowser.Clipboard.FileBrowser)
{
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_COMMON_CRS:
case Brw_FILE_BRW_ADMIN_MARKS_CRS:
sprintf (PathOrg,"%s/%s",
PathCrsOrg,
PathAboveRootFolderOrg,
Gbl.FileBrowser.Clipboard.Path);
break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_GRP:
case Brw_FILE_BRW_ADMIN_MARKS_GRP:
sprintf (PathOrg,"%s/grp/%ld/%s",
PathCrsOrg,
PathAboveRootFolderOrg,
Gbl.FileBrowser.Clipboard.GrpCod,
Gbl.FileBrowser.Clipboard.Path);
break;
case Brw_FILE_BRW_ASSIGNMENTS_USR:
case Brw_FILE_BRW_WORKS_USR:
sprintf (PathOrg,"%s/usr/%02u/%ld/%s",
PathCrsOrg,
PathAboveRootFolderOrg,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100),
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.FileBrowser.Clipboard.Path);
@ -6402,7 +6590,7 @@ static void Brw_PasteClipboard (void)
case Brw_FILE_BRW_ASSIGNMENTS_CRS:
case Brw_FILE_BRW_WORKS_CRS:
sprintf (PathOrg,"%s/usr/%02u/%ld/%s",
PathCrsOrg,
PathAboveRootFolderOrg,
(unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100),
Gbl.FileBrowser.Clipboard.WorksUsrCod,
Gbl.FileBrowser.Clipboard.Path);

View File

@ -511,7 +511,10 @@ struct Globals
struct
{
Brw_FileBrowser_t FileBrowser; // Type of the file browser
long CrsCod; // Course code
long InsCod; // Code of the institution related to the file browser with the clipboard
long CtrCod; // Code of the centre related to the file browser with the clipboard
long DegCod; // Code of the degree related to the file browser with the clipboard
long CrsCod; // Code of the course related to the file browser with the clipboard
long GrpCod; // Code of the group related to the file browser with the clipboard
long WorksUsrCod; // User code of the user related to the works file browser with the clipboard
char Path[PATH_MAX+1]; // Complete path in the file browser

View File

@ -1378,8 +1378,15 @@ void Ins_RemoveInstitution (void)
Lay_ShowAlert (Lay_WARNING,Txt_To_remove_an_institution_you_must_first_remove_all_centres_and_users_in_the_institution);
else // Institution has no users ==> remove it
{
/***** Remove information related to files in institution *****/
/* Remove clipboards related to the institution */
sprintf (Query,"DELETE FROM clipboard WHERE InsCod='%ld'",
Ins.InsCod);
DB_QueryDELETE (Query,"can not remove clipboards in an institution");
/***** Remove institution *****/
sprintf (Query,"DELETE FROM institutions WHERE InsCod='%ld'",Ins.InsCod);
sprintf (Query,"DELETE FROM institutions WHERE InsCod='%ld'",
Ins.InsCod);
DB_QueryDELETE (Query,"can not remove an institution");
/***** Write message to show the change made *****/