mirror of https://github.com/acanas/swad-core.git
Version 22.78.4: Mar 22, 2023 Code refactoring in file browser.
This commit is contained in:
parent
bad934242f
commit
3c0524d640
326
swad_browser.c
326
swad_browser.c
|
@ -1183,6 +1183,10 @@ static void Brw_WriteSmallLinkToDownloadFile (const char *URL,
|
||||||
const char *FileNameToShow);
|
const char *FileNameToShow);
|
||||||
static bool Brw_GetParPublicFile (void);
|
static bool Brw_GetParPublicFile (void);
|
||||||
static Brw_License_t Brw_GetParLicense (void);
|
static Brw_License_t Brw_GetParLicense (void);
|
||||||
|
|
||||||
|
static void Brw_ResetFileMetadata (struct Brw_FileMetadata *FileMetadata);
|
||||||
|
static void Brw_GetFileMetadataFromRow (MYSQL_RES *mysql_res,
|
||||||
|
struct Brw_FileMetadata *FileMetadata);
|
||||||
static void Brw_GetFileViewsFromLoggedUsrs (struct Brw_FileMetadata *FileMetadata);
|
static void Brw_GetFileViewsFromLoggedUsrs (struct Brw_FileMetadata *FileMetadata);
|
||||||
static unsigned Brw_GetFileViewsFromMe (long FilCod);
|
static unsigned Brw_GetFileViewsFromMe (long FilCod);
|
||||||
|
|
||||||
|
@ -8412,118 +8416,15 @@ static Brw_License_t Brw_GetParLicense (void)
|
||||||
void Brw_GetFileMetadataByPath (struct Brw_FileMetadata *FileMetadata)
|
void Brw_GetFileMetadataByPath (struct Brw_FileMetadata *FileMetadata)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned UnsignedNum;
|
|
||||||
|
|
||||||
/***** Get metadata of a file from database *****/
|
/***** Get metadata of a file from database *****/
|
||||||
if (Brw_DB_GetFileMetadataByPath (&mysql_res,Gbl.FileBrowser.FilFolLnk.Full))
|
if (Brw_DB_GetFileMetadataByPath (&mysql_res,Gbl.FileBrowser.FilFolLnk.Full))
|
||||||
{
|
{
|
||||||
/* Get row */
|
Brw_ResetFileMetadata (FileMetadata);
|
||||||
row = mysql_fetch_row (mysql_res);
|
Brw_GetFileMetadataFromRow (mysql_res,FileMetadata);
|
||||||
|
|
||||||
/* Get file code (row[0]) */
|
|
||||||
FileMetadata->FilCod = Str_ConvertStrCodToLongCod (row[0]);
|
|
||||||
|
|
||||||
/* Get file browser type in database (row[1]) */
|
|
||||||
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
|
||||||
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_TYPES_FILE_BROWSER)
|
|
||||||
FileMetadata->FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get institution/center/degree/course/group code (row[2]) */
|
|
||||||
FileMetadata->Cod = Str_ConvertStrCodToLongCod (row[2]);
|
|
||||||
|
|
||||||
/* Get the user's code of the owner of a zone of files (row[3]) */
|
|
||||||
FileMetadata->ZoneUsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
|
||||||
|
|
||||||
/* Get publisher's code (row[4]) */
|
|
||||||
FileMetadata->PublisherUsrCod = Str_ConvertStrCodToLongCod (row[4]);
|
|
||||||
|
|
||||||
/* Get file type (row[5]) */
|
|
||||||
FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN; // default
|
|
||||||
if (sscanf (row[5],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_FILE_TYPES)
|
|
||||||
FileMetadata->FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get path (row[6]) */
|
|
||||||
Str_Copy (FileMetadata->FilFolLnk.Full,row[6],
|
|
||||||
sizeof (FileMetadata->FilFolLnk.Full) - 1);
|
|
||||||
Str_SplitFullPathIntoPathAndFileName (FileMetadata->FilFolLnk.Full,
|
|
||||||
FileMetadata->FilFolLnk.Path,
|
|
||||||
FileMetadata->FilFolLnk.Name);
|
|
||||||
|
|
||||||
/* File is hidden? (row[7]) */
|
|
||||||
switch (Gbl.FileBrowser.Type)
|
|
||||||
{
|
|
||||||
case Brw_SHOW_DOC_INS:
|
|
||||||
case Brw_ADMI_DOC_INS:
|
|
||||||
case Brw_SHOW_DOC_CTR:
|
|
||||||
case Brw_ADMI_DOC_CTR:
|
|
||||||
case Brw_SHOW_DOC_DEG:
|
|
||||||
case Brw_ADMI_DOC_DEG:
|
|
||||||
case Brw_SHOW_DOC_CRS:
|
|
||||||
case Brw_ADMI_DOC_CRS:
|
|
||||||
FileMetadata->IsHidden = (row[7][0] == 'Y');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FileMetadata->IsHidden = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Is a public file? (row[8]) */
|
|
||||||
switch (Gbl.FileBrowser.Type)
|
|
||||||
{
|
|
||||||
case Brw_SHOW_DOC_INS:
|
|
||||||
case Brw_ADMI_DOC_INS:
|
|
||||||
case Brw_ADMI_SHR_INS:
|
|
||||||
case Brw_SHOW_DOC_CTR:
|
|
||||||
case Brw_ADMI_DOC_CTR:
|
|
||||||
case Brw_ADMI_SHR_CTR:
|
|
||||||
case Brw_SHOW_DOC_DEG:
|
|
||||||
case Brw_ADMI_DOC_DEG:
|
|
||||||
case Brw_ADMI_SHR_DEG:
|
|
||||||
case Brw_SHOW_DOC_CRS:
|
|
||||||
case Brw_ADMI_DOC_CRS:
|
|
||||||
case Brw_ADMI_SHR_CRS:
|
|
||||||
FileMetadata->IsPublic = (row[8][0] == 'Y');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FileMetadata->IsPublic = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get license (row[9]) */
|
|
||||||
FileMetadata->License = Brw_LICENSE_UNKNOWN;
|
|
||||||
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_LICENSES)
|
|
||||||
FileMetadata->License = (Brw_License_t) UnsignedNum;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
Brw_ResetFileMetadata (FileMetadata);
|
||||||
FileMetadata->FilCod = -1L;
|
|
||||||
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
|
||||||
FileMetadata->Cod = -1L;
|
|
||||||
FileMetadata->ZoneUsrCod = -1L;
|
|
||||||
FileMetadata->PublisherUsrCod = -1L;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
|
||||||
|
|
||||||
/***** Fill some values with 0 (unused at this moment) *****/
|
|
||||||
FileMetadata->Size = (off_t) 0;
|
|
||||||
FileMetadata->Time = (time_t) 0;
|
|
||||||
FileMetadata->NumMyViews =
|
|
||||||
FileMetadata->NumPublicViews =
|
|
||||||
FileMetadata->NumViewsFromLoggedUsrs =
|
|
||||||
FileMetadata->NumLoggedUsrs = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -8536,120 +8437,137 @@ void Brw_GetFileMetadataByPath (struct Brw_FileMetadata *FileMetadata)
|
||||||
void Brw_GetFileMetadataByCod (struct Brw_FileMetadata *FileMetadata)
|
void Brw_GetFileMetadataByCod (struct Brw_FileMetadata *FileMetadata)
|
||||||
{
|
{
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned UnsignedNum;
|
|
||||||
|
|
||||||
/***** Get metadata of a file from database *****/
|
/***** Get metadata of a file from database *****/
|
||||||
if (Brw_DB_GetFileMetadataByCod (&mysql_res,FileMetadata->FilCod))
|
if (Brw_DB_GetFileMetadataByCod (&mysql_res,FileMetadata->FilCod))
|
||||||
{
|
{
|
||||||
/* Get row */
|
Brw_ResetFileMetadata (FileMetadata);
|
||||||
row = mysql_fetch_row (mysql_res);
|
Brw_GetFileMetadataFromRow (mysql_res,FileMetadata);
|
||||||
|
|
||||||
/* Get file code (row[0]) */
|
|
||||||
FileMetadata->FilCod = Str_ConvertStrCodToLongCod (row[0]);
|
|
||||||
|
|
||||||
/* Get file browser type in database (row[1]) */
|
|
||||||
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
|
||||||
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_TYPES_FILE_BROWSER)
|
|
||||||
FileMetadata->FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get institution/center/degree/course/group code (row[2]) */
|
|
||||||
FileMetadata->Cod = Str_ConvertStrCodToLongCod (row[2]);
|
|
||||||
|
|
||||||
/* Get the user's code of the owner of a zone of files (row[3]) */
|
|
||||||
FileMetadata->ZoneUsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
|
||||||
|
|
||||||
/* Get publisher's code (row[4]) */
|
|
||||||
FileMetadata->PublisherUsrCod = Str_ConvertStrCodToLongCod (row[4]);
|
|
||||||
|
|
||||||
/* Get file type (row[5]) */
|
|
||||||
FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN; // default
|
|
||||||
if (sscanf (row[5],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_FILE_TYPES)
|
|
||||||
FileMetadata->FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get path (row[6]) */
|
|
||||||
Str_Copy (FileMetadata->FilFolLnk.Full,row[6],
|
|
||||||
sizeof (FileMetadata->FilFolLnk.Full) - 1);
|
|
||||||
Str_SplitFullPathIntoPathAndFileName (FileMetadata->FilFolLnk.Full,
|
|
||||||
FileMetadata->FilFolLnk.Path,
|
|
||||||
FileMetadata->FilFolLnk.Name);
|
|
||||||
|
|
||||||
/* Is a hidden file? (row[7]) */
|
|
||||||
switch (Gbl.FileBrowser.Type)
|
|
||||||
{
|
|
||||||
case Brw_SHOW_DOC_INS:
|
|
||||||
case Brw_ADMI_DOC_INS:
|
|
||||||
case Brw_SHOW_DOC_CTR:
|
|
||||||
case Brw_ADMI_DOC_CTR:
|
|
||||||
case Brw_SHOW_DOC_DEG:
|
|
||||||
case Brw_ADMI_DOC_DEG:
|
|
||||||
case Brw_SHOW_DOC_CRS:
|
|
||||||
case Brw_ADMI_DOC_CRS:
|
|
||||||
FileMetadata->IsHidden = (row[7][0] == 'Y');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FileMetadata->IsHidden = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Is a public file? (row[8]) */
|
|
||||||
switch (Gbl.FileBrowser.Type)
|
|
||||||
{
|
|
||||||
case Brw_SHOW_DOC_INS:
|
|
||||||
case Brw_ADMI_DOC_INS:
|
|
||||||
case Brw_ADMI_SHR_INS:
|
|
||||||
case Brw_SHOW_DOC_CTR:
|
|
||||||
case Brw_ADMI_DOC_CTR:
|
|
||||||
case Brw_ADMI_SHR_CTR:
|
|
||||||
case Brw_SHOW_DOC_DEG:
|
|
||||||
case Brw_ADMI_DOC_DEG:
|
|
||||||
case Brw_ADMI_SHR_DEG:
|
|
||||||
case Brw_SHOW_DOC_CRS:
|
|
||||||
case Brw_ADMI_DOC_CRS:
|
|
||||||
case Brw_ADMI_SHR_CRS:
|
|
||||||
FileMetadata->IsPublic = (row[8][0] == 'Y');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FileMetadata->IsPublic = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get license (row[9]) */
|
|
||||||
FileMetadata->License = Brw_LICENSE_UNKNOWN;
|
|
||||||
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Brw_NUM_LICENSES)
|
|
||||||
FileMetadata->License = (Brw_License_t) UnsignedNum;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
Brw_ResetFileMetadata (FileMetadata);
|
||||||
FileMetadata->FilCod = -1L;
|
|
||||||
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
|
||||||
FileMetadata->Cod = -1L;
|
|
||||||
FileMetadata->ZoneUsrCod = -1L;
|
|
||||||
FileMetadata->PublisherUsrCod = -1L;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Free structure that stores the query result *****/
|
/***** Free structure that stores the query result *****/
|
||||||
DB_FreeMySQLResult (&mysql_res);
|
DB_FreeMySQLResult (&mysql_res);
|
||||||
|
}
|
||||||
|
|
||||||
/***** Fill some values with 0 (unused at this moment) *****/
|
/*****************************************************************************/
|
||||||
FileMetadata->Size = (off_t) 0;
|
/*************************** Reset file metadata *****************************/
|
||||||
FileMetadata->Time = (time_t) 0;
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Brw_ResetFileMetadata (struct Brw_FileMetadata *FileMetadata)
|
||||||
|
{
|
||||||
|
FileMetadata->FilCod = -1L;
|
||||||
|
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
||||||
|
FileMetadata->Cod = -1L;
|
||||||
|
FileMetadata->ZoneUsrCod = -1L;
|
||||||
|
FileMetadata->PublisherUsrCod = -1L;
|
||||||
|
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;
|
||||||
|
FileMetadata->Size = (off_t) 0;
|
||||||
|
FileMetadata->Time = (time_t) 0;
|
||||||
FileMetadata->NumMyViews =
|
FileMetadata->NumMyViews =
|
||||||
FileMetadata->NumPublicViews =
|
FileMetadata->NumPublicViews =
|
||||||
FileMetadata->NumViewsFromLoggedUsrs =
|
FileMetadata->NumViewsFromLoggedUsrs =
|
||||||
FileMetadata->NumLoggedUsrs = 0;
|
FileMetadata->NumLoggedUsrs = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********************* Get file metadata using its code **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Brw_GetFileMetadataFromRow (MYSQL_RES *mysql_res,
|
||||||
|
struct Brw_FileMetadata *FileMetadata)
|
||||||
|
{
|
||||||
|
MYSQL_ROW row;
|
||||||
|
unsigned UnsignedNum;
|
||||||
|
|
||||||
|
/***** Get row *****/
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
|
/***** Get file code (row[0]) *****/
|
||||||
|
FileMetadata->FilCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||||
|
|
||||||
|
/***** Get file browser type in database (row[1]) *****/
|
||||||
|
FileMetadata->FileBrowser = Brw_UNKNOWN;
|
||||||
|
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Brw_NUM_TYPES_FILE_BROWSER)
|
||||||
|
FileMetadata->FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
|
||||||
|
|
||||||
|
/***** Get institution/center/degree/course/group code (row[2]) *****/
|
||||||
|
FileMetadata->Cod = Str_ConvertStrCodToLongCod (row[2]);
|
||||||
|
|
||||||
|
/***** Get the user's code of the owner of a zone of files (row[3]) *****/
|
||||||
|
FileMetadata->ZoneUsrCod = Str_ConvertStrCodToLongCod (row[3]);
|
||||||
|
|
||||||
|
/***** Get publisher's code (row[4]) *****/
|
||||||
|
FileMetadata->PublisherUsrCod = Str_ConvertStrCodToLongCod (row[4]);
|
||||||
|
|
||||||
|
/***** Get file type (row[5]) *****/
|
||||||
|
FileMetadata->FilFolLnk.Type = Brw_IS_UNKNOWN; // default
|
||||||
|
if (sscanf (row[5],"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Brw_NUM_FILE_TYPES)
|
||||||
|
FileMetadata->FilFolLnk.Type = (Brw_FileType_t) UnsignedNum;
|
||||||
|
|
||||||
|
/***** Get path (row[6]) *****/
|
||||||
|
Str_Copy (FileMetadata->FilFolLnk.Full,row[6],
|
||||||
|
sizeof (FileMetadata->FilFolLnk.Full) - 1);
|
||||||
|
Str_SplitFullPathIntoPathAndFileName (FileMetadata->FilFolLnk.Full,
|
||||||
|
FileMetadata->FilFolLnk.Path,
|
||||||
|
FileMetadata->FilFolLnk.Name);
|
||||||
|
|
||||||
|
/***** File is hidden? (row[7]) *****/
|
||||||
|
switch (Gbl.FileBrowser.Type)
|
||||||
|
{
|
||||||
|
case Brw_SHOW_DOC_INS:
|
||||||
|
case Brw_ADMI_DOC_INS:
|
||||||
|
case Brw_SHOW_DOC_CTR:
|
||||||
|
case Brw_ADMI_DOC_CTR:
|
||||||
|
case Brw_SHOW_DOC_DEG:
|
||||||
|
case Brw_ADMI_DOC_DEG:
|
||||||
|
case Brw_SHOW_DOC_CRS:
|
||||||
|
case Brw_ADMI_DOC_CRS:
|
||||||
|
FileMetadata->IsHidden = (row[7][0] == 'Y');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FileMetadata->IsHidden = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Is a public file? (row[8]) *****/
|
||||||
|
switch (Gbl.FileBrowser.Type)
|
||||||
|
{
|
||||||
|
case Brw_SHOW_DOC_INS:
|
||||||
|
case Brw_ADMI_DOC_INS:
|
||||||
|
case Brw_ADMI_SHR_INS:
|
||||||
|
case Brw_SHOW_DOC_CTR:
|
||||||
|
case Brw_ADMI_DOC_CTR:
|
||||||
|
case Brw_ADMI_SHR_CTR:
|
||||||
|
case Brw_SHOW_DOC_DEG:
|
||||||
|
case Brw_ADMI_DOC_DEG:
|
||||||
|
case Brw_ADMI_SHR_DEG:
|
||||||
|
case Brw_SHOW_DOC_CRS:
|
||||||
|
case Brw_ADMI_DOC_CRS:
|
||||||
|
case Brw_ADMI_SHR_CRS:
|
||||||
|
FileMetadata->IsPublic = (row[8][0] == 'Y');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FileMetadata->IsPublic = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Get license (row[9]) *****/
|
||||||
|
FileMetadata->License = Brw_LICENSE_UNKNOWN;
|
||||||
|
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Brw_NUM_LICENSES)
|
||||||
|
FileMetadata->License = (Brw_License_t) UnsignedNum;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********************** Get file name using its code ************************/
|
/*********************** Get file name using its code ************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -302,7 +302,6 @@ unsigned Brw_DB_GetFileMetadataByPath (MYSQL_RES **mysql_res,const char *Path)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********************* Get file metadata using its code **********************/
|
/********************* Get file metadata using its code **********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
// This function only gets metadata stored in table files,
|
// This function only gets metadata stored in table files,
|
||||||
// does not get size, time, numviews...
|
// does not get size, time, numviews...
|
||||||
|
|
||||||
|
|
|
@ -629,10 +629,11 @@ TODO: Emilce Barrera Mesa: Podr
|
||||||
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
|
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 22.78.3 (2023-03-22)"
|
#define Log_PLATFORM_VERSION "SWAD 22.78.4 (2023-03-22)"
|
||||||
#define CSS_FILE "swad22.57.1.css"
|
#define CSS_FILE "swad22.57.1.css"
|
||||||
#define JS_FILE "swad22.49.js"
|
#define JS_FILE "swad22.49.js"
|
||||||
/*
|
/*
|
||||||
|
Version 22.78.4: Mar 22, 2023 Code refactoring in file browser. (337693 lines)
|
||||||
Version 22.78.3: Mar 22, 2023 Code refactoring. (337767 lines)
|
Version 22.78.3: Mar 22, 2023 Code refactoring. (337767 lines)
|
||||||
Version 22.78.2: Mar 22, 2023 Code refactoring in attendance. (337779 lines)
|
Version 22.78.2: Mar 22, 2023 Code refactoring in attendance. (337779 lines)
|
||||||
Version 22.78.1: Mar 22, 2023 Code refactoring in exam sets and announcements. (337781 lines)
|
Version 22.78.1: Mar 22, 2023 Code refactoring in exam sets and announcements. (337781 lines)
|
||||||
|
|
Loading…
Reference in New Issue