mirror of https://github.com/acanas/swad-core.git
Version 18.9.10
This commit is contained in:
parent
de558876f2
commit
132a181191
|
@ -25,8 +25,6 @@
|
||||||
/*********************************** Headers *********************************/
|
/*********************************** Headers *********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define _GNU_SOURCE // For asprintf
|
|
||||||
#include <stdio.h> // For asprintf
|
|
||||||
#include <string.h> // For string functions
|
#include <string.h> // For string functions
|
||||||
|
|
||||||
#include "swad_account.h"
|
#include "swad_account.h"
|
||||||
|
|
|
@ -25,9 +25,8 @@
|
||||||
/*********************************** Headers *********************************/
|
/*********************************** Headers *********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define _GNU_SOURCE // For asprintf
|
|
||||||
#include <linux/stddef.h> // For NULL
|
#include <linux/stddef.h> // For NULL
|
||||||
#include <stdio.h> // For fprintf, asprintf
|
#include <stdio.h> // For fprintf
|
||||||
#include <stdlib.h> // For malloc and free
|
#include <stdlib.h> // For malloc and free
|
||||||
#include <string.h> // For string functions
|
#include <string.h> // For string functions
|
||||||
|
|
||||||
|
|
|
@ -982,11 +982,11 @@ static void Agd_GetParamEventOrder (void)
|
||||||
|
|
||||||
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
{
|
{
|
||||||
char UsrSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
char *UsrSubQuery;
|
||||||
char Past__FutureEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
char Past__FutureEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
char PrivatPublicEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
char PrivatPublicEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
char HiddenVisiblEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
char HiddenVisiblEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
|
||||||
char OrderBySubQuery[Agd_MAX_BYTES_SUBQUERY];
|
char *OrderBySubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
@ -1008,7 +1008,9 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
DoQuery = false; // Nothing to get from database
|
DoQuery = false; // Nothing to get from database
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf (UsrSubQuery,"UsrCod=%ld",Gbl.Usrs.Me.UsrDat.UsrCod);
|
if (asprintf (&UsrSubQuery,"UsrCod=%ld",
|
||||||
|
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
if (AgendaType == Agd_MY_AGENDA_TODAY)
|
if (AgendaType == Agd_MY_AGENDA_TODAY)
|
||||||
Str_Copy (Past__FutureEventsSubQuery,
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
" AND DATE(StartTime)<=CURDATE()"
|
" AND DATE(StartTime)<=CURDATE()"
|
||||||
|
@ -1063,7 +1065,9 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
break;
|
break;
|
||||||
case Agd_ANOTHER_AGENDA_TODAY:
|
case Agd_ANOTHER_AGENDA_TODAY:
|
||||||
case Agd_ANOTHER_AGENDA:
|
case Agd_ANOTHER_AGENDA:
|
||||||
sprintf (UsrSubQuery,"UsrCod=%ld",Gbl.Usrs.Other.UsrDat.UsrCod);
|
if (asprintf (&UsrSubQuery,"UsrCod=%ld",
|
||||||
|
Gbl.Usrs.Other.UsrDat.UsrCod) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
if (AgendaType == Agd_ANOTHER_AGENDA_TODAY)
|
if (AgendaType == Agd_ANOTHER_AGENDA_TODAY)
|
||||||
Str_Copy (Past__FutureEventsSubQuery,
|
Str_Copy (Past__FutureEventsSubQuery,
|
||||||
" AND DATE(StartTime)<=CURDATE()"
|
" AND DATE(StartTime)<=CURDATE()"
|
||||||
|
@ -1085,18 +1089,18 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
switch (Gbl.Agenda.SelectedOrder)
|
switch (Gbl.Agenda.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Agd_ORDER_BY_START_DATE:
|
case Agd_ORDER_BY_START_DATE:
|
||||||
Str_Copy (OrderBySubQuery,"StartTime,"
|
if (asprintf (&OrderBySubQuery,"StartTime,"
|
||||||
"EndTime,"
|
"EndTime,"
|
||||||
"Event,"
|
"Event,"
|
||||||
"Location",
|
"Location") < 0)
|
||||||
Agd_MAX_BYTES_SUBQUERY);
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case Agd_ORDER_BY_END_DATE:
|
case Agd_ORDER_BY_END_DATE:
|
||||||
Str_Copy (OrderBySubQuery,"EndTime,"
|
if (asprintf (&OrderBySubQuery,"EndTime,"
|
||||||
"StartTime,"
|
"StartTime,"
|
||||||
"Event,"
|
"Event,"
|
||||||
"Location",
|
"Location") < 0)
|
||||||
Agd_MAX_BYTES_SUBQUERY);
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1111,6 +1115,10 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
|
||||||
OrderBySubQuery);
|
OrderBySubQuery);
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get agenda events");
|
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get agenda events");
|
||||||
|
|
||||||
|
/* Free allocated memory for subqueries */
|
||||||
|
free ((void *) OrderBySubQuery);
|
||||||
|
free ((void *) UsrSubQuery);
|
||||||
|
|
||||||
if (NumRows) // Events found...
|
if (NumRows) // Events found...
|
||||||
{
|
{
|
||||||
Gbl.Agenda.Num = (unsigned) NumRows;
|
Gbl.Agenda.Num = (unsigned) NumRows;
|
||||||
|
|
|
@ -25,9 +25,6 @@
|
||||||
/*********************************** Headers *********************************/
|
/*********************************** Headers *********************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define _GNU_SOURCE // For asprintf
|
|
||||||
#include <stdio.h> // For asprintf
|
|
||||||
|
|
||||||
#include "swad_announcement.h"
|
#include "swad_announcement.h"
|
||||||
#include "swad_box.h"
|
#include "swad_box.h"
|
||||||
#include "swad_database.h"
|
#include "swad_database.h"
|
||||||
|
|
|
@ -621,8 +621,8 @@ static void Asg_PutParams (void)
|
||||||
|
|
||||||
void Asg_GetListAssignments (void)
|
void Asg_GetListAssignments (void)
|
||||||
{
|
{
|
||||||
char HiddenSubQuery[256];
|
char *HiddenSubQuery;
|
||||||
char OrderBySubQuery[256];
|
char *OrderBySubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
@ -639,16 +639,21 @@ void Asg_GetListAssignments (void)
|
||||||
HiddenSubQuery[0] = '\0';
|
HiddenSubQuery[0] = '\0';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf (HiddenSubQuery," AND Hidden='N'");
|
if (asprintf (&HiddenSubQuery," AND Hidden='N'") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (Gbl.Asgs.SelectedOrder)
|
switch (Gbl.Asgs.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Dat_START_TIME:
|
case Dat_START_TIME:
|
||||||
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC");
|
if (asprintf (&OrderBySubQuery,
|
||||||
|
"StartTime DESC,EndTime DESC,Title DESC") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case Dat_END_TIME:
|
case Dat_END_TIME:
|
||||||
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC");
|
if (asprintf (&OrderBySubQuery,
|
||||||
|
"EndTime DESC,StartTime DESC,Title DESC") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
||||||
|
@ -659,8 +664,7 @@ void Asg_GetListAssignments (void)
|
||||||
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
" AsgCod IN (SELECT asg_grp.AsgCod FROM asg_grp,crs_grp_usr"
|
||||||
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
|
||||||
" ORDER BY %s",
|
" ORDER BY %s",
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,
|
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||||
HiddenSubQuery,
|
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
OrderBySubQuery);
|
OrderBySubQuery);
|
||||||
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
|
||||||
|
@ -668,9 +672,14 @@ void Asg_GetListAssignments (void)
|
||||||
" FROM assignments"
|
" FROM assignments"
|
||||||
" WHERE CrsCod=%ld%s"
|
" WHERE CrsCod=%ld%s"
|
||||||
" ORDER BY %s",
|
" ORDER BY %s",
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery);
|
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
|
||||||
|
OrderBySubQuery);
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignments");
|
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get assignments");
|
||||||
|
|
||||||
|
/* Free allocated memory for subqueries */
|
||||||
|
free ((void *) OrderBySubQuery);
|
||||||
|
free ((void *) HiddenSubQuery);
|
||||||
|
|
||||||
if (NumRows) // Assignments found...
|
if (NumRows) // Assignments found...
|
||||||
{
|
{
|
||||||
Gbl.Asgs.Num = (unsigned) NumRows;
|
Gbl.Asgs.Num = (unsigned) NumRows;
|
||||||
|
|
|
@ -604,8 +604,8 @@ static void Att_PutParams (void)
|
||||||
|
|
||||||
static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
||||||
{
|
{
|
||||||
char HiddenSubQuery[256];
|
char *HiddenSubQuery;
|
||||||
char OrderBySubQuery[256];
|
char *OrderBySubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
@ -619,25 +619,27 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
||||||
{
|
{
|
||||||
case Rol_TCH:
|
case Rol_TCH:
|
||||||
case Rol_SYS_ADM:
|
case Rol_SYS_ADM:
|
||||||
HiddenSubQuery[0] = '\0';
|
if (asprintf (&HiddenSubQuery,"%s","") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf (HiddenSubQuery," AND Hidden='N'");
|
if (asprintf (&HiddenSubQuery," AND Hidden='N'") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (Gbl.AttEvents.SelectedOrder)
|
switch (Gbl.AttEvents.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Dat_START_TIME:
|
case Dat_START_TIME:
|
||||||
if (Order == Att_NEWEST_FIRST)
|
if (asprintf (&OrderBySubQuery,
|
||||||
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC");
|
(Order == Att_NEWEST_FIRST) ? "StartTime DESC,EndTime DESC,Title DESC" :
|
||||||
else
|
"StartTime,EndTime,Title") < 0)
|
||||||
sprintf (OrderBySubQuery,"StartTime,EndTime,Title");
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case Dat_END_TIME:
|
case Dat_END_TIME:
|
||||||
if (Order == Att_NEWEST_FIRST)
|
if (asprintf (&OrderBySubQuery,
|
||||||
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC");
|
(Order == Att_NEWEST_FIRST) ? "EndTime DESC,StartTime DESC,Title DESC" :
|
||||||
else
|
"EndTime,StartTime,Title") < 0)
|
||||||
sprintf (OrderBySubQuery,"EndTime,StartTime,Title");
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
if (Gbl.CurrentCrs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS)
|
||||||
|
@ -657,8 +659,13 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
|
||||||
" WHERE CrsCod=%ld%s"
|
" WHERE CrsCod=%ld%s"
|
||||||
" ORDER BY %s",
|
" ORDER BY %s",
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery);
|
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,OrderBySubQuery);
|
||||||
|
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get attendance events");
|
||||||
|
|
||||||
if ((NumRows = DB_QuerySELECT_new (&mysql_res,"can not get attendance events"))) // Attendance events found...
|
/* Free allocated memory for subqueries */
|
||||||
|
free ((void *) OrderBySubQuery);
|
||||||
|
free ((void *) HiddenSubQuery);
|
||||||
|
|
||||||
|
if (NumRows) // Attendance events found...
|
||||||
{
|
{
|
||||||
Gbl.AttEvents.Num = (unsigned) NumRows;
|
Gbl.AttEvents.Num = (unsigned) NumRows;
|
||||||
|
|
||||||
|
@ -2424,18 +2431,19 @@ static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSel
|
||||||
Lay_NotEnoughMemoryExit ();
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
|
||||||
/***** Count number of students registered in an event in database *****/
|
/***** Count number of students registered in an event in database *****/
|
||||||
sprintf (Gbl.DB.QueryPtr,"SELECT COUNT(*) FROM att_usr"
|
snprintf (Gbl.DB.QueryPtr,MaxLength + 1,
|
||||||
" WHERE AttCod=%ld"
|
"SELECT COUNT(*) FROM att_usr"
|
||||||
" AND UsrCod IN (",
|
" WHERE AttCod=%ld"
|
||||||
AttCod);
|
" AND UsrCod IN (",
|
||||||
|
AttCod);
|
||||||
for (NumStd = 0;
|
for (NumStd = 0;
|
||||||
NumStd < NumStdsInList;
|
NumStd < NumStdsInList;
|
||||||
NumStd++)
|
NumStd++)
|
||||||
{
|
{
|
||||||
sprintf (SubQuery,
|
snprintf (SubQuery,sizeof (SubQuery),
|
||||||
NumStd ? ",%ld" :
|
NumStd ? ",%ld" :
|
||||||
"%ld",
|
"%ld",
|
||||||
LstSelectedUsrCods[NumStd]);
|
LstSelectedUsrCods[NumStd]);
|
||||||
Str_Concat (Gbl.DB.QueryPtr,SubQuery,
|
Str_Concat (Gbl.DB.QueryPtr,SubQuery,
|
||||||
MaxLength);
|
MaxLength);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1033,7 +1033,7 @@ static void Ctr_PutIconToViewCentres (void)
|
||||||
|
|
||||||
void Ctr_GetListCentres (long InsCod)
|
void Ctr_GetListCentres (long InsCod)
|
||||||
{
|
{
|
||||||
char OrderBySubQuery[256];
|
char *OrderBySubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
@ -1044,10 +1044,12 @@ void Ctr_GetListCentres (long InsCod)
|
||||||
switch (Gbl.Ctrs.SelectedOrder)
|
switch (Gbl.Ctrs.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Ctr_ORDER_BY_CENTRE:
|
case Ctr_ORDER_BY_CENTRE:
|
||||||
sprintf (OrderBySubQuery,"FullName");
|
if (asprintf (&OrderBySubQuery,"FullName") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case Ctr_ORDER_BY_NUM_TCHS:
|
case Ctr_ORDER_BY_NUM_TCHS:
|
||||||
sprintf (OrderBySubQuery,"NumUsrs DESC,FullName");
|
if (asprintf (&OrderBySubQuery,"NumUsrs DESC,FullName") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_BuildQuery ("(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
|
DB_BuildQuery ("(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
|
||||||
|
@ -1070,6 +1072,7 @@ void Ctr_GetListCentres (long InsCod)
|
||||||
InsCod,
|
InsCod,
|
||||||
OrderBySubQuery);
|
OrderBySubQuery);
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get centres");
|
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get centres");
|
||||||
|
free ((void *) OrderBySubQuery);
|
||||||
|
|
||||||
if (NumRows) // Centres found...
|
if (NumRows) // Centres found...
|
||||||
{
|
{
|
||||||
|
|
|
@ -355,10 +355,11 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.9.8 (2018-10-30)"
|
#define Log_PLATFORM_VERSION "SWAD 18.9.10 (2018-10-30)"
|
||||||
#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.9.10: Oct 30, 2018 Some sprintf for database queries changed by asprintf. (235311 lines)
|
||||||
Version 18.9.8: Oct 30, 2018 Cleaning unused functions. (235694 lines)
|
Version 18.9.8: Oct 30, 2018 Cleaning unused functions. (235694 lines)
|
||||||
Version 18.9.7: Oct 29, 2018 Some sprintf for database queries changed by internal function. (235705 lines)
|
Version 18.9.7: Oct 29, 2018 Some sprintf for database queries changed by internal function. (235705 lines)
|
||||||
Version 18.9.6: Oct 29, 2018 Some sprintf for database queries changed by internal function.
|
Version 18.9.6: Oct 29, 2018 Some sprintf for database queries changed by internal function.
|
||||||
|
|
|
@ -1,129 +0,0 @@
|
||||||
// swad_convert_BRIEFs.c
|
|
||||||
// Created on: 26/11/2013
|
|
||||||
// Author: Antonio Cañas Vargas
|
|
||||||
// Compile with: gcc -Wall -O1 swad_convert_BRIEFs.c -o swad_convert_BRIEFs -lmysqlclient -L/usr/lib64/mysql
|
|
||||||
|
|
||||||
#include "swad_ID.h"
|
|
||||||
|
|
||||||
#include <mysql/mysql.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define DATABASE_HOST "swad.ugr.es"
|
|
||||||
#define DATABASE_USER "swad"
|
|
||||||
#define DATABASE_PASSWORD "********"
|
|
||||||
#define DATABASE_DBNAME "swad"
|
|
||||||
#define PATH_SWAD_PRIVATE "/var/www/swad"
|
|
||||||
#define FOLDER_USR "usr"
|
|
||||||
#define WEB_USER "apache"
|
|
||||||
|
|
||||||
void ExecuteCommand (const char *Command)
|
|
||||||
{
|
|
||||||
printf ("%s\n",Command);
|
|
||||||
|
|
||||||
if (system (Command) < 0)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Error when executing command: %s\n",Command);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int CheckIfPathExists (const char *Path)
|
|
||||||
{
|
|
||||||
return access (Path,F_OK) ? 0 :
|
|
||||||
1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
char *Query = "SELECT UsrCod,UsrID FROM usr_IDs ORDER BY UsrCod";
|
|
||||||
MYSQL mysql;
|
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned NumRows;
|
|
||||||
unsigned NumUsrs = 0;
|
|
||||||
unsigned i;
|
|
||||||
long UsrCod;
|
|
||||||
char UsrID[ID_MAX_BYTES_USR_ID + 1];
|
|
||||||
char OldPathUsr[PATH_MAX + 1];
|
|
||||||
char Command[1024 + PATH_MAX * 2];
|
|
||||||
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mv %s/%s %s/%s_backup",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s/%s",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
for (i=0; i<100; i++)
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s/%s/%02u",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR,i);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mysql_init (&mysql) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not init MySQL.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (!mysql_real_connect (&mysql,DATABASE_HOST,DATABASE_USER,DATABASE_PASSWORD,DATABASE_DBNAME,0,NULL,0))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not connect to database");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
if (mysql_query (&mysql,Query))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
if ((mysql_res = mysql_store_result (&mysql)) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
if ((NumRows = (unsigned) mysql_num_rows (mysql_res)))
|
|
||||||
{
|
|
||||||
for (i=0; i<NumRows; i++)
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
if (row[0])
|
|
||||||
if (row[0][0])
|
|
||||||
if (sscanf (row[0],"%ld",&UsrCod) == 1) // UsrCod
|
|
||||||
if (row[1])
|
|
||||||
{
|
|
||||||
Str_Copy (UsrID,row[1],
|
|
||||||
ID_MAX_BYTES_USR_ID); // UsrID
|
|
||||||
snprintf (OldPathUsr,sizeof (OldPathUsr),
|
|
||||||
"%s/%s_backup/%c/%s",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR,UsrID[strlen (UsrID)-1],UsrID);
|
|
||||||
if (CheckIfPathExists (OldPathUsr))
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mv %s %s/%s/%02u/%ld",
|
|
||||||
OldPathUsr,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR,(unsigned) (UsrCod % 100),UsrCod);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
NumUsrs++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mysql_free_result (mysql_res);
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"chown -R %s:%s %s/%s",
|
|
||||||
WEB_USER,WEB_USER,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_USR);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
|
|
||||||
printf ("# Rows : %u\n"
|
|
||||||
"# Usrs: %u\n",NumRows,NumUsrs);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
// swad_convert_photos.c
|
|
||||||
// Created on: 25/11/2013
|
|
||||||
// Author: Antonio Cañas Vargas
|
|
||||||
// Compile with: gcc -Wall -O1 swad_convert_photos.c -o swad_convert_photos -lmysqlclient -L/usr/lib64/mysql
|
|
||||||
|
|
||||||
#include "swad_ID.h"
|
|
||||||
|
|
||||||
#include <mysql/mysql.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define DATABASE_HOST "swad.ugr.es"
|
|
||||||
#define DATABASE_USER "swad"
|
|
||||||
#define DATABASE_PASSWORD "********"
|
|
||||||
#define DATABASE_DBNAME "swad"
|
|
||||||
#define PATH_SWAD_PRIVATE "/var/www/swad"
|
|
||||||
#define PATH_SWAD_PUBLIC "/var/www/html/swad"
|
|
||||||
#define FOLDER_PHOTO "photo"
|
|
||||||
#define WEB_USER "apache"
|
|
||||||
|
|
||||||
void ExecuteCommand (const char *Command)
|
|
||||||
{
|
|
||||||
printf ("%s\n",Command);
|
|
||||||
|
|
||||||
if (system (Command) < 0)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Error when executing command: %s\n",Command);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int CheckIfPathExists (const char *Path)
|
|
||||||
{
|
|
||||||
return access (Path,F_OK) ? 0 :
|
|
||||||
1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
char *Query = "SELECT UsrCod,UsrID FROM usr_IDs ORDER BY UsrCod";
|
|
||||||
MYSQL mysql;
|
|
||||||
MYSQL_RES *mysql_res;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned NumRows;
|
|
||||||
unsigned NumPhotos = 0;
|
|
||||||
unsigned i;
|
|
||||||
long UsrCod;
|
|
||||||
char UsrID[ID_MAX_BYTES_USR_ID + 1];
|
|
||||||
char OldPathPhoto[PATH_MAX + 1];
|
|
||||||
char Command[1024 + PATH_MAX * 2];
|
|
||||||
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mv %s/%s %s/%s_backup",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s/%s",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
for (i=0; i<100; i++)
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s/%s/%02u",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,i);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mysql_init (&mysql) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not init MySQL.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (!mysql_real_connect (&mysql,DATABASE_HOST,DATABASE_USER,DATABASE_PASSWORD,DATABASE_DBNAME,0,NULL,0))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not connect to database");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
if (mysql_query (&mysql,Query))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
if ((mysql_res = mysql_store_result (&mysql)) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
if ((NumRows = (unsigned) mysql_num_rows (mysql_res)))
|
|
||||||
{
|
|
||||||
for (i=0; i<NumRows; i++)
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
if (row[0])
|
|
||||||
if (row[0][0])
|
|
||||||
if (sscanf (row[0],"%ld",&UsrCod) == 1) // UsrCod
|
|
||||||
if (row[1])
|
|
||||||
{
|
|
||||||
Str_Copy (UsrID,row[1],
|
|
||||||
ID_MAX_BYTES_USR_ID); // UsrID
|
|
||||||
snprintf (OldPathPhoto,sizeof (OldPathPhoto),
|
|
||||||
"%s/%s_backup/%s_original.jpg",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,UsrID);
|
|
||||||
if (CheckIfPathExists (OldPathPhoto))
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"cp -a %s %s/%s/%02u/%ld_original.jpg",
|
|
||||||
OldPathPhoto,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,(unsigned) (UsrCod % 100),UsrCod);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf (OldPathPhoto,sizeof (OldPathPhoto),
|
|
||||||
"%s/%s_backup/%s.jpg",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,UsrID);
|
|
||||||
if (CheckIfPathExists (OldPathPhoto))
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"cp -a %s %s/%s/%02u/%ld.jpg",
|
|
||||||
OldPathPhoto,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO,(unsigned) (UsrCod % 100),UsrCod);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
NumPhotos++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mysql_free_result (mysql_res);
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"chown -R %s:%s %s/%s",
|
|
||||||
WEB_USER,WEB_USER,
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_PHOTO);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"rm -f %s/%s/*.jpg",
|
|
||||||
PATH_SWAD_PUBLIC,FOLDER_PHOTO);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
|
|
||||||
printf ("# Rows : %u\n"
|
|
||||||
"# Photos: %u\n",NumRows,NumPhotos);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,181 +0,0 @@
|
||||||
// swad_convert_works.c
|
|
||||||
// Created on: 28/11/2013
|
|
||||||
// Author: Antonio Cañas Vargas
|
|
||||||
// Compile with: gcc -Wall -O1 swad_convert_works.c -o swad_convert_works -lmysqlclient -L/usr/lib64/mysql
|
|
||||||
|
|
||||||
#include "swad_ID.h"
|
|
||||||
|
|
||||||
#include <mysql/mysql.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#define DATABASE_HOST "swad.ugr.es"
|
|
||||||
#define DATABASE_USER "swad"
|
|
||||||
#define DATABASE_PASSWORD "********"
|
|
||||||
#define DATABASE_DBNAME "swad"
|
|
||||||
#define PATH_SWAD_PRIVATE "/var/www/swad"
|
|
||||||
#define FOLDER_CRS "crs"
|
|
||||||
#define FOLDER_USR "usr"
|
|
||||||
#define WEB_USER "apache"
|
|
||||||
|
|
||||||
void ExecuteCommand (const char *Command)
|
|
||||||
{
|
|
||||||
printf ("%s\n",Command);
|
|
||||||
|
|
||||||
if (system (Command) < 0)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Error when executing command: %s\n",Command);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int CheckIfPathExists (const char *Path)
|
|
||||||
{
|
|
||||||
return access (Path,F_OK) ? 0 :
|
|
||||||
1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main (void)
|
|
||||||
{
|
|
||||||
char Query[512];
|
|
||||||
MYSQL mysql;
|
|
||||||
MYSQL_RES *mysql_res_crs;
|
|
||||||
MYSQL_RES *mysql_res_usr;
|
|
||||||
MYSQL_ROW row;
|
|
||||||
unsigned NumCrss;
|
|
||||||
unsigned NumCrs;
|
|
||||||
unsigned NumUsrs;
|
|
||||||
unsigned NumUsr;
|
|
||||||
long CrsCod;
|
|
||||||
long UsrCod;
|
|
||||||
char UsrID[ID_MAX_BYTES_USR_ID + 1];
|
|
||||||
char OldPathUsrs[PATH_MAX + 1];
|
|
||||||
char OldPathUsr[PATH_MAX + 1];
|
|
||||||
char Path02u[PATH_MAX + 1];
|
|
||||||
char Command[1024 + PATH_MAX * 2];
|
|
||||||
|
|
||||||
if (mysql_init (&mysql) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not init MySQL.");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (!mysql_real_connect (&mysql,DATABASE_HOST,DATABASE_USER,DATABASE_PASSWORD,DATABASE_DBNAME,0,NULL,0))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"Can not connect to database");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
sprintf (Query,"SELECT CrsCod FROM courses ORDER BY CrsCod");
|
|
||||||
if (mysql_query (&mysql,Query))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
if ((mysql_res_crs = mysql_store_result (&mysql)) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
if ((NumCrss = (unsigned) mysql_num_rows (mysql_res_crs)))
|
|
||||||
{
|
|
||||||
for (NumCrs = 0;
|
|
||||||
NumCrs < NumCrss;
|
|
||||||
NumCrs++)
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row (mysql_res_crs);
|
|
||||||
if (row[0])
|
|
||||||
if (row[0][0])
|
|
||||||
if (sscanf (row[0],"%ld",&CrsCod) == 1) // CrsCod
|
|
||||||
{
|
|
||||||
snprintf (OldPathUsrs,sizeof (OldPathUsrs),
|
|
||||||
"%s/%s/%ld/%s",
|
|
||||||
PATH_SWAD_PRIVATE,FOLDER_CRS,CrsCod,FOLDER_USR);
|
|
||||||
if (CheckIfPathExists (OldPathUsrs))
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mv %s %s_backup",
|
|
||||||
OldPathUsrs,OldPathUsrs);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s",
|
|
||||||
OldPathUsrs);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
|
|
||||||
sprintf (Query,"SELECT usr_IDs.UsrCod,usr_IDs.UsrID"
|
|
||||||
" FROM crs_usr,usr_IDs"
|
|
||||||
" WHERE crs_usr.CrsCod=%ld"
|
|
||||||
" AND crs_usr.UsrCod=usr_IDs.UsrCod"
|
|
||||||
" ORDER BY usr_IDs.UsrCod",
|
|
||||||
CrsCod);
|
|
||||||
|
|
||||||
if (mysql_query (&mysql,Query))
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
if ((mysql_res_usr = mysql_store_result (&mysql)) == NULL)
|
|
||||||
{
|
|
||||||
fprintf (stderr,"%s",mysql_error (&mysql));
|
|
||||||
return 4;
|
|
||||||
}
|
|
||||||
if ((NumUsrs = (unsigned) mysql_num_rows (mysql_res_usr)))
|
|
||||||
{
|
|
||||||
for (NumUsr=0; NumUsr<NumUsrs; NumUsr++)
|
|
||||||
{
|
|
||||||
row = mysql_fetch_row (mysql_res_usr);
|
|
||||||
if (row[0])
|
|
||||||
if (row[0][0])
|
|
||||||
if (sscanf (row[0],"%ld",&UsrCod) == 1) // UsrCod
|
|
||||||
if (row[1])
|
|
||||||
{
|
|
||||||
Str_Copy (UsrID,row[1],
|
|
||||||
ID_MAX_BYTES_USR_ID,62); // UsrID
|
|
||||||
snprintf (OldPathUsr,sizeof (OldPathUsr),
|
|
||||||
"%s_backup/%s",
|
|
||||||
OldPathUsrs,UsrID);
|
|
||||||
if (CheckIfPathExists (OldPathUsr))
|
|
||||||
{
|
|
||||||
snprintf (Path02u,sizeof (Path02u),
|
|
||||||
"%s/%02u",
|
|
||||||
OldPathUsrs,(unsigned) (UsrCod % 100));
|
|
||||||
if (!CheckIfPathExists (Path02u))
|
|
||||||
{
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mkdir %s",
|
|
||||||
Path02u);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
}
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"mv %s %s/%ld",
|
|
||||||
OldPathUsr,Path02u,UsrCod);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mysql_free_result (mysql_res_usr);
|
|
||||||
}
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"chown -R %s:%s %s",
|
|
||||||
WEB_USER,WEB_USER,OldPathUsrs);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
/*
|
|
||||||
snprintf (Command,sizeof (Command),
|
|
||||||
"rm -Rf %s_backup",
|
|
||||||
OldPathUsrs);
|
|
||||||
ExecuteCommand (Command);
|
|
||||||
*/
|
|
||||||
printf ("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mysql_free_result (mysql_res_crs);
|
|
||||||
|
|
||||||
printf ("# courses: %u\n",NumCrss);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -993,7 +993,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
||||||
char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||||
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||||
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
|
||||||
char OrderBySubQuery[256];
|
char *OrderBySubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
|
@ -1009,6 +1009,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
||||||
" FROM countries ORDER BY Name_%s",
|
" FROM countries ORDER BY Name_%s",
|
||||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||||
|
OrderBySubQuery = NULL;
|
||||||
break;
|
break;
|
||||||
case Cty_GET_EXTRA_DATA:
|
case Cty_GET_EXTRA_DATA:
|
||||||
SubQueryNam1[0] = '\0';
|
SubQueryNam1[0] = '\0';
|
||||||
|
@ -1045,12 +1046,14 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
||||||
switch (Gbl.Ctys.SelectedOrder)
|
switch (Gbl.Ctys.SelectedOrder)
|
||||||
{
|
{
|
||||||
case Cty_ORDER_BY_COUNTRY:
|
case Cty_ORDER_BY_COUNTRY:
|
||||||
sprintf (OrderBySubQuery,"Name_%s",
|
if (asprintf (&OrderBySubQuery,"Name_%s",
|
||||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
case Cty_ORDER_BY_NUM_USRS:
|
case Cty_ORDER_BY_NUM_USRS:
|
||||||
sprintf (OrderBySubQuery,"NumUsrs DESC,Name_%s",
|
if (asprintf (&OrderBySubQuery,"NumUsrs DESC,Name_%s",
|
||||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DB_BuildQuery ("(SELECT countries.CtyCod,countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
DB_BuildQuery ("(SELECT countries.CtyCod,countries.Alpha2,%s%sCOUNT(*) AS NumUsrs"
|
||||||
|
@ -1070,6 +1073,11 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
|
||||||
|
|
||||||
/***** Count number of rows in result *****/
|
/***** Count number of rows in result *****/
|
||||||
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get countries");
|
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get countries");
|
||||||
|
|
||||||
|
/***** Free memory for subquery *****/
|
||||||
|
if (OrderBySubQuery)
|
||||||
|
free ((void *) OrderBySubQuery);
|
||||||
|
|
||||||
if (NumRows) // Countries found...
|
if (NumRows) // Countries found...
|
||||||
{
|
{
|
||||||
Gbl.Ctys.Num = (unsigned) NumRows;
|
Gbl.Ctys.Num = (unsigned) NumRows;
|
||||||
|
|
|
@ -3028,17 +3028,23 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
|
||||||
extern const char *Txt_Year_OF_A_DEGREE;
|
extern const char *Txt_Year_OF_A_DEGREE;
|
||||||
extern const char *Txt_Course;
|
extern const char *Txt_Course;
|
||||||
extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES];
|
extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES];
|
||||||
char SubQuery[32];
|
char *SubQuery;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned NumCrss;
|
unsigned NumCrss;
|
||||||
unsigned NumCrs;
|
unsigned NumCrs;
|
||||||
|
|
||||||
/***** Get courses of a user from database *****/
|
/***** Get courses of a user from database *****/
|
||||||
if (Role == Rol_UNK)
|
if (Role == Rol_UNK) // Role == Rol_UNK ==> any role
|
||||||
SubQuery[0] = '\0'; // Role == Rol_UNK ==> any role
|
{
|
||||||
|
if (asprintf (&SubQuery,"%s","") < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sprintf (SubQuery," AND crs_usr.Role=%u",(unsigned) Role);
|
{
|
||||||
|
if (asprintf (&SubQuery," AND crs_usr.Role=%u",(unsigned) Role) < 0)
|
||||||
|
Lay_NotEnoughMemoryExit ();
|
||||||
|
}
|
||||||
DB_BuildQuery ("SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName,"
|
DB_BuildQuery ("SELECT degrees.DegCod,courses.CrsCod,degrees.ShortName,degrees.FullName,"
|
||||||
"courses.Year,courses.FullName,centres.ShortName,crs_usr.Accepted"
|
"courses.Year,courses.FullName,centres.ShortName,crs_usr.Accepted"
|
||||||
" FROM crs_usr,courses,degrees,centres"
|
" FROM crs_usr,courses,degrees,centres"
|
||||||
|
@ -3048,9 +3054,13 @@ void Crs_GetAndWriteCrssOfAUsr (const struct UsrData *UsrDat,Rol_Role_t Role)
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" ORDER BY degrees.FullName,courses.Year,courses.FullName",
|
" ORDER BY degrees.FullName,courses.Year,courses.FullName",
|
||||||
UsrDat->UsrCod,SubQuery);
|
UsrDat->UsrCod,SubQuery);
|
||||||
|
NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses of a user");
|
||||||
|
|
||||||
|
/***** Free allocated memory for subquery *****/
|
||||||
|
free ((void *) SubQuery);
|
||||||
|
|
||||||
/***** List the courses (one row per course) *****/
|
/***** List the courses (one row per course) *****/
|
||||||
if ((NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses of a user")))
|
if (NumCrss)
|
||||||
{
|
{
|
||||||
/* Start box and table */
|
/* Start box and table */
|
||||||
Box_StartBoxTable ("100%",NULL,NULL,
|
Box_StartBoxTable ("100%",NULL,NULL,
|
||||||
|
|
Loading…
Reference in New Issue