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 ----- 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 ----- 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; 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); 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 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 *****/ /***** 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"); DB_QueryDELETE (Query,"can not remove a centre");
/***** Write message to show the change made *****/ /***** Write message to show the change made *****/

View File

@ -39,11 +39,18 @@
/****************************** Public constants *****************************/ /****************************** 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: // 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 // 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.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.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) 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 | | | UsrCod | int(11) | NO | PRI | NULL | |
| FileBrowser | tinyint(4) | NO | MUL | 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 | | | CrsCod | int(11) | NO | MUL | -1 | |
| GrpCod | int(11) | NO | | NULL | | | GrpCod | int(11) | NO | | NULL | |
| WorksUsrCod | int(11) | NO | | NULL | | | WorksUsrCod | int(11) | NO | | NULL | |
@ -442,18 +445,21 @@ mysql> DESCRIBE clipboard;
| Path | text | NO | | NULL | | | Path | text | NO | | NULL | |
| CopyTime | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | 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 (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS clipboard ("
"UsrCod INT NOT NULL," "UsrCod INT NOT NULL,"
"FileBrowser TINYINT 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," "CrsCod INT NOT NULL DEFAULT -1,"
"GrpCod INT NOT NULL," "GrpCod INT NOT NULL,"
"WorksUsrCod INT NOT NULL," "WorksUsrCod INT NOT NULL,"
"FileType TINYINT NOT NULL DEFAULT 0," "FileType TINYINT NOT NULL DEFAULT 0,"
"Path TEXT COLLATE latin1_bin NOT NULL," "Path TEXT COLLATE latin1_bin NOT NULL,"
"CopyTime TIMESTAMP," "CopyTime TIMESTAMP,"
"UNIQUE INDEX(UsrCod),INDEX(FileBrowser),INDEX(CrsCod))"); "UNIQUE INDEX(UsrCod),INDEX(FileBrowser),INDEX(InsCod),INDEX(CtrCod),INDEX(DegCod),INDEX(CrsCod))");
/***** Table connected *****/ /***** Table connected *****/
/* /*

View File

@ -3182,12 +3182,20 @@ static void Deg_RemoveDegreeCompletely (long DegCod)
For_FORUM_DEGREE_USRS,For_FORUM_DEGREE_TCHS,DegCod); For_FORUM_DEGREE_USRS,For_FORUM_DEGREE_TCHS,DegCod);
DB_QueryDELETE (Query,"can not remove threads in forums of a degree"); 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 *****/ /***** 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"); DB_QueryDELETE (Query,"can not remove administrators of a degree");
/***** Remove the 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"); DB_QueryDELETE (Query,"can not remove a degree");
/***** Delete all the degrees in sta_degrees table not present in degrees table *****/ /***** 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 *****/ /***** Remove fields of this user in its course record *****/
Rec_RemoveFieldsCrsRecordInCrs (UsrDat->UsrCod,Crs,QuietOrVerbose); Rec_RemoveFieldsCrsRecordInCrs (UsrDat->UsrCod,Crs,QuietOrVerbose);
/***** Remove user's clipboard in course *****/ /***** Remove user's clipboard *****/
Brw_RemoveUsrClipboardInCrs (UsrDat->UsrCod,Crs->CrsCod); Brw_RemoveUsrClipboardInCrs (UsrDat->UsrCod,Crs->CrsCod);
/***** Remove user's expanded folders in course *****/ /***** 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_SEE_DOCUMENTS_INS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS: case Brw_FILE_BRW_ADMIN_DOCUMENTS_INS:
sprintf (Path,"%s/%s", sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_INS); Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_INS);
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u", 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)); (unsigned) (Gbl.CurrentIns.Ins.InsCod % 100));
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u", 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 % 100),
(unsigned) Gbl.CurrentIns.Ins.InsCod); (unsigned) Gbl.CurrentIns.Ins.InsCod);
break; break;
case Brw_FILE_BRW_SEE_DOCUMENTS_CTR: case Brw_FILE_BRW_SEE_DOCUMENTS_CTR:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR: case Brw_FILE_BRW_ADMIN_DOCUMENTS_CTR:
sprintf (Path,"%s/%s", sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_CTR); Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CTR);
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u", 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)); (unsigned) (Gbl.CurrentCtr.Ctr.CtrCod % 100));
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u", 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 % 100),
(unsigned) Gbl.CurrentCtr.Ctr.CtrCod); (unsigned) Gbl.CurrentCtr.Ctr.CtrCod);
break; break;
case Brw_FILE_BRW_SEE_DOCUMENTS_DEG: case Brw_FILE_BRW_SEE_DOCUMENTS_DEG:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG: case Brw_FILE_BRW_ADMIN_DOCUMENTS_DEG:
sprintf (Path,"%s/%s", sprintf (Path,"%s/%s",
Cfg_PATH_SWAD_PUBLIC,Cfg_FOLDER_DEG); Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_DEG);
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Path,"%s/%s/%02u", 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)); (unsigned) (Gbl.CurrentDeg.Deg.DegCod % 100));
Fil_CreateDirIfNotExists (Path); Fil_CreateDirIfNotExists (Path);
sprintf (Gbl.FileBrowser.Priv.PathAboveRootFolder,"%s/%s/%02u/%u", 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 % 100),
(unsigned) Gbl.CurrentDeg.Deg.DegCod); (unsigned) Gbl.CurrentDeg.Deg.DegCod);
break; break;
@ -3951,9 +3951,15 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,
bool IsRecent = false; bool IsRecent = false;
struct FileMetadata FileMetadata; struct FileMetadata FileMetadata;
char FileNameToShow[NAME_MAX+1]; 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; 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; Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP;
bool CommonZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_CRS || bool CommonZone = Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_CRS ||
Gbl.FileBrowser.Type == Brw_FILE_BRW_COMMON_GRP; 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_works_zone;
extern const char *Txt_marks_management_zone; extern const char *Txt_marks_management_zone;
extern const char *Txt_private_storage_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_course;
extern const char *Txt_group; extern const char *Txt_group;
extern const char *Txt_user[Usr_NUM_SEXS]; 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_file;
extern const char *Txt_folder; extern const char *Txt_folder;
extern const char *Txt_link; extern const char *Txt_link;
struct Institution Ins;
struct Centre Ctr;
struct Degree Deg;
struct Course Crs; struct Course Crs;
struct GroupData GrpDat; struct GroupData GrpDat;
struct UsrData UsrDat; struct UsrData UsrDat;
@ -5496,8 +5508,26 @@ static void Brw_WriteCurrentClipboard (void)
if (Gbl.FileBrowser.Clipboard.FileBrowser != Brw_FILE_BRW_BRIEFCASE_USR) if (Gbl.FileBrowser.Clipboard.FileBrowser != Brw_FILE_BRW_BRIEFCASE_USR)
{ {
Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod; if (Gbl.FileBrowser.Clipboard.CrsCod > 0)
Crs_GetDataOfCourseByCod (&Crs); {
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;\">" fprintf (Gbl.F.Out,"<div class=\"DAT\" style=\"text-align:center;\">"
@ -5505,6 +5535,21 @@ static void Brw_WriteCurrentClipboard (void)
Txt_Copy_source); Txt_Copy_source);
switch (Gbl.FileBrowser.Clipboard.FileBrowser) 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: case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>", fprintf (Gbl.F.Out,"%s, %s <strong>%s</strong>",
Txt_documents_management_zone, Txt_documents_management_zone,
@ -5635,7 +5680,7 @@ static bool Brw_GetMyClipboard (void)
unsigned UnsignedNum; unsigned UnsignedNum;
/***** Get my current clipboard from database *****/ /***** 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'", " FROM clipboard WHERE UsrCod='%ld'",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get source of copy from clipboard"); 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 *****/ /***** Clear clipboard data *****/
Gbl.FileBrowser.Clipboard.FileBrowser = Brw_FILE_BRW_UNKNOWN; 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.CrsCod = -1L;
Gbl.FileBrowser.Clipboard.GrpCod = -1L; Gbl.FileBrowser.Clipboard.GrpCod = -1L;
Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L; Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L;
@ -5662,24 +5710,33 @@ static bool Brw_GetMyClipboard (void)
{ {
Gbl.FileBrowser.Clipboard.FileBrowser = (Brw_FileBrowser_t) UnsignedNum; Gbl.FileBrowser.Clipboard.FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
/* Get course code (row[1]) */ /* Get institution code (row[1]) */
Gbl.FileBrowser.Clipboard.CrsCod = Str_ConvertStrCodToLongCod (row[1]); Gbl.FileBrowser.Clipboard.InsCod = Str_ConvertStrCodToLongCod (row[1]);
/* Get group code (row[2]) */ /* Get centre code (row[2]) */
if (sscanf (row[2],"%ld",&Gbl.FileBrowser.Clipboard.GrpCod) != 1) 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; Gbl.FileBrowser.Clipboard.GrpCod = -1L;
/* Get works user's code (row[3]) */ /* Get works user's code (row[6]) */
Gbl.FileBrowser.Clipboard.WorksUsrCod = Str_ConvertStrCodToLongCod (row[3]); 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 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) if (UnsignedNum < Brw_NUM_FILE_TYPES)
Gbl.FileBrowser.Clipboard.FileType = (Brw_FileType_t) UnsignedNum; Gbl.FileBrowser.Clipboard.FileType = (Brw_FileType_t) UnsignedNum;
/* Get file path (row[5]) */ /* Get file path (row[8]) */
strcpy (Gbl.FileBrowser.Clipboard.Path,row[5]); strcpy (Gbl.FileBrowser.Clipboard.Path,row[8]);
Str_SplitFullPathIntoPathAndFileName (Gbl.FileBrowser.Clipboard.Path, Str_SplitFullPathIntoPathAndFileName (Gbl.FileBrowser.Clipboard.Path,
PathUntilFileName, PathUntilFileName,
Gbl.FileBrowser.Clipboard.FileName); Gbl.FileBrowser.Clipboard.FileName);
@ -5687,6 +5744,9 @@ static bool Brw_GetMyClipboard (void)
else else
{ {
Gbl.FileBrowser.Clipboard.FileBrowser = Brw_FILE_BRW_UNKNOWN; 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.CrsCod = -1L;
Gbl.FileBrowser.Clipboard.GrpCod = -1L; Gbl.FileBrowser.Clipboard.GrpCod = -1L;
Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L; Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L;
@ -5717,6 +5777,18 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
{ {
switch (Gbl.FileBrowser.Type) 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_CRS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_CRS: 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_ASSIGNMENTS_CRS:
case Brw_FILE_BRW_WORKS_CRS: case Brw_FILE_BRW_WORKS_CRS:
if (Gbl.FileBrowser.Clipboard.CrsCod == Gbl.CurrentCrs.Crs.CrsCod) 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; break;
case Brw_FILE_BRW_BRIEFCASE_USR: case Brw_FILE_BRW_BRIEFCASE_USR:
IsThisTree = true; IsThisTree = true;
@ -5763,21 +5835,51 @@ static bool Brw_CheckIfClipboardIsInThisTree (void)
static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path) static void Brw_AddPathToClipboards (Brw_FileType_t FileType,const char *Path)
{ {
char Query[512+PATH_MAX]; 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 *****/ /***** Add path to clipboards *****/
sprintf (Query,"INSERT INTO clipboard (UsrCod,FileBrowser,CrsCod,GrpCod,WorksUsrCod,FileType,Path)" sprintf (Query,"INSERT INTO clipboard (UsrCod,FileBrowser,InsCod,CtrCod,DegCod,"
" VALUES ('%ld','%u','%ld','%ld','%ld','%u','%s')", "CrsCod,GrpCod,WorksUsrCod,FileType,Path)"
" VALUES ('%ld','%u','%ld','%ld','%ld',"
"'%ld','%ld','%ld','%u','%s')",
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
(unsigned) Gbl.FileBrowser.Type, (unsigned) Gbl.FileBrowser.Type,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_BRIEFCASE_USR) ? -1L : InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,
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,
(unsigned) FileType, (unsigned) FileType,
Path); Path);
DB_QueryINSERT (Query,"can not add source of copy to clipboard"); 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) static void Brw_UpdatePathInClipboard (Brw_FileType_t FileType,const char *Path)
{ {
char Query[512+PATH_MAX]; 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 *****/ /***** Update path in my clipboard *****/
sprintf (Query,"UPDATE 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'", " WHERE UsrCod='%ld'",
(unsigned) Gbl.FileBrowser.Type, (unsigned) Gbl.FileBrowser.Type,
(Gbl.FileBrowser.Type == Brw_FILE_BRW_BRIEFCASE_USR) ? -1L : InsCod,CtrCod,DegCod,CrsCod,GrpCod,WorksUsrCod,
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,
(unsigned) FileType, (unsigned) FileType,
Path, Path,
Gbl.Usrs.Me.UsrDat.UsrCod); 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 *****/ from a course or from a user *****/
switch (FileBrowser) 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_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_COMMON_CRS:
case Brw_FILE_BRW_ADMIN_MARKS_CRS: case Brw_FILE_BRW_ADMIN_MARKS_CRS:
@ -6321,11 +6467,17 @@ void Brw_PasteIntoFileBrowser (void)
/*****************************************************************************/ /*****************************************************************************/
// Source: // Source:
// Type of file browser: Gbl.FileBrowser.Clipboard.FileBrowser // 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 course: Gbl.FileBrowser.Clipboard.CrsCod
// Possible student in works: Gbl.FileBrowser.Clipboard.WorksUsrCod // Possible student in works: Gbl.FileBrowser.Clipboard.WorksUsrCod
// Path (file or folder): Gbl.FileBrowser.Clipboard.Path // Path (file or folder): Gbl.FileBrowser.Clipboard.Path
// Destination: // Destination:
// Type of file browser: Gbl.FileBrowser.Type // 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 course: Gbl.CurrentCrs.Crs.CrsCod
// Possible student in works: Gbl.Usrs.Other.UsrDat.UsrCod // Possible student in works: Gbl.Usrs.Other.UsrDat.UsrCod
// Path (should be a folder): Gbl.FileBrowser.Priv.FullPathInTree // 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_Folders_copied;
extern const char *Txt_Links_copied; extern const char *Txt_Links_copied;
extern const char *Txt_You_can_not_paste_file_or_folder_here; extern const char *Txt_You_can_not_paste_file_or_folder_here;
struct Institution Ins;
struct Centre Ctr;
struct Degree Deg;
struct Course Crs; struct Course Crs;
char PathCrsOrg[PATH_MAX+1]; char PathAboveRootFolderOrg[PATH_MAX+1];
char PathOrg[PATH_MAX+1]; char PathOrg[PATH_MAX+1];
unsigned NumFilesPasted = 0; unsigned NumFilesPasted = 0;
unsigned NumFoldsPasted = 0; unsigned NumFoldsPasted = 0;
@ -6354,6 +6509,36 @@ static void Brw_PasteClipboard (void)
/***** Construct the relative path of the origin file or folder *****/ /***** Construct the relative path of the origin file or folder *****/
switch (Gbl.FileBrowser.Clipboard.FileBrowser) 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_CRS:
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_COMMON_CRS:
@ -6366,7 +6551,7 @@ static void Brw_PasteClipboard (void)
case Brw_FILE_BRW_WORKS_CRS: case Brw_FILE_BRW_WORKS_CRS:
Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod; Crs.CrsCod = Gbl.FileBrowser.Clipboard.CrsCod;
if (Crs_GetDataOfCourseByCod (&Crs)) if (Crs_GetDataOfCourseByCod (&Crs))
sprintf (PathCrsOrg,"%s/%s/%ld", sprintf (PathAboveRootFolderOrg,"%s/%s/%ld",
Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod); Cfg_PATH_SWAD_PRIVATE,Cfg_FOLDER_CRS,Crs.CrsCod);
else else
Lay_ShowErrorAndExit ("The course of copy source does not exist."); Lay_ShowErrorAndExit ("The course of copy source does not exist.");
@ -6376,25 +6561,28 @@ static void Brw_PasteClipboard (void)
} }
switch (Gbl.FileBrowser.Clipboard.FileBrowser) 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_ADMIN_DOCUMENTS_CRS:
case Brw_FILE_BRW_COMMON_CRS: case Brw_FILE_BRW_COMMON_CRS:
case Brw_FILE_BRW_ADMIN_MARKS_CRS: case Brw_FILE_BRW_ADMIN_MARKS_CRS:
sprintf (PathOrg,"%s/%s", sprintf (PathOrg,"%s/%s",
PathCrsOrg, PathAboveRootFolderOrg,
Gbl.FileBrowser.Clipboard.Path); Gbl.FileBrowser.Clipboard.Path);
break; break;
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP: case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
case Brw_FILE_BRW_COMMON_GRP: case Brw_FILE_BRW_COMMON_GRP:
case Brw_FILE_BRW_ADMIN_MARKS_GRP: case Brw_FILE_BRW_ADMIN_MARKS_GRP:
sprintf (PathOrg,"%s/grp/%ld/%s", sprintf (PathOrg,"%s/grp/%ld/%s",
PathCrsOrg, PathAboveRootFolderOrg,
Gbl.FileBrowser.Clipboard.GrpCod, Gbl.FileBrowser.Clipboard.GrpCod,
Gbl.FileBrowser.Clipboard.Path); Gbl.FileBrowser.Clipboard.Path);
break; break;
case Brw_FILE_BRW_ASSIGNMENTS_USR: case Brw_FILE_BRW_ASSIGNMENTS_USR:
case Brw_FILE_BRW_WORKS_USR: case Brw_FILE_BRW_WORKS_USR:
sprintf (PathOrg,"%s/usr/%02u/%ld/%s", sprintf (PathOrg,"%s/usr/%02u/%ld/%s",
PathCrsOrg, PathAboveRootFolderOrg,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100), (unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100),
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.FileBrowser.Clipboard.Path); Gbl.FileBrowser.Clipboard.Path);
@ -6402,7 +6590,7 @@ static void Brw_PasteClipboard (void)
case Brw_FILE_BRW_ASSIGNMENTS_CRS: case Brw_FILE_BRW_ASSIGNMENTS_CRS:
case Brw_FILE_BRW_WORKS_CRS: case Brw_FILE_BRW_WORKS_CRS:
sprintf (PathOrg,"%s/usr/%02u/%ld/%s", sprintf (PathOrg,"%s/usr/%02u/%ld/%s",
PathCrsOrg, PathAboveRootFolderOrg,
(unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100), (unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100),
Gbl.FileBrowser.Clipboard.WorksUsrCod, Gbl.FileBrowser.Clipboard.WorksUsrCod,
Gbl.FileBrowser.Clipboard.Path); Gbl.FileBrowser.Clipboard.Path);

View File

@ -511,7 +511,10 @@ struct Globals
struct struct
{ {
Brw_FileBrowser_t FileBrowser; // Type of the file browser 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 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 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 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); 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 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 *****/ /***** 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"); DB_QueryDELETE (Query,"can not remove an institution");
/***** Write message to show the change made *****/ /***** Write message to show the change made *****/