diff --git a/swad_changelog.h b/swad_changelog.h
index ba5b09564..4ed11343d 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -448,10 +448,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
-#define Log_PLATFORM_VERSION "SWAD 18.120 (2019-04-25)"
+#define Log_PLATFORM_VERSION "SWAD 18.120.1 (2019-04-25)"
#define CSS_FILE "swad18.112.1.css"
#define JS_FILE "swad18.116.5.js"
/*
+ Version 18.120.1: Apr 25, 2019 Code refactoring related to file browser. (242461 lines)
Version 18.120: Apr 25, 2019 Code refactoring related to file browser. (242466 lines)
Version 18.119: Apr 25, 2019 Code refactoring related to selected users. (242536 lines)
Version 18.118.5: Apr 23, 2019 Code refactoring in file browser. (242497 lines)
diff --git a/swad_file_browser.c b/swad_file_browser.c
index 8133711b4..0372b2fa2 100644
--- a/swad_file_browser.c
+++ b/swad_file_browser.c
@@ -5497,7 +5497,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Brw_GetFileTypeSizeAndDate (&FileMetadata);
if (FileMetadata.FilCod <= 0) // No entry for this file in database table of files
/* Add entry to the table of files/folders */
- FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FileType,
+ FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT);
/***** Is this row public or private? *****/
@@ -5569,7 +5569,7 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,const char *RowId,
Level != 0) // Never copy root folder
// If path in the clipboard is equal to complete path in tree...
// ...or is the start of complete path in tree...
- if (Str_Path1BeginsByPath2 (Gbl.FileBrowser.FilFolLnk.Full,Gbl.FileBrowser.Clipboard.Path))
+ if (Str_Path1BeginsByPath2 (Gbl.FileBrowser.FilFolLnk.Full,Gbl.FileBrowser.Clipboard.FilFolLnk.Full))
Gbl.FileBrowser.Clipboard.IsThisFile = true;
/* Check if I can modify (remove, rename, etc.) this file or folder */
@@ -5696,7 +5696,7 @@ void Brw_SetFullPathInTree (void)
/*****************************************************************************/
/******* Check if the clipboard can be pasted into the current folder ********/
/*****************************************************************************/
-// Return true if Gbl.FileBrowser.Clipboard.Path can be pasted into Gbl.FileBrowser.FilFolLnk.Full
+// Return true if Gbl.FileBrowser.Clipboard.FilFolLnk.Full can be pasted into Gbl.FileBrowser.FilFolLnk.Full
static bool Brw_CheckIfCanPasteIn (unsigned Level)
{
@@ -5711,7 +5711,7 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
return false;
/***** Do not paste a link in marks... *****/
- if (Gbl.FileBrowser.Clipboard.FileType == Brw_IS_LINK &&
+ if (Gbl.FileBrowser.Clipboard.FilFolLnk.Type == Brw_IS_LINK &&
(Gbl.FileBrowser.Type == Brw_ADMI_MRK_CRS ||
Gbl.FileBrowser.Type == Brw_ADMI_MRK_GRP))
return false;
@@ -5727,10 +5727,10 @@ static bool Brw_CheckIfCanPasteIn (unsigned Level)
snprintf (PathDstWithFile,sizeof (PathDstWithFile),
"%s/%s",
Gbl.FileBrowser.FilFolLnk.Full,
- Gbl.FileBrowser.Clipboard.FileName);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Name);
return !Str_Path1BeginsByPath2 (PathDstWithFile,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
}
return true; // I can paste
@@ -6154,7 +6154,7 @@ static void Brw_PutIconFileWithLinkToViewMetadata (unsigned Size,
Frm_LinkFormSubmit (Txt_View_data,Gbl.FileBrowser.TxtStyle,NULL);
/***** Icon depending on the file extension *****/
- Brw_PutIconFile (Size,FileMetadata->FileType,FileMetadata->FilFolLnkName);
+ Brw_PutIconFile (Size,FileMetadata->FilFolLnk.Type,FileMetadata->FilFolLnk.Name);
/***** End link and form *****/
fprintf (Gbl.F.Out,"");
@@ -6571,7 +6571,7 @@ void Brw_RemFileFromTree (void)
{
/* Name of the file/link to be shown */
Brw_GetFileNameToShow (Str_FileIs (Gbl.FileBrowser.FilFolLnk.Name,"url") ? Brw_IS_LINK :
- Brw_IS_FILE,
+ Brw_IS_FILE,
Gbl.FileBrowser.FilFolLnk.Name,FileNameToShow);
/* Remove file/link from disk and database */
@@ -7014,13 +7014,13 @@ static void Brw_WriteCurrentClipboard (void)
// Not the root folder
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Clipboard.FileBrowser,
Gbl.FileBrowser.Clipboard.Level,
- Gbl.FileBrowser.Clipboard.FileType,
- Gbl.FileBrowser.Clipboard.FileName,
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Type,
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Name,
FileNameToShow);
Ale_ShowAlert (Ale_CLIPBOARD,"%s: %s, %s %s.",
Txt_Copy_source,TxtClipboardZone,
- TxtFileType[Gbl.FileBrowser.Clipboard.FileType],
+ TxtFileType[Gbl.FileBrowser.Clipboard.FilFolLnk.Type],
FileNameToShow);
}
else
@@ -7040,7 +7040,6 @@ static bool Brw_GetMyClipboard (void)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
- char PathUntilFileName[PATH_MAX + 1];
unsigned NumRows;
unsigned UnsignedNum;
@@ -7048,9 +7047,9 @@ static bool Brw_GetMyClipboard (void)
Gbl.FileBrowser.Clipboard.FileBrowser = Brw_UNKNOWN;
Gbl.FileBrowser.Clipboard.Cod = -1L;
Gbl.FileBrowser.Clipboard.WorksUsrCod = -1L;
- Gbl.FileBrowser.Clipboard.FileType = Brw_IS_UNKNOWN;
- Gbl.FileBrowser.Clipboard.Path[0] = '\0';
- Gbl.FileBrowser.Clipboard.FileName[0] = '\0';
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Type = Brw_IS_UNKNOWN;
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full[0] = '\0';
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Name[0] = '\0';
Gbl.FileBrowser.Clipboard.Level = 0;
/***** Get my current clipboard from database *****/
@@ -7078,21 +7077,21 @@ static bool Brw_GetMyClipboard (void)
Gbl.FileBrowser.Clipboard.WorksUsrCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get file type (row[3]) */
- Gbl.FileBrowser.Clipboard.FileType = Brw_IS_UNKNOWN; // default
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Type = Brw_IS_UNKNOWN; // default
if (sscanf (row[3],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Brw_NUM_FILE_TYPES)
- Gbl.FileBrowser.Clipboard.FileType = (Brw_FileType_t) UnsignedNum;
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
/* Get file path (row[4]) */
- Str_Copy (Gbl.FileBrowser.Clipboard.Path,row[4],
+ Str_Copy (Gbl.FileBrowser.Clipboard.FilFolLnk.Full,row[4],
PATH_MAX);
- Str_SplitFullPathIntoPathAndFileName (Gbl.FileBrowser.Clipboard.Path,
- PathUntilFileName,
- Gbl.FileBrowser.Clipboard.FileName);
+ Str_SplitFullPathIntoPathAndFileName (Gbl.FileBrowser.Clipboard.FilFolLnk.Full,
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Path,
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Name);
/* Set clipboard level
(number of slashes in full path, including file or folder) */
- Gbl.FileBrowser.Clipboard.Level = Brw_NumLevelsInPath (Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.Level = Brw_NumLevelsInPath (Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
}
}
@@ -7791,7 +7790,7 @@ void Brw_PasteIntoFileBrowser (void)
// 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
+// Path (file or folder): Gbl.FileBrowser.Clipboard.FilFolLnk.Full
// Destination:
// Type of file browser: Gbl.FileBrowser.Type
// Possible institution: Gbl.Hierarchy.Ins.InsCod
@@ -7840,7 +7839,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_INS_PRIVATE,
(unsigned) (Ins.InsCod % 100),
(unsigned) Ins.InsCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7853,7 +7852,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_CTR_PRIVATE,
(unsigned) (Ctr.CtrCod % 100),
(unsigned) Ctr.CtrCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7866,7 +7865,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_DEG_PRIVATE,
(unsigned) (Deg.DegCod % 100),
(unsigned) Deg.DegCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7879,7 +7878,7 @@ static void Brw_PasteClipboard (void)
snprintf (PathOrg,sizeof (PathOrg),
"%s/%ld/%s",
Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7895,7 +7894,7 @@ static void Brw_PasteClipboard (void)
"%s/%ld/%s/%ld/%s",
Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_GRP,
GrpDat.GrpCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7912,7 +7911,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_USR,
(unsigned) (Gbl.FileBrowser.Clipboard.WorksUsrCod % 100),
Gbl.FileBrowser.Clipboard.WorksUsrCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
Usr_UsrDataDestructor (&UsrDat);
}
else
@@ -7927,7 +7926,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_USR,
(unsigned) (Gbl.Usrs.Me.UsrDat.UsrCod % 100),
Gbl.Usrs.Me.UsrDat.UsrCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7941,7 +7940,7 @@ static void Brw_PasteClipboard (void)
Cfg_PATH_CRS_PRIVATE,Crs.CrsCod,Cfg_FOLDER_PRJ,
(unsigned) (PrjCod % 100),
PrjCod,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
else
Lay_ShowErrorAndExit ("The copy source does not exist.");
break;
@@ -7949,7 +7948,7 @@ static void Brw_PasteClipboard (void)
snprintf (PathOrg,sizeof (PathOrg),
"%s/%s",
Gbl.Usrs.Me.PathDir,
- Gbl.FileBrowser.Clipboard.Path);
+ Gbl.FileBrowser.Clipboard.FilFolLnk.Full);
break;
default:
Lay_ShowErrorAndExit ("Wrong file browser.");
@@ -8940,7 +8939,7 @@ static bool Brw_RcvFileInFileBrw (Brw_UploadType_t UploadType)
Gbl.FileBrowser.Level,
Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Name,
- FileNameToShow);
+ FileNameToShow); // Folder name
Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_file_X_has_been_placed_inside_the_folder_Y,
Gbl.FileBrowser.NewFilFolLnkName,
@@ -9125,7 +9124,7 @@ void Brw_RecLinkFileBrowser (void)
Gbl.FileBrowser.Level,
Brw_IS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Name,
- FileNameToShow);
+ FileNameToShow); // Folder name
Ale_ShowAlert (Ale_SUCCESS,Txt_The_link_X_has_been_placed_inside_the_folder_Y,
FileName,FileNameToShow);
@@ -9340,8 +9339,8 @@ bool Brw_CheckIfFileOrFolderIsHidden (struct FileMetadata *FileMetadata)
FileMetadata->FileBrowser,
FileMetadata->Cod,
FileMetadata->ZoneUsrCod,
- FileMetadata->FullPathInTree,
- FileMetadata->FullPathInTree) != 0);
+ FileMetadata->FilFolLnk.Full,
+ FileMetadata->FilFolLnk.Full) != 0);
}
/*****************************************************************************/
@@ -9396,8 +9395,8 @@ void Brw_ShowFileMetadata (void)
{
if (FileMetadata.FilCod <= 0) // No entry for this file in database table of files
/* Add entry to the table of files/folders */
- FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FileType,
- FileMetadata.FullPathInTree,
+ FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FilFolLnk.Type,
+ FileMetadata.FilFolLnk.Full,
false,Brw_LICENSE_DEFAULT);
/***** Check if I can view this file.
@@ -9429,8 +9428,8 @@ void Brw_ShowFileMetadata (void)
if (ICanView)
{
- if (FileMetadata.FileType == Brw_IS_FILE ||
- FileMetadata.FileType == Brw_IS_LINK)
+ if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
+ FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{
/***** Update number of views *****/
Brw_GetAndUpdateFileViews (&FileMetadata);
@@ -9452,8 +9451,8 @@ void Brw_ShowFileMetadata (void)
Gbl.FileBrowser.Type == Brw_SHOW_MRK_GRP)
URL[0] = '\0';
else
- Brw_GetLinkToDownloadFile (FileMetadata.PathInTreeUntilFilFolLnk,
- FileMetadata.FilFolLnkName,
+ Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path,
+ FileMetadata.FilFolLnk.Name,
URL);
/***** Can I edit the properties of the file? *****/
@@ -9461,8 +9460,8 @@ void Brw_ShowFileMetadata (void)
ICanEdit = Brw_CheckIfICanEditFileMetadata (IAmTheOwner);
/***** Name of the file/link to be shown *****/
- Brw_GetFileNameToShow (FileMetadata.FileType,
- FileMetadata.FilFolLnkName,
+ Brw_GetFileNameToShow (FileMetadata.FilFolLnk.Type,
+ FileMetadata.FilFolLnk.Name,
FileNameToShow);
/***** Start form to update the metadata of a file *****/
@@ -9786,7 +9785,7 @@ void Brw_DownloadFile (void)
{
if (FileMetadata.FilCod <= 0) // No entry for this file in database table of files
/* Add entry to the table of files/folders */
- FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FileType,
+ FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full,
false,Brw_LICENSE_DEFAULT);
@@ -9819,8 +9818,8 @@ void Brw_DownloadFile (void)
if (ICanView)
{
- if (FileMetadata.FileType == Brw_IS_FILE ||
- FileMetadata.FileType == Brw_IS_LINK)
+ if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
+ FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{
/***** Update number of views *****/
Brw_GetAndUpdateFileViews (&FileMetadata);
@@ -10003,16 +10002,16 @@ static void Brw_WriteBigLinkToDownloadFile (const char *URL,
/* Form to see marks */
Frm_StartForm (Gbl.FileBrowser.Type == Brw_SHOW_MRK_CRS ? ActSeeMyMrkCrs :
ActSeeMyMrkGrp);
- Str_Copy (Gbl.FileBrowser.FilFolLnk.Path,FileMetadata->PathInTreeUntilFilFolLnk,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Path,FileMetadata->FilFolLnk.Path,
PATH_MAX);
- Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata->FilFolLnkName,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata->FilFolLnk.Name,
NAME_MAX);
- Gbl.FileBrowser.FilFolLnk.Type = FileMetadata->FileType;
+ Gbl.FileBrowser.FilFolLnk.Type = FileMetadata->FilFolLnk.Type;
Brw_PutImplicitParamsFileBrowser ();
/* Link begin */
Frm_LinkFormSubmit (Txt_Check_marks_in_the_file,"FILENAME_TXT",NULL);
- Brw_PutIconFile (32,FileMetadata->FileType,FileMetadata->FilFolLnkName);
+ Brw_PutIconFile (32,FileMetadata->FilFolLnk.Type,FileMetadata->FilFolLnk.Name);
/* Name of the file of marks, link end and form end */
fprintf (Gbl.F.Out," %s "
@@ -10026,14 +10025,14 @@ static void Brw_WriteBigLinkToDownloadFile (const char *URL,
}
else
{
- Title = (FileMetadata->FileType == Brw_IS_LINK) ? URL : // If it's a link, show full URL in title
+ Title = (FileMetadata->FilFolLnk.Type == Brw_IS_LINK) ? URL : // If it's a link, show full URL in title
Txt_Download;
/* Put anchor and filename */
fprintf (Gbl.F.Out,"",
URL,Title);
- Brw_PutIconFile (32,FileMetadata->FileType,FileMetadata->FilFolLnkName);
+ Brw_PutIconFile (32,FileMetadata->FilFolLnk.Type,FileMetadata->FilFolLnk.Name);
fprintf (Gbl.F.Out," %s "
"PathInTreeUntilFilFolLnk,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Path,FileMetadata->FilFolLnk.Path,
PATH_MAX);
- Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata->FilFolLnkName,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata->FilFolLnk.Name,
NAME_MAX);
- Gbl.FileBrowser.FilFolLnk.Type = FileMetadata->FileType;
+ Gbl.FileBrowser.FilFolLnk.Type = FileMetadata->FilFolLnk.Type;
Brw_PutImplicitParamsFileBrowser ();
/* Link begin */
@@ -10197,7 +10196,7 @@ void Brw_ChgFileMetadata (void)
Gbl.FileBrowser.FilFolLnk.Full,
PublicFileAfterEdition,License);
else // No entry in database
- FileMetadata.FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,FileMetadata.FileType,
+ FileMetadata.FilCod = Brw_AddPathToDB (Gbl.Usrs.Me.UsrDat.UsrCod,FileMetadata.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full,
PublicFileAfterEdition,License);
@@ -10360,17 +10359,17 @@ void Brw_GetFileMetadataByPath (struct FileMetadata *FileMetadata)
FileMetadata->PublisherUsrCod = Str_ConvertStrCodToLongCod (row[4]);
/* Get file type (row[5]) */
- FileMetadata->FileType = Brw_IS_UNKNOWN; // default
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN; // default
if (sscanf (row[5],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Brw_NUM_FILE_TYPES)
- FileMetadata->FileType = (Brw_FileType_t) UnsignedNum;
+ FileMetadata->FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
/* Get path (row[6]) */
- Str_Copy (FileMetadata->FullPathInTree,row[6],
+ Str_Copy (FileMetadata->FilFolLnk.Full,row[6],
PATH_MAX);
- Str_SplitFullPathIntoPathAndFileName (FileMetadata->FullPathInTree,
- FileMetadata->PathInTreeUntilFilFolLnk,
- FileMetadata->FilFolLnkName);
+ Str_SplitFullPathIntoPathAndFileName (FileMetadata->FilFolLnk.Full,
+ FileMetadata->FilFolLnk.Path,
+ FileMetadata->FilFolLnk.Name);
/* File is hidden? (row[7]) */
switch (Gbl.FileBrowser.Type)
@@ -10425,10 +10424,10 @@ void Brw_GetFileMetadataByPath (struct FileMetadata *FileMetadata)
FileMetadata->Cod = -1L;
FileMetadata->ZoneUsrCod = -1L;
FileMetadata->PublisherUsrCod = -1L;
- FileMetadata->FileType = Brw_IS_UNKNOWN;
- FileMetadata->FullPathInTree[0] = '\0';
- FileMetadata->PathInTreeUntilFilFolLnk[0] = '\0';
- FileMetadata->FilFolLnkName[0] = '\0';
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN;
+ FileMetadata->FilFolLnk.Full[0] = '\0';
+ FileMetadata->FilFolLnk.Path[0] = '\0';
+ FileMetadata->FilFolLnk.Name[0] = '\0';
FileMetadata->IsHidden = false;
FileMetadata->IsPublic = false;
FileMetadata->License = Brw_LICENSE_DEFAULT;
@@ -10489,17 +10488,17 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata)
FileMetadata->PublisherUsrCod = Str_ConvertStrCodToLongCod (row[4]);
/* Get file type (row[5]) */
- FileMetadata->FileType = Brw_IS_UNKNOWN; // default
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN; // default
if (sscanf (row[5],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Brw_NUM_FILE_TYPES)
- FileMetadata->FileType = (Brw_FileType_t) UnsignedNum;
+ FileMetadata->FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
/* Get path (row[6]) */
- Str_Copy (FileMetadata->FullPathInTree,row[6],
+ Str_Copy (FileMetadata->FilFolLnk.Full,row[6],
PATH_MAX);
- Str_SplitFullPathIntoPathAndFileName (FileMetadata->FullPathInTree,
- FileMetadata->PathInTreeUntilFilFolLnk,
- FileMetadata->FilFolLnkName);
+ Str_SplitFullPathIntoPathAndFileName (FileMetadata->FilFolLnk.Full,
+ FileMetadata->FilFolLnk.Path,
+ FileMetadata->FilFolLnk.Name);
/* Is a hidden file? (row[7]) */
switch (Gbl.FileBrowser.Type)
@@ -10554,10 +10553,10 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata)
FileMetadata->Cod = -1L;
FileMetadata->ZoneUsrCod = -1L;
FileMetadata->PublisherUsrCod = -1L;
- FileMetadata->FileType = Brw_IS_UNKNOWN;
- FileMetadata->FullPathInTree[0] = '\0';
- FileMetadata->PathInTreeUntilFilFolLnk[0] = '\0';
- FileMetadata->FilFolLnkName[0] = '\0';
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN;
+ FileMetadata->FilFolLnk.Full[0] = '\0';
+ FileMetadata->FilFolLnk.Path[0] = '\0';
+ FileMetadata->FilFolLnk.Name[0] = '\0';
FileMetadata->IsHidden = false;
FileMetadata->IsPublic = false;
FileMetadata->License = Brw_LICENSE_DEFAULT;
@@ -10588,11 +10587,11 @@ bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata)
snprintf (Path,sizeof (Path),
"%s/%s",
Gbl.FileBrowser.Priv.PathAboveRootFolder,
- FileMetadata->FullPathInTree);
+ FileMetadata->FilFolLnk.Full);
if (lstat (Path,&FileStatus)) // On success ==> 0 is returned
{
// Error on lstat
- FileMetadata->FileType = Brw_IS_UNKNOWN;
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN;
FileMetadata->Size = (off_t) 0;
FileMetadata->Time = (time_t) 0;
return false;
@@ -10600,12 +10599,12 @@ bool Brw_GetFileTypeSizeAndDate (struct FileMetadata *FileMetadata)
else
{
if (S_ISDIR (FileStatus.st_mode))
- FileMetadata->FileType = Brw_IS_FOLDER;
+ FileMetadata->FilFolLnk.Type = Brw_IS_FOLDER;
else if (S_ISREG (FileStatus.st_mode))
- FileMetadata->FileType = Str_FileIs (FileMetadata->FullPathInTree,"url") ? Brw_IS_LINK :
- Brw_IS_FILE;
+ FileMetadata->FilFolLnk.Type = Str_FileIs (FileMetadata->FilFolLnk.Full,"url") ? Brw_IS_LINK :
+ Brw_IS_FILE;
else
- FileMetadata->FileType = Brw_IS_UNKNOWN;
+ FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN;
FileMetadata->Size = FileStatus.st_size;
FileMetadata->Time = FileStatus.st_mtime;
return true;
@@ -11714,7 +11713,7 @@ void Brw_GetSummaryAndContentOfFile (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
Brw_GetFileMetadataByCod (&FileMetadata);
/***** Copy file name into summary string *****/
- Str_Copy (SummaryStr,FileMetadata.FilFolLnkName,
+ Str_Copy (SummaryStr,FileMetadata.FilFolLnk.Name,
Ntf_MAX_BYTES_SUMMARY);
/***** Copy some file metadata into content string *****/
@@ -11735,8 +11734,8 @@ void Brw_GetSummaryAndContentOfFile (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
if (asprintf (ContentStr,"%s: %s
" // File name
"%s: %s
" // File path
"%s: %s", // Publisher
- Txt_Filename,FileMetadata.FilFolLnkName,
- Txt_Folder,FileMetadata.PathInTreeUntilFilFolLnk, // TODO: Fix bug: do not write internal name (for example "comun")
+ Txt_Filename,FileMetadata.FilFolLnk.Name,
+ Txt_Folder,FileMetadata.FilFolLnk.Path, // TODO: Fix bug: do not write internal name (for example "comun")
Txt_Uploaded_by,
FileHasPublisher ? PublisherUsrDat.FullName :
Txt_ROLES_SINGUL_Abc[Rol_UNK][Usr_SEX_UNKNOWN]) < 0)
@@ -12041,8 +12040,8 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row)
BgColor,Title);
/***** Get the name of the file to show *****/
- Brw_GetFileNameToShow (FileMetadata.FileType,
- FileMetadata.FilFolLnkName,
+ Brw_GetFileNameToShow (FileMetadata.FilFolLnk.Type,
+ FileMetadata.FilFolLnk.Name,
FileNameToShow);
/***** Write file name using path (row[1]) *****/
@@ -12078,7 +12077,7 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row)
Frm_StartForm (Action);
/* Parameters to go to file / folder */
- if (FileMetadata.FileType == Brw_IS_FOLDER)
+ if (FileMetadata.FilFolLnk.Type == Brw_IS_FOLDER)
Brw_PutImplicitParamsFileBrowser ();
else
Brw_PutParamsFileBrowser (NULL, // Not used
@@ -12088,7 +12087,7 @@ static void Brw_WriteRowDocData (unsigned long *NumDocsNotHidden,MYSQL_ROW row)
/* File or folder icon */
Frm_LinkFormSubmit (FileNameToShow,"DAT_N",NULL);
- if (FileMetadata.FileType == Brw_IS_FOLDER)
+ if (FileMetadata.FilFolLnk.Type == Brw_IS_FOLDER)
/* Icon with folder */
fprintf (Gbl.F.Out,"",
FileNameToShow);
diff --git a/swad_file_browser.h b/swad_file_browser.h
index b3e0b3637..d2ec3b057 100644
--- a/swad_file_browser.h
+++ b/swad_file_browser.h
@@ -113,6 +113,14 @@ typedef enum
Brw_ICON_EDIT = 2
} Brw_IconViewEdit_t;
+struct FilFolLnk
+ {
+ char Full[PATH_MAX + 1]; // Full path = Path/Name
+ char Path[PATH_MAX + 1]; // Path in tree, without ending '/', until file, folder or link name
+ char Name[NAME_MAX + 1]; // File, folder or link name
+ Brw_FileType_t Type;
+ };
+
struct FileMetadata
{
long FilCod;
@@ -120,14 +128,10 @@ struct FileMetadata
long Cod; // Code of institution, centre, degree, course or group
long ZoneUsrCod;
long PublisherUsrCod;
- char FullPathInTree[PATH_MAX + 1];
- // FullPathInTree is splitted as PathInTreeUntilFilFolLnk/FilFolLnkName
- char PathInTreeUntilFilFolLnk[PATH_MAX + 1]; // Path in tree, without ending '/', until file, folder or link name
- char FilFolLnkName[NAME_MAX + 1]; // File, folder or link name
+ struct FilFolLnk FilFolLnk;
bool IsHidden;
bool IsPublic;
Brw_License_t License;
- Brw_FileType_t FileType;
off_t Size;
time_t Time;
unsigned NumMyViews;
diff --git a/swad_global.h b/swad_global.h
index bf525fb4a..5d7b6378e 100644
--- a/swad_global.h
+++ b/swad_global.h
@@ -509,13 +509,7 @@ struct Globals
char PathRootFolder[PATH_MAX + 1];
} Priv;
char NewFilFolLnkName[NAME_MAX + 1];
- struct
- {
- char Full[PATH_MAX + 1]; // Full path in tree, including filename
- char Path[PATH_MAX + 1]; // Path in tree above filename
- char Name[NAME_MAX + 1]; // Filename
- Brw_FileType_t Type;
- } FilFolLnk;
+ struct FilFolLnk FilFolLnk;
unsigned Level;
bool ICanEditFileOrFolder; // Can I modify (remove, rename, create inside, etc.) a file or folder?
Brw_IconViewEdit_t IconViewEdit;
@@ -524,10 +518,8 @@ struct Globals
Brw_FileBrowser_t FileBrowser; // Type of the file browser
long Cod; // Code of the institution/centre/degree/course/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
- char FileName[NAME_MAX + 1]; // File name, last part of complete path in the file browser
unsigned Level;
- Brw_FileType_t FileType; // Folder, file or link
+ struct FilFolLnk FilFolLnk;
bool IsThisTree; // When showing a file browser, is it that corresponding to the clipboard?
bool IsThisFile; // When showing a row of a file browser, are we in the path of the clipboard?
} Clipboard;
diff --git a/swad_web_service.c b/swad_web_service.c
index e34494eb6..7739a19b9 100644
--- a/swad_web_service.c
+++ b/swad_web_service.c
@@ -4570,7 +4570,7 @@ static bool Svc_WriteRowFileBrowser (unsigned Level,Brw_FileType_t FileType,cons
if (FileMetadata.FilCod <= 0) // No entry for this file in database table of files
/* Add entry to the table of files/folders */
- FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FileType,
+ FileMetadata.FilCod = Brw_AddPathToDB (-1L,FileMetadata.FilFolLnk.Type,
Gbl.FileBrowser.FilFolLnk.Full,false,Brw_LICENSE_DEFAULT);
Gbl.Usrs.Other.UsrDat.UsrCod = FileMetadata.PublisherUsrCod;
@@ -4726,9 +4726,9 @@ int swad__getFile (struct soap *soap,
/***** Set paths *****/
Hie_InitHierarchy ();
Brw_InitializeFileBrowser ();
- Str_Copy (Gbl.FileBrowser.FilFolLnk.Path,FileMetadata.PathInTreeUntilFilFolLnk,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Path,FileMetadata.FilFolLnk.Path,
PATH_MAX);
- Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata.FilFolLnkName,
+ Str_Copy (Gbl.FileBrowser.FilFolLnk.Name,FileMetadata.FilFolLnk.Name,
NAME_MAX);
Brw_SetFullPathInTree ();
@@ -4739,12 +4739,12 @@ int swad__getFile (struct soap *soap,
Brw_GetAndUpdateFileViews (&FileMetadata);
/***** Create and get link to download the file *****/
- Brw_GetLinkToDownloadFile (FileMetadata.PathInTreeUntilFilFolLnk,
- FileMetadata.FilFolLnkName,
+ Brw_GetLinkToDownloadFile (FileMetadata.FilFolLnk.Path,
+ FileMetadata.FilFolLnk.Name,
URL);
/***** Copy data into output structure *****/
- Str_Copy (getFileOut->fileName,FileMetadata.FilFolLnkName,
+ Str_Copy (getFileOut->fileName,FileMetadata.FilFolLnk.Name,
NAME_MAX);
Str_Copy (getFileOut->URL,URL,
@@ -4804,7 +4804,7 @@ int swad__getMarks (struct soap *soap,
FileMetadata.FilCod = (long) fileCode;
Brw_GetFileMetadataByCod (&FileMetadata);
- if (FileMetadata.FileType != Brw_IS_FILE ||
+ if (FileMetadata.FilFolLnk.Type != Brw_IS_FILE ||
FileMetadata.IsHidden ||
(FileMetadata.FileBrowser != Brw_ADMI_MRK_CRS &&
FileMetadata.FileBrowser != Brw_ADMI_MRK_GRP))