mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-17 05:55:43 +02:00
Version 14.67.1
This commit is contained in:
parent
2296f89ac1
commit
0358f6ca96
|
@ -39,11 +39,12 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.67 (2015/01/25)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.67.1 (2015/01/25)"
|
||||
|
||||
// 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
|
||||
/*
|
||||
Version 14.67.1: Jan 25, 2015 Fixed bugs in file browsers. (175395 lines)
|
||||
Version 14.67: Jan 25, 2015 Changes in files table. (175369 lines)
|
||||
16 changes necessary in database:
|
||||
ALTER TABLE files ADD COLUMN ZoneUsrCod2 INT NOT NULL DEFAULT -1 AFTER FileBrowser;
|
||||
|
|
|
@ -96,7 +96,7 @@ const char *Brw_Licenses_DB[Brw_NUM_LICENSES] =
|
|||
};
|
||||
*/
|
||||
// Brosers types for database "files" table
|
||||
static const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER] =
|
||||
const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER] =
|
||||
{
|
||||
Brw_FILE_BRW_UNKNOWN, // Brw_FILE_BRW_UNKNOWN = 0,
|
||||
Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS, // Brw_FILE_BRW_SEE_DOCUMENTS_CRS = 1,
|
||||
|
@ -1331,7 +1331,6 @@ static void Brw_ChangeFileOrFolderHiddenInDB (const char *Path,bool IsHidden);
|
|||
static void Brw_ChangeFilePublicInDB (long PublisherUsrCod,const char *Path,
|
||||
bool IsPublic,Brw_License_t License);
|
||||
|
||||
static long Brw_GetCodForFiles (void);
|
||||
static long Brw_GetZoneUsrCodForFiles (void);
|
||||
|
||||
static void Brw_RemoveOneFileOrFolderFromDB (const char *Path);
|
||||
|
@ -6899,6 +6898,8 @@ static bool Brw_PasteTreeIntoFolder (const char *PathOrg,const char *PathDstInTr
|
|||
char PathDstWithFile[PATH_MAX+1];
|
||||
struct stat FileStatus;
|
||||
struct dirent **FileList;
|
||||
bool AdminMarks;
|
||||
struct MarksProperties Marks;
|
||||
int NumFileInThisDir;
|
||||
int NumFilesInThisDir;
|
||||
unsigned NumLevls;
|
||||
|
@ -6972,16 +6973,21 @@ static bool Brw_PasteTreeIntoFolder (const char *PathOrg,const char *PathDstInTr
|
|||
}
|
||||
|
||||
/***** If the target file browser is that of marks, only HTML files are allowed *****/
|
||||
if (Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_MARKS_CRS ||
|
||||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_MARKS_GRP)
|
||||
AdminMarks = Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_MARKS_CRS ||
|
||||
Gbl.FileBrowser.Type == Brw_FILE_BRW_ADMIN_MARKS_GRP;
|
||||
if (AdminMarks)
|
||||
{
|
||||
/* Check extension of the file */
|
||||
if (!Str_FileIsHTML (FileNameOrg))
|
||||
if (Str_FileIsHTML (FileNameOrg))
|
||||
Mrk_CheckFileOfMarks (PathOrg,&Marks); // Gbl.Message contains feedback text
|
||||
else
|
||||
{
|
||||
sprintf (Gbl.Message,Txt_The_copy_has_stopped_when_trying_to_paste_the_file_X_because_you_can_not_paste_a_file_here_of_a_type_other_than_HTML,
|
||||
FileNameToShow);
|
||||
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/***** Update and check the quota before copying the file *****/
|
||||
Gbl.FileBrowser.Size.NumFiles++;
|
||||
|
@ -7004,6 +7010,10 @@ static bool Brw_PasteTreeIntoFolder (const char *PathOrg,const char *PathDstInTr
|
|||
if (*FirstFilCod <= 0)
|
||||
*FirstFilCod = FilCod;
|
||||
|
||||
/* Add a new entry of marks into database */
|
||||
if (AdminMarks)
|
||||
Mrk_AddMarksToDB (FilCod,&Marks);
|
||||
|
||||
if (FileType == Brw_IS_FILE)
|
||||
(*NumFilesPasted)++;
|
||||
else // FileType == Brw_IS_LINK
|
||||
|
@ -9262,7 +9272,7 @@ void Brw_GetFileMetadataByCod (struct FileMetadata *FileMetadata)
|
|||
|
||||
/***** Get metadata of a file from database *****/
|
||||
sprintf (Query,"SELECT FilCod,FileBrowser,Cod,ZoneUsrCod,"
|
||||
",PublisherUsrCod,FileType,Path,Hidden,Public,License"
|
||||
"PublisherUsrCod,FileType,Path,Hidden,Public,License"
|
||||
" FROM files"
|
||||
" WHERE FilCod='%ld'",
|
||||
FileMetadata->FilCod);
|
||||
|
@ -9655,7 +9665,7 @@ static void Brw_ChangeFilePublicInDB (long PublisherUsrCod,const char *Path,
|
|||
/**** Get code of institution, degree, course, group for expanded folders ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static long Brw_GetCodForFiles (void)
|
||||
long Brw_GetCodForFiles (void)
|
||||
{
|
||||
switch (Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type])
|
||||
{
|
||||
|
@ -9705,24 +9715,25 @@ static long Brw_GetZoneUsrCodForFiles (void)
|
|||
/******** Get code of user in assignment / works for expanded folders ********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Brw_GetCrsGrpFromFileMetadata (struct FileMetadata *FileMetadata,long *CrsCod,long *GrpCod)
|
||||
void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
|
||||
long *CrsCod,long *GrpCod)
|
||||
{
|
||||
struct GroupData GrpDat;
|
||||
|
||||
switch (FileMetadata->FileBrowser)
|
||||
switch (FileBrowser)
|
||||
{
|
||||
case Brw_FILE_BRW_ADMIN_DOCUMENTS_CRS:
|
||||
case Brw_FILE_BRW_COMMON_CRS:
|
||||
case Brw_FILE_BRW_ASSIGNMENTS_USR:
|
||||
case Brw_FILE_BRW_WORKS_USR:
|
||||
case Brw_FILE_BRW_ADMIN_MARKS_CRS:
|
||||
*CrsCod = FileMetadata->Cod;
|
||||
*CrsCod = Cod;
|
||||
*GrpCod = -1L;
|
||||
break;
|
||||
case Brw_FILE_BRW_ADMIN_DOCUMENTS_GRP:
|
||||
case Brw_FILE_BRW_COMMON_GRP:
|
||||
case Brw_FILE_BRW_ADMIN_MARKS_GRP:
|
||||
*GrpCod = GrpDat.GrpCod = FileMetadata->Cod;
|
||||
*GrpCod = GrpDat.GrpCod = Cod;
|
||||
Grp_GetDataOfGroupByCod (&GrpDat);
|
||||
*CrsCod = GrpDat.CrsCod;
|
||||
break;
|
||||
|
@ -10327,7 +10338,7 @@ static void Brw_WriteRowDocData (unsigned *NumDocsNotHidden,MYSQL_ROW row)
|
|||
if (!Brw_CheckIfFileOrFolderIsHidden (&FileMetadata))
|
||||
{
|
||||
BgColor = Gbl.ColorRows[Gbl.RowEvenOdd];
|
||||
Brw_GetCrsGrpFromFileMetadata (&FileMetadata,&CrsCod,&GrpCod);
|
||||
Brw_GetCrsGrpFromFileMetadata (FileMetadata.FileBrowser,FileMetadata.Cod,&CrsCod,&GrpCod);
|
||||
if (CrsCod > 0 && CrsCod == Gbl.CurrentCrs.Crs.CrsCod)
|
||||
BgColor = VERY_LIGHT_BLUE;
|
||||
|
||||
|
|
|
@ -176,7 +176,9 @@ bool Brw_GetFileSizeAndDate (struct FileMetadata *FileMetadata);
|
|||
void Brw_GetAndUpdateFileViews (struct FileMetadata *FileMetadata);
|
||||
void Brw_UpdateMyFileViews (long FilCod);
|
||||
|
||||
void Brw_GetCrsGrpFromFileMetadata (struct FileMetadata *FileMetadata,long *CrsCod,long *GrpCod);
|
||||
long Brw_GetCodForFiles (void);
|
||||
void Brw_GetCrsGrpFromFileMetadata (Brw_FileBrowser_t FileBrowser,long Cod,
|
||||
long *CrsCod,long *GrpCod);
|
||||
|
||||
long Brw_AddPathToDB (long PublisherUsrCod,Brw_FileType_t FileType,
|
||||
const char *Path,bool IsPublic,Brw_License_t License);
|
||||
|
|
36
swad_mark.c
36
swad_mark.c
|
@ -180,6 +180,8 @@ void Mrk_GetAndWriteNumRowsHeaderAndFooter (Brw_FileType_t FileType,
|
|||
|
||||
static void Mrk_GetNumRowsHeaderAndFooter (struct MarksProperties *Marks)
|
||||
{
|
||||
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
|
||||
long Cod = Brw_GetCodForFiles ();
|
||||
char Query[512+PATH_MAX];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
|
@ -188,12 +190,12 @@ static void Mrk_GetNumRowsHeaderAndFooter (struct MarksProperties *Marks)
|
|||
/***** Get number of rows of header and footer from database *****/
|
||||
sprintf (Query,"SELECT marks_properties.%s,marks_properties.%s"
|
||||
" FROM files,marks_properties"
|
||||
" WHERE files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.Path='%s'"
|
||||
" WHERE files.FileBrowser='%u' AND files.Cod='%ld' AND files.Path='%s'"
|
||||
" AND files.FilCod=marks_properties.FilCod",
|
||||
Mrk_HeadOrFootStr[Brw_HEADER],
|
||||
Mrk_HeadOrFootStr[Brw_FOOTER],
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.CurrentCrs.Grps.GrpCod,
|
||||
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
|
||||
Cod,
|
||||
Gbl.FileBrowser.Priv.FullPathInTree);
|
||||
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get the number of rows in header and footer");
|
||||
|
||||
|
@ -245,8 +247,10 @@ void Mrk_ChangeNumRowsFooter (void)
|
|||
|
||||
static void Mrk_ChangeNumRowsHeaderOrFooter (Brw_HeadOrFoot_t HeaderOrFooter)
|
||||
{
|
||||
extern const Brw_FileBrowser_t Brw_FileBrowserForDB_files[Brw_NUM_TYPES_FILE_BROWSER];
|
||||
extern const char *Txt_The_number_of_rows_is_now_X;
|
||||
char UnsignedStr[10+1];
|
||||
long Cod;
|
||||
char Query[512+PATH_MAX];
|
||||
unsigned NumRows;
|
||||
|
||||
|
@ -258,16 +262,19 @@ static void Mrk_ChangeNumRowsHeaderOrFooter (Brw_HeadOrFoot_t HeaderOrFooter)
|
|||
if (sscanf (UnsignedStr,"%u",&NumRows) == 1)
|
||||
{
|
||||
/***** Update properties of marks in the database *****/
|
||||
Cod = Brw_GetCodForFiles ();
|
||||
sprintf (Query,"UPDATE marks_properties,files"
|
||||
" SET marks_properties.%s='%u'"
|
||||
" WHERE files.CrsCod='%ld' AND files.GrpCod='%ld' AND files.Path='%s'"
|
||||
" WHERE files.FileBrowser='%u' AND files.Cod='%ld' AND files.Path='%s'"
|
||||
" AND files.FilCod=marks_properties.FilCod",
|
||||
Mrk_HeadOrFootStr[HeaderOrFooter],NumRows,
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.CurrentCrs.Grps.GrpCod,
|
||||
(unsigned) Brw_FileBrowserForDB_files[Gbl.FileBrowser.Type],
|
||||
Cod,
|
||||
Gbl.FileBrowser.Priv.FullPathInTree);
|
||||
DB_QueryUPDATE (Query,"can not update properties of marks");
|
||||
|
||||
Lay_ShowAlert (Lay_INFO,Query);
|
||||
|
||||
/***** Write message of success *****/
|
||||
sprintf (Gbl.Message,Txt_The_number_of_rows_is_now_X,
|
||||
NumRows);
|
||||
|
@ -648,6 +655,9 @@ void Mrk_GetNotifMyMarks (char *SummaryStr,char **ContentStr,
|
|||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
struct UsrData UsrDat;
|
||||
unsigned UnsignedNum;
|
||||
Brw_FileBrowser_t FileBrowser;
|
||||
long Cod;
|
||||
long CrsCod;
|
||||
long GrpCod;
|
||||
struct MarksProperties Marks;
|
||||
|
@ -672,7 +682,7 @@ void Mrk_GetNotifMyMarks (char *SummaryStr,char **ContentStr,
|
|||
ID_GetListIDsFromUsrCod (&UsrDat);
|
||||
|
||||
/***** Get subject of message from database *****/
|
||||
sprintf (Query,"SELECT files.CrsCod,files.GrpCod,files.Path,"
|
||||
sprintf (Query,"SELECT files.FileBrowser,files.Cod,files.Path,"
|
||||
"marks_properties.Header,marks_properties.Footer"
|
||||
" FROM files,marks_properties"
|
||||
" WHERE files.FilCod='%ld'"
|
||||
|
@ -687,11 +697,15 @@ void Mrk_GetNotifMyMarks (char *SummaryStr,char **ContentStr,
|
|||
/***** Get data of this file of marks *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* Course code (row[0]) */
|
||||
CrsCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
/* Get file browser type in database (row[0]) */
|
||||
FileBrowser = Brw_FILE_BRW_UNKNOWN;
|
||||
if (sscanf (row[0],"%u",&UnsignedNum) == 1)
|
||||
if (UnsignedNum < Brw_NUM_TYPES_FILE_BROWSER)
|
||||
FileBrowser = (Brw_FileBrowser_t) UnsignedNum;
|
||||
|
||||
/* Group code (row[1]) */
|
||||
GrpCod = Str_ConvertStrCodToLongCod (row[1]);
|
||||
/* Course/group code (row[1]) */
|
||||
Cod = Str_ConvertStrCodToLongCod (row[1]);
|
||||
Brw_GetCrsGrpFromFileMetadata (FileBrowser,Cod,&CrsCod,&GrpCod);
|
||||
|
||||
/* Path (row[2]) */
|
||||
strncpy (FullPathInTreeFromDBMarksTable,row[2],PATH_MAX);
|
||||
|
|
|
@ -621,7 +621,7 @@ static void Ntf_StartFormGoToAction (Ntf_NotifyEvent_t NotifyEvent,
|
|||
{
|
||||
FileMetadata.FilCod = Cod;
|
||||
Brw_GetFileMetadataByCod (&FileMetadata);
|
||||
Brw_GetCrsGrpFromFileMetadata (&FileMetadata,&CrsCod,&GrpCod);
|
||||
Brw_GetCrsGrpFromFileMetadata (FileMetadata.FileBrowser,FileMetadata.Cod,&CrsCod,&GrpCod);
|
||||
Str_SplitFullPathIntoPathAndFileName (FileMetadata.Path,
|
||||
PathUntilFileName,
|
||||
FileName);
|
||||
|
|
24
swad_text.c
24
swad_text.c
|
@ -38450,17 +38450,17 @@ const char *Txt_The_email_address_X_matches_the_one_you_had_previously_registere
|
|||
|
||||
const char *Txt_The_enrollment_of_students_into_groups_of_type_X_is_now_mandatory = // Warning: it is very important to include %s in the following sentences
|
||||
#if L==0
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora obligatoria."; // Necessita traduccio
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es obligatoria."; // Necessita traduccio
|
||||
#elif L==1
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now mandatory."; // Need Übersetzung
|
||||
#elif L==2
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now mandatory.";
|
||||
#elif L==3
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora obligatoria.";
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es obligatoria.";
|
||||
#elif L==4
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now mandatory."; // Besoin de traduction
|
||||
#elif L==5
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora obligatoria."; // Okoteve traducción
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es obligatoria."; // Okoteve traducción
|
||||
#elif L==6
|
||||
"La registrazione di studenti nei gruppi di tipo <strong>%s</strong> è ora obbligatoria.";
|
||||
#elif L==7
|
||||
|
@ -38471,17 +38471,17 @@ const char *Txt_The_enrollment_of_students_into_groups_of_type_X_is_now_mandator
|
|||
|
||||
const char *Txt_The_enrollment_of_students_into_groups_of_type_X_is_now_voluntary = // Warning: it is very important to include %s in the following sentences
|
||||
#if L==0
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora voluntaria."; // Necessita traduccio
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es voluntaria."; // Necessita traduccio
|
||||
#elif L==1
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now voluntary."; // Need Übersetzung
|
||||
#elif L==2
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now voluntary.";
|
||||
#elif L==3
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora voluntaria.";
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es voluntaria.";
|
||||
#elif L==4
|
||||
"The enrollment of students into groups of type <strong>%s</strong> is now voluntary."; // Besoin de traduction
|
||||
#elif L==5
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> es ahora voluntaria."; // Okoteve traducción
|
||||
"La adscripción de estudiantes a grupos del tipo <strong>%s</strong> ahora es voluntaria."; // Okoteve traducción
|
||||
#elif L==6
|
||||
"La registrazione di studenti nei gruppi di tipo <strong>%s</strong> è ora volontaria.";
|
||||
#elif L==7
|
||||
|
@ -39546,7 +39546,7 @@ const char *Txt_The_maximum_number_of_students_in_the_group_X_has_not_changed =
|
|||
const char *Txt_The_maximum_number_of_students_in_the_group_X_is_now_Y = // Warning: it is very important to include %s and %u in the following sentences
|
||||
#if L==0
|
||||
"El nº máximo de estudiantes"
|
||||
" del grupo <strong>%s</strong> es ahora <strong>%u</strong>."; // Necessita traduccio
|
||||
" del grupo <strong>%s</strong> ahora es <strong>%u</strong>."; // Necessita traduccio
|
||||
#elif L==1
|
||||
"The maximum number of students"
|
||||
" in the group <strong>%s</strong> is now <strong>%u</strong>."; // Need Übersetzung
|
||||
|
@ -39555,13 +39555,13 @@ const char *Txt_The_maximum_number_of_students_in_the_group_X_is_now_Y = // Warn
|
|||
" in the group <strong>%s</strong> is now <strong>%u</strong>.";
|
||||
#elif L==3
|
||||
"El nº máximo de estudiantes"
|
||||
" del grupo <strong>%s</strong> es ahora <strong>%u</strong>.";
|
||||
" del grupo <strong>%s</strong> ahora es <strong>%u</strong>.";
|
||||
#elif L==4
|
||||
"The maximum number of students"
|
||||
" in the group <strong>%s</strong> is now <strong>%u</strong>."; // Besoin de traduction
|
||||
#elif L==5
|
||||
"El nº máximo de estudiantes"
|
||||
" del grupo <strong>%s</strong> es ahora <strong>%u</strong>."; // Okoteve traducción
|
||||
" del grupo <strong>%s</strong> ahora es <strong>%u</strong>."; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Il numero massimo di studenti"
|
||||
" nel gruppo <strong>%s</strong> è ora <strong>%u</strong>.";
|
||||
|
@ -40517,17 +40517,17 @@ const char *Txt_The_number_of_questions_must_be_in_the_interval_X = // Warning:
|
|||
|
||||
const char *Txt_The_number_of_rows_is_now_X = // Warning: it is very important to include %u in the following sentences
|
||||
#if L==0
|
||||
"El número de filas es ahora <strong>%u</strong>."; // Necessita traduccio
|
||||
"El número de filas ahora es <strong>%u</strong>."; // Necessita traduccio
|
||||
#elif L==1
|
||||
"Die Anzahl der Zeilen ist jetzt <strong>%u</strong>.";
|
||||
#elif L==2
|
||||
"The number of rows is now <strong>%u</strong>.";
|
||||
#elif L==3
|
||||
"El número de filas es ahora <strong>%u</strong>.";
|
||||
"El número de filas ahora es <strong>%u</strong>.";
|
||||
#elif L==4
|
||||
"The number of rows is now <strong>%u</strong>."; // Besoin de traduction
|
||||
#elif L==5
|
||||
"El número de filas es ahora <strong>%u</strong>."; // Okoteve traducción
|
||||
"El número de filas ahora es <strong>%u</strong>."; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Il numero di righe è ora <strong>%u</strong>.";
|
||||
#elif L==7
|
||||
|
|
|
@ -3867,7 +3867,7 @@ int swad__getFile (struct soap *soap,
|
|||
"The file requested does not exists");
|
||||
|
||||
/***** Set course and group codes *****/
|
||||
Brw_GetCrsGrpFromFileMetadata (&FileMetadata,
|
||||
Brw_GetCrsGrpFromFileMetadata (FileMetadata.FileBrowser,FileMetadata.Cod,
|
||||
&Gbl.CurrentCrs.Crs.CrsCod,
|
||||
&Gbl.CurrentCrs.Grps.GrpCod);
|
||||
|
||||
|
@ -4004,7 +4004,7 @@ int swad__getMarks (struct soap *soap,
|
|||
"You can not get marks from this file");
|
||||
|
||||
/***** Set course and group codes *****/
|
||||
Brw_GetCrsGrpFromFileMetadata (&FileMetadata,
|
||||
Brw_GetCrsGrpFromFileMetadata (FileMetadata.FileBrowser,FileMetadata.Cod,
|
||||
&Gbl.CurrentCrs.Crs.CrsCod,
|
||||
&Gbl.CurrentCrs.Grps.GrpCod);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user