Version 18.7.22

This commit is contained in:
Antonio Cañas Vargas 2018-10-21 13:02:07 +02:00
parent dcbb6699bb
commit 662aca0ef6
6 changed files with 893 additions and 762 deletions

View File

@ -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)

View File

@ -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 *****/

View File

@ -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);

View File

@ -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 */

File diff suppressed because it is too large Load Diff

View File

@ -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)