mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-01 14:25:27 +02:00
Version 18.7.22
This commit is contained in:
parent
dcbb6699bb
commit
662aca0ef6
|
@ -355,10 +355,11 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.7.21 (2018-10-21)"
|
#define Log_PLATFORM_VERSION "SWAD 18.7.22 (2018-10-22)"
|
||||||
#define CSS_FILE "swad18.4.css"
|
#define CSS_FILE "swad18.4.css"
|
||||||
#define JS_FILE "swad17.17.1.js"
|
#define JS_FILE "swad17.17.1.js"
|
||||||
/*
|
/*
|
||||||
|
Version 18.7.22: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237286 lines)
|
||||||
Version 18.7.21: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237157 lines)
|
Version 18.7.21: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237157 lines)
|
||||||
Version 18.7.20: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237092 lines)
|
Version 18.7.20: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237092 lines)
|
||||||
Version 18.7.19: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237089 lines)
|
Version 18.7.19: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237089 lines)
|
||||||
|
|
|
@ -3268,6 +3268,17 @@ void DB_QueryDELETE (const char *Query,const char *MsgError)
|
||||||
/**************** Make other kind of query from database *********************/
|
/**************** Make other kind of query from database *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void DB_Query_free (const char *Query,const char *MsgError)
|
||||||
|
{
|
||||||
|
int Result;
|
||||||
|
|
||||||
|
/***** Query database *****/
|
||||||
|
Result = mysql_query (&Gbl.mysql,Query); // Returns 0 on success
|
||||||
|
free ((void *) Query);
|
||||||
|
if (Result)
|
||||||
|
DB_ExitOnMySQLError (MsgError);
|
||||||
|
}
|
||||||
|
|
||||||
void DB_Query (const char *Query,const char *MsgError)
|
void DB_Query (const char *Query,const char *MsgError)
|
||||||
{
|
{
|
||||||
/***** Query database *****/
|
/***** Query database *****/
|
||||||
|
|
|
@ -58,6 +58,7 @@ void DB_QueryUPDATE (const char *Query,const char *MsgError);
|
||||||
void DB_QueryDELETE_free (const char *Query,const char *MsgError);
|
void DB_QueryDELETE_free (const char *Query,const char *MsgError);
|
||||||
void DB_QueryDELETE (const char *Query,const char *MsgError);
|
void DB_QueryDELETE (const char *Query,const char *MsgError);
|
||||||
|
|
||||||
|
void DB_Query_free (const char *Query,const char *MsgError);
|
||||||
void DB_Query (const char *Query,const char *MsgError);
|
void DB_Query (const char *Query,const char *MsgError);
|
||||||
void DB_FreeMySQLResult (MYSQL_RES **mysql_res);
|
void DB_FreeMySQLResult (MYSQL_RES **mysql_res);
|
||||||
void DB_ExitOnMySQLError (const char *Message);
|
void DB_ExitOnMySQLError (const char *Message);
|
||||||
|
|
|
@ -2615,7 +2615,7 @@ unsigned Deg_ListDegsFound (const char *Query)
|
||||||
struct Degree Deg;
|
struct Degree Deg;
|
||||||
|
|
||||||
/***** Query database *****/
|
/***** Query database *****/
|
||||||
if ((NumDegs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get degrees")))
|
if ((NumDegs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get degrees")))
|
||||||
{
|
{
|
||||||
/***** Start box and table *****/
|
/***** Start box and table *****/
|
||||||
/* Number of degrees found */
|
/* Number of degrees found */
|
||||||
|
|
1028
swad_file_browser.c
1028
swad_file_browser.c
File diff suppressed because it is too large
Load Diff
610
swad_search.c
610
swad_search.c
|
@ -725,7 +725,7 @@ static unsigned Sch_SearchCentresInDB (const char *RangeQuery)
|
||||||
static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
|
static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
|
||||||
{
|
{
|
||||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||||
char Query[1024 + Sch_MAX_BYTES_SEARCH_QUERY * 2];
|
char *Query;
|
||||||
|
|
||||||
/***** Check scope *****/
|
/***** Check scope *****/
|
||||||
if (Gbl.Scope.Current != Sco_SCOPE_CRS)
|
if (Gbl.Scope.Current != Sco_SCOPE_CRS)
|
||||||
|
@ -735,15 +735,16 @@ static unsigned Sch_SearchDegreesInDB (const char *RangeQuery)
|
||||||
if (Sch_BuildSearchQuery (SearchQuery,"degrees.FullName",NULL,NULL))
|
if (Sch_BuildSearchQuery (SearchQuery,"degrees.FullName",NULL,NULL))
|
||||||
{
|
{
|
||||||
/***** Query database and list degrees found *****/
|
/***** Query database and list degrees found *****/
|
||||||
sprintf (Query,"SELECT degrees.DegCod"
|
if (asprintf (&Query,"SELECT degrees.DegCod"
|
||||||
" FROM degrees,centres,institutions,countries"
|
" FROM degrees,centres,institutions,countries"
|
||||||
" WHERE %s"
|
" WHERE %s"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" ORDER BY degrees.FullName,institutions.FullName",
|
" ORDER BY degrees.FullName,institutions.FullName",
|
||||||
SearchQuery,RangeQuery);
|
SearchQuery,RangeQuery) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
return Deg_ListDegsFound (Query);
|
return Deg_ListDegsFound (Query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -822,7 +823,7 @@ static unsigned Sch_SearchOpenDocumentsInDB (const char *RangeQuery)
|
||||||
extern const char *Txt_open_document;
|
extern const char *Txt_open_document;
|
||||||
extern const char *Txt_open_documents;
|
extern const char *Txt_open_documents;
|
||||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||||
char Query[(512 + Sch_MAX_BYTES_SEARCH_QUERY) * 4];
|
char *Query;
|
||||||
|
|
||||||
/***** Check user's permission *****/
|
/***** Check user's permission *****/
|
||||||
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_OPEN_DOCUMENTS))
|
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_OPEN_DOCUMENTS))
|
||||||
|
@ -831,88 +832,89 @@ static unsigned Sch_SearchOpenDocumentsInDB (const char *RangeQuery)
|
||||||
"_latin1 "," COLLATE latin1_general_ci"))
|
"_latin1 "," COLLATE latin1_general_ci"))
|
||||||
{
|
{
|
||||||
/***** Build the query *****/
|
/***** Build the query *****/
|
||||||
sprintf (Query,"SELECT * FROM "
|
if (asprintf (&Query,"SELECT * FROM "
|
||||||
"("
|
"("
|
||||||
"SELECT files.FilCod," // Institution
|
"SELECT files.FilCod," // Institution
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"-1 AS CtrCod,'' AS CtrShortName,"
|
"-1 AS CtrCod,'' AS CtrShortName,"
|
||||||
"-1 AS DegCod,'' AS DegShortName,"
|
"-1 AS DegCod,'' AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.Public='Y' AND %s"
|
" WHERE files.Public='Y' AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=institutions.InsCod"
|
" AND files.Cod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Centre
|
"SELECT files.FilCod," // Centre
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"-1 AS DegCod,'' AS DegShortName,"
|
"-1 AS DegCod,'' AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.Public='Y' AND %s"
|
" WHERE files.Public='Y' AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=centres.CtrCod"
|
" AND files.Cod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Degree
|
"SELECT files.FilCod," // Degree
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"-1,'' AS CrsShortName,"
|
"-1,'' AS CrsShortName,"
|
||||||
"-1"
|
"-1"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.Public='Y' AND %s"
|
" WHERE files.Public='Y' AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=degrees.DegCod"
|
" AND files.Cod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Course
|
"SELECT files.FilCod," // Course
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
||||||
"-1"
|
"-1"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.Public='Y' AND %s"
|
" WHERE files.Public='Y' AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=courses.CrsCod"
|
" AND files.Cod=courses.CrsCod"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
") AS selected_files"
|
") AS selected_files"
|
||||||
" WHERE PathFromRoot<>''"
|
" WHERE PathFromRoot<>''"
|
||||||
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_INS,
|
(unsigned) Brw_ADMI_DOC_INS,
|
||||||
(unsigned) Brw_ADMI_SHR_INS,
|
(unsigned) Brw_ADMI_SHR_INS,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_CTR,
|
(unsigned) Brw_ADMI_DOC_CTR,
|
||||||
(unsigned) Brw_ADMI_SHR_CTR,
|
(unsigned) Brw_ADMI_SHR_CTR,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_DEG,
|
(unsigned) Brw_ADMI_DOC_DEG,
|
||||||
(unsigned) Brw_ADMI_SHR_DEG,
|
(unsigned) Brw_ADMI_SHR_DEG,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_CRS,
|
(unsigned) Brw_ADMI_DOC_CRS,
|
||||||
(unsigned) Brw_ADMI_SHR_CRS,
|
(unsigned) Brw_ADMI_SHR_CRS,
|
||||||
RangeQuery);
|
RangeQuery) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
/***** Query database and list documents found *****/
|
/***** Query database and list documents found *****/
|
||||||
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
||||||
|
@ -934,7 +936,7 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
|
||||||
extern const char *Txt_document_in_my_courses;
|
extern const char *Txt_document_in_my_courses;
|
||||||
extern const char *Txt_documents_in_my_courses;
|
extern const char *Txt_documents_in_my_courses;
|
||||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||||
char Query[(1024 + Sch_MAX_BYTES_SEARCH_QUERY) * 2];
|
char *Query;
|
||||||
unsigned NumDocs;
|
unsigned NumDocs;
|
||||||
|
|
||||||
/***** Check user's permission *****/
|
/***** Check user's permission *****/
|
||||||
|
@ -945,95 +947,96 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
|
||||||
{
|
{
|
||||||
/***** Create temporary table with codes of files in documents and shared areas accessible by me.
|
/***** Create temporary table with codes of files in documents and shared areas accessible by me.
|
||||||
It is necessary to speed up the second query *****/
|
It is necessary to speed up the second query *****/
|
||||||
sprintf (Query,"DROP TEMPORARY TABLE IF EXISTS my_files_crs,my_files_grp");
|
if (asprintf (&Query,"DROP TEMPORARY TABLE IF EXISTS my_files_crs,my_files_grp") < 0)
|
||||||
if (mysql_query (&Gbl.mysql,Query))
|
Lay_NotEnoughMemoryExit ();
|
||||||
DB_ExitOnMySQLError ("can not remove temporary table");
|
DB_Query_free (Query,"can not remove temporary table");
|
||||||
|
|
||||||
sprintf (Query,"CREATE TEMPORARY TABLE my_files_crs"
|
if (asprintf (&Query,"CREATE TEMPORARY TABLE my_files_crs"
|
||||||
" (FilCod INT NOT NULL,UNIQUE INDEX(FilCod))"
|
" (FilCod INT NOT NULL,UNIQUE INDEX(FilCod))"
|
||||||
" ENGINE=MEMORY"
|
" ENGINE=MEMORY"
|
||||||
" SELECT files.FilCod FROM crs_usr,files"
|
" SELECT files.FilCod FROM crs_usr,files"
|
||||||
" WHERE crs_usr.UsrCod=%ld"
|
" WHERE crs_usr.UsrCod=%ld"
|
||||||
" AND crs_usr.CrsCod=files.Cod"
|
" AND crs_usr.CrsCod=files.Cod"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)",
|
" AND files.FileBrowser IN (%u,%u,%u,%u)",
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
(unsigned) Brw_ADMI_DOC_CRS,
|
(unsigned) Brw_ADMI_DOC_CRS,
|
||||||
(unsigned) Brw_ADMI_TCH_CRS,
|
(unsigned) Brw_ADMI_TCH_CRS,
|
||||||
(unsigned) Brw_ADMI_SHR_CRS,
|
(unsigned) Brw_ADMI_SHR_CRS,
|
||||||
(unsigned) Brw_ADMI_MRK_CRS);
|
(unsigned) Brw_ADMI_MRK_CRS) < 0)
|
||||||
if (mysql_query (&Gbl.mysql,Query))
|
Lay_NotEnoughMemoryExit ();
|
||||||
DB_ExitOnMySQLError ("can not create temporary table");
|
DB_Query_free (Query,"can not create temporary table");
|
||||||
|
|
||||||
sprintf (Query,"CREATE TEMPORARY TABLE my_files_grp"
|
if (asprintf (&Query,"CREATE TEMPORARY TABLE my_files_grp"
|
||||||
" (FilCod INT NOT NULL,UNIQUE INDEX(FilCod))"
|
" (FilCod INT NOT NULL,UNIQUE INDEX(FilCod))"
|
||||||
" ENGINE=MEMORY"
|
" ENGINE=MEMORY"
|
||||||
" SELECT files.FilCod FROM crs_grp_usr,files"
|
" SELECT files.FilCod FROM crs_grp_usr,files"
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld"
|
" WHERE crs_grp_usr.UsrCod=%ld"
|
||||||
" AND crs_grp_usr.GrpCod=files.Cod"
|
" AND crs_grp_usr.GrpCod=files.Cod"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)",
|
" AND files.FileBrowser IN (%u,%u,%u,%u)",
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
(unsigned) Brw_ADMI_DOC_GRP,
|
(unsigned) Brw_ADMI_DOC_GRP,
|
||||||
(unsigned) Brw_ADMI_TCH_GRP,
|
(unsigned) Brw_ADMI_TCH_GRP,
|
||||||
(unsigned) Brw_ADMI_SHR_GRP,
|
(unsigned) Brw_ADMI_SHR_GRP,
|
||||||
(unsigned) Brw_ADMI_MRK_GRP);
|
(unsigned) Brw_ADMI_MRK_GRP) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
||||||
Lay_ShowAlert (Lay_INFO,Query); */
|
Lay_ShowAlert (Lay_INFO,Query); */
|
||||||
if (mysql_query (&Gbl.mysql,Query))
|
DB_Query_free (Query,"can not create temporary table");
|
||||||
DB_ExitOnMySQLError ("can not create temporary table");
|
|
||||||
|
|
||||||
/***** Build the query *****/
|
/***** Build the query *****/
|
||||||
sprintf (Query,"SELECT * FROM "
|
if (asprintf (&Query,"SELECT * FROM "
|
||||||
"("
|
"("
|
||||||
"SELECT files.FilCod,"
|
"SELECT files.FilCod,"
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_crs) AND %s"
|
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_crs) AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
||||||
" AND files.Cod=courses.CrsCod"
|
" AND files.Cod=courses.CrsCod"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod,"
|
"SELECT files.FilCod,"
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
||||||
"crs_grp.GrpCod"
|
"crs_grp.GrpCod"
|
||||||
" FROM files,crs_grp,crs_grp_types,courses,degrees,centres,institutions,countries"
|
" FROM files,crs_grp,crs_grp_types,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_grp) AND %s"
|
" WHERE files.FilCod IN (SELECT FilCod FROM my_files_grp) AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
||||||
" AND files.Cod=crs_grp.GrpCod"
|
" AND files.Cod=crs_grp.GrpCod"
|
||||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||||
" AND crs_grp_types.CrsCod=courses.CrsCod"
|
" AND crs_grp_types.CrsCod=courses.CrsCod"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
") AS selected_files"
|
") AS selected_files"
|
||||||
" WHERE PathFromRoot<>''"
|
" WHERE PathFromRoot<>''"
|
||||||
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_CRS,
|
(unsigned) Brw_ADMI_DOC_CRS,
|
||||||
(unsigned) Brw_ADMI_TCH_CRS,
|
(unsigned) Brw_ADMI_TCH_CRS,
|
||||||
(unsigned) Brw_ADMI_SHR_CRS,
|
(unsigned) Brw_ADMI_SHR_CRS,
|
||||||
(unsigned) Brw_ADMI_MRK_CRS,
|
(unsigned) Brw_ADMI_MRK_CRS,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
SearchQuery,
|
SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_GRP,
|
(unsigned) Brw_ADMI_DOC_GRP,
|
||||||
(unsigned) Brw_ADMI_TCH_GRP,
|
(unsigned) Brw_ADMI_TCH_GRP,
|
||||||
(unsigned) Brw_ADMI_SHR_GRP,
|
(unsigned) Brw_ADMI_SHR_GRP,
|
||||||
(unsigned) Brw_ADMI_MRK_GRP,
|
(unsigned) Brw_ADMI_MRK_GRP,
|
||||||
RangeQuery);
|
RangeQuery) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
/***** Query database and list documents found *****/
|
/***** Query database and list documents found *****/
|
||||||
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
||||||
|
@ -1043,9 +1046,9 @@ static unsigned Sch_SearchDocumentsInMyCoursesInDB (const char *RangeQuery)
|
||||||
Txt_documents_in_my_courses);
|
Txt_documents_in_my_courses);
|
||||||
|
|
||||||
/***** Drop temporary table *****/
|
/***** Drop temporary table *****/
|
||||||
sprintf (Query,"DROP TEMPORARY TABLE IF EXISTS my_files_crs,my_files_grp");
|
if (asprintf (&Query,"DROP TEMPORARY TABLE IF EXISTS my_files_crs,my_files_grp") < 0)
|
||||||
if (mysql_query (&Gbl.mysql,Query))
|
Lay_NotEnoughMemoryExit ();
|
||||||
DB_ExitOnMySQLError ("can not remove temporary table");
|
DB_Query_free (Query,"can not remove temporary table");
|
||||||
|
|
||||||
return NumDocs;
|
return NumDocs;
|
||||||
}
|
}
|
||||||
|
@ -1062,7 +1065,7 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
|
||||||
extern const char *Txt_document_from_me;
|
extern const char *Txt_document_from_me;
|
||||||
extern const char *Txt_documents_from_me;
|
extern const char *Txt_documents_from_me;
|
||||||
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
char SearchQuery[Sch_MAX_BYTES_SEARCH_QUERY + 1];
|
||||||
char Query[(512 + Sch_MAX_BYTES_SEARCH_QUERY) * 5];
|
char *Query;
|
||||||
|
|
||||||
/***** Check user's permission *****/
|
/***** Check user's permission *****/
|
||||||
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_MY_DOCUMENTS))
|
if (Sch_CheckIfIHavePermissionToSearch (Sch_SEARCH_MY_DOCUMENTS))
|
||||||
|
@ -1071,128 +1074,129 @@ static unsigned Sch_SearchMyDocumentsInDB (const char *RangeQuery)
|
||||||
"_latin1 "," COLLATE latin1_general_ci"))
|
"_latin1 "," COLLATE latin1_general_ci"))
|
||||||
{
|
{
|
||||||
/***** Build the query *****/
|
/***** Build the query *****/
|
||||||
sprintf (Query,"SELECT * FROM "
|
if (asprintf (&Query,"SELECT * FROM "
|
||||||
"("
|
"("
|
||||||
"SELECT files.FilCod," // Institution
|
"SELECT files.FilCod," // Institution
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"-1 AS CtrCod,'' AS CtrShortName,"
|
"-1 AS CtrCod,'' AS CtrShortName,"
|
||||||
"-1 AS DegCod,'' AS DegShortName,"
|
"-1 AS DegCod,'' AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=institutions.InsCod"
|
" AND files.Cod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Centre
|
"SELECT files.FilCod," // Centre
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"-1 AS DegCod,'' AS DegShortName,"
|
"-1 AS DegCod,'' AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=centres.CtrCod"
|
" AND files.Cod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Degree
|
"SELECT files.FilCod," // Degree
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u)"
|
" AND files.FileBrowser IN (%u,%u)"
|
||||||
" AND files.Cod=degrees.DegCod"
|
" AND files.Cod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Course
|
"SELECT files.FilCod," // Course
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files,courses,degrees,centres,institutions,countries"
|
" FROM files,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
||||||
" AND files.Cod=courses.CrsCod"
|
" AND files.Cod=courses.CrsCod"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Group
|
"SELECT files.FilCod," // Group
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
"institutions.InsCod,institutions.ShortName AS InsShortName,"
|
||||||
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
"centres.CtrCod,centres.ShortName AS CtrShortName,"
|
||||||
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
"degrees.DegCod,degrees.ShortName AS DegShortName,"
|
||||||
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
"courses.CrsCod,courses.ShortName AS CrsShortName,"
|
||||||
"crs_grp.GrpCod"
|
"crs_grp.GrpCod"
|
||||||
" FROM files,crs_grp,crs_grp_types,courses,degrees,centres,institutions,countries"
|
" FROM files,crs_grp,crs_grp_types,courses,degrees,centres,institutions,countries"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
" AND files.FileBrowser IN (%u,%u,%u,%u)"
|
||||||
" AND files.Cod=crs_grp.GrpCod"
|
" AND files.Cod=crs_grp.GrpCod"
|
||||||
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
" AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod"
|
||||||
" AND crs_grp_types.CrsCod=courses.CrsCod"
|
" AND crs_grp_types.CrsCod=courses.CrsCod"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND centres.InsCod=institutions.InsCod"
|
" AND centres.InsCod=institutions.InsCod"
|
||||||
" AND institutions.CtyCod=countries.CtyCod"
|
" AND institutions.CtyCod=countries.CtyCod"
|
||||||
"%s"
|
"%s"
|
||||||
" UNION "
|
" UNION "
|
||||||
"SELECT files.FilCod," // Briefcase
|
"SELECT files.FilCod," // Briefcase
|
||||||
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
"SUBSTRING(files.Path,LOCATE('/',files.Path)) AS PathFromRoot,"
|
||||||
"-1 AS InsCod,'' AS InsShortName,"
|
"-1 AS InsCod,'' AS InsShortName,"
|
||||||
"-1 AS CtrCod,'' AS CtrShortName,"
|
"-1 AS CtrCod,'' AS CtrShortName,"
|
||||||
"-1 AS DegCod,'' AS DegShortName,"
|
"-1 AS DegCod,'' AS DegShortName,"
|
||||||
"-1 AS CrsCod,'' AS CrsShortName,"
|
"-1 AS CrsCod,'' AS CrsShortName,"
|
||||||
"-1 AS GrpCod"
|
"-1 AS GrpCod"
|
||||||
" FROM files"
|
" FROM files"
|
||||||
" WHERE files.PublisherUsrCod=%ld AND %s"
|
" WHERE files.PublisherUsrCod=%ld AND %s"
|
||||||
" AND files.FileBrowser=%u"
|
" AND files.FileBrowser=%u"
|
||||||
") AS selected_files"
|
") AS selected_files"
|
||||||
" WHERE PathFromRoot<>''"
|
" WHERE PathFromRoot<>''"
|
||||||
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
" ORDER BY InsShortName,CtrShortName,DegShortName,CrsShortName,PathFromRoot",
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_INS,
|
(unsigned) Brw_ADMI_DOC_INS,
|
||||||
(unsigned) Brw_ADMI_SHR_INS,
|
(unsigned) Brw_ADMI_SHR_INS,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_CTR,
|
(unsigned) Brw_ADMI_DOC_CTR,
|
||||||
(unsigned) Brw_ADMI_SHR_CTR,
|
(unsigned) Brw_ADMI_SHR_CTR,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_DEG,
|
(unsigned) Brw_ADMI_DOC_DEG,
|
||||||
(unsigned) Brw_ADMI_SHR_DEG,
|
(unsigned) Brw_ADMI_SHR_DEG,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_CRS,
|
(unsigned) Brw_ADMI_DOC_CRS,
|
||||||
(unsigned) Brw_ADMI_TCH_CRS,
|
(unsigned) Brw_ADMI_TCH_CRS,
|
||||||
(unsigned) Brw_ADMI_SHR_CRS,
|
(unsigned) Brw_ADMI_SHR_CRS,
|
||||||
(unsigned) Brw_ADMI_MRK_CRS,
|
(unsigned) Brw_ADMI_MRK_CRS,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_DOC_GRP,
|
(unsigned) Brw_ADMI_DOC_GRP,
|
||||||
(unsigned) Brw_ADMI_TCH_GRP,
|
(unsigned) Brw_ADMI_TCH_GRP,
|
||||||
(unsigned) Brw_ADMI_SHR_GRP,
|
(unsigned) Brw_ADMI_SHR_GRP,
|
||||||
(unsigned) Brw_ADMI_MRK_GRP,
|
(unsigned) Brw_ADMI_MRK_GRP,
|
||||||
RangeQuery,
|
RangeQuery,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
Gbl.Usrs.Me.UsrDat.UsrCod,SearchQuery,
|
||||||
(unsigned) Brw_ADMI_BRF_USR);
|
(unsigned) Brw_ADMI_BRF_USR) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
/***** Query database and list documents found *****/
|
/***** Query database and list documents found *****/
|
||||||
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
/* if (Gbl.Usrs.Me.Roles.LoggedRole == Rol_SYS_ADM)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user