Version 18.9.10

This commit is contained in:
Antonio Cañas Vargas 2018-10-30 01:00:46 +01:00
parent de558876f2
commit 132a181191
13 changed files with 105 additions and 521 deletions

View File

@ -25,8 +25,6 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include <string.h> // For string functions
#include "swad_account.h"

View File

@ -25,9 +25,8 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#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 <string.h> // For string functions

View File

@ -982,11 +982,11 @@ static void Agd_GetParamEventOrder (void)
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
{
char UsrSubQuery[Agd_MAX_BYTES_SUBQUERY];
char *UsrSubQuery;
char Past__FutureEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
char PrivatPublicEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
char HiddenVisiblEventsSubQuery[Agd_MAX_BYTES_SUBQUERY];
char OrderBySubQuery[Agd_MAX_BYTES_SUBQUERY];
char *OrderBySubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -1008,7 +1008,9 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
DoQuery = false; // Nothing to get from database
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)
Str_Copy (Past__FutureEventsSubQuery,
" AND DATE(StartTime)<=CURDATE()"
@ -1063,7 +1065,9 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
break;
case Agd_ANOTHER_AGENDA_TODAY:
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)
Str_Copy (Past__FutureEventsSubQuery,
" AND DATE(StartTime)<=CURDATE()"
@ -1085,18 +1089,18 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
switch (Gbl.Agenda.SelectedOrder)
{
case Agd_ORDER_BY_START_DATE:
Str_Copy (OrderBySubQuery,"StartTime,"
"EndTime,"
"Event,"
"Location",
Agd_MAX_BYTES_SUBQUERY);
if (asprintf (&OrderBySubQuery,"StartTime,"
"EndTime,"
"Event,"
"Location") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Agd_ORDER_BY_END_DATE:
Str_Copy (OrderBySubQuery,"EndTime,"
"StartTime,"
"Event,"
"Location",
Agd_MAX_BYTES_SUBQUERY);
if (asprintf (&OrderBySubQuery,"EndTime,"
"StartTime,"
"Event,"
"Location") < 0)
Lay_NotEnoughMemoryExit ();
break;
}
@ -1111,6 +1115,10 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
OrderBySubQuery);
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...
{
Gbl.Agenda.Num = (unsigned) NumRows;

View File

@ -25,9 +25,6 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include "swad_announcement.h"
#include "swad_box.h"
#include "swad_database.h"

View File

@ -621,8 +621,8 @@ static void Asg_PutParams (void)
void Asg_GetListAssignments (void)
{
char HiddenSubQuery[256];
char OrderBySubQuery[256];
char *HiddenSubQuery;
char *OrderBySubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -639,16 +639,21 @@ void Asg_GetListAssignments (void)
HiddenSubQuery[0] = '\0';
break;
default:
sprintf (HiddenSubQuery," AND Hidden='N'");
if (asprintf (&HiddenSubQuery," AND Hidden='N'") < 0)
Lay_NotEnoughMemoryExit ();
break;
}
switch (Gbl.Asgs.SelectedOrder)
{
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;
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;
}
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"
" WHERE crs_grp_usr.UsrCod=%ld AND asg_grp.GrpCod=crs_grp_usr.GrpCod))"
" ORDER BY %s",
Gbl.CurrentCrs.Crs.CrsCod,
HiddenSubQuery,
Gbl.CurrentCrs.Crs.CrsCod,HiddenSubQuery,
Gbl.Usrs.Me.UsrDat.UsrCod,
OrderBySubQuery);
else // Gbl.CurrentCrs.Grps.WhichGrps == Grp_ALL_GROUPS
@ -668,9 +672,14 @@ void Asg_GetListAssignments (void)
" FROM assignments"
" WHERE CrsCod=%ld%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");
/* Free allocated memory for subqueries */
free ((void *) OrderBySubQuery);
free ((void *) HiddenSubQuery);
if (NumRows) // Assignments found...
{
Gbl.Asgs.Num = (unsigned) NumRows;

View File

@ -604,8 +604,8 @@ static void Att_PutParams (void)
static void Att_GetListAttEvents (Att_OrderTime_t Order)
{
char HiddenSubQuery[256];
char OrderBySubQuery[256];
char *HiddenSubQuery;
char *OrderBySubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -619,25 +619,27 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
{
case Rol_TCH:
case Rol_SYS_ADM:
HiddenSubQuery[0] = '\0';
if (asprintf (&HiddenSubQuery,"%s","") < 0)
Lay_NotEnoughMemoryExit ();
break;
default:
sprintf (HiddenSubQuery," AND Hidden='N'");
if (asprintf (&HiddenSubQuery," AND Hidden='N'") < 0)
Lay_NotEnoughMemoryExit ();
break;
}
switch (Gbl.AttEvents.SelectedOrder)
{
case Dat_START_TIME:
if (Order == Att_NEWEST_FIRST)
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Title DESC");
else
sprintf (OrderBySubQuery,"StartTime,EndTime,Title");
if (asprintf (&OrderBySubQuery,
(Order == Att_NEWEST_FIRST) ? "StartTime DESC,EndTime DESC,Title DESC" :
"StartTime,EndTime,Title") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Dat_END_TIME:
if (Order == Att_NEWEST_FIRST)
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Title DESC");
else
sprintf (OrderBySubQuery,"EndTime,StartTime,Title");
if (asprintf (&OrderBySubQuery,
(Order == Att_NEWEST_FIRST) ? "EndTime DESC,StartTime DESC,Title DESC" :
"EndTime,StartTime,Title") < 0)
Lay_NotEnoughMemoryExit ();
break;
}
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"
" ORDER BY %s",
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;
@ -2424,18 +2431,19 @@ static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSel
Lay_NotEnoughMemoryExit ();
/***** Count number of students registered in an event in database *****/
sprintf (Gbl.DB.QueryPtr,"SELECT COUNT(*) FROM att_usr"
" WHERE AttCod=%ld"
" AND UsrCod IN (",
AttCod);
snprintf (Gbl.DB.QueryPtr,MaxLength + 1,
"SELECT COUNT(*) FROM att_usr"
" WHERE AttCod=%ld"
" AND UsrCod IN (",
AttCod);
for (NumStd = 0;
NumStd < NumStdsInList;
NumStd++)
{
sprintf (SubQuery,
NumStd ? ",%ld" :
"%ld",
LstSelectedUsrCods[NumStd]);
snprintf (SubQuery,sizeof (SubQuery),
NumStd ? ",%ld" :
"%ld",
LstSelectedUsrCods[NumStd]);
Str_Concat (Gbl.DB.QueryPtr,SubQuery,
MaxLength);
}

View File

@ -1033,7 +1033,7 @@ static void Ctr_PutIconToViewCentres (void)
void Ctr_GetListCentres (long InsCod)
{
char OrderBySubQuery[256];
char *OrderBySubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -1044,10 +1044,12 @@ void Ctr_GetListCentres (long InsCod)
switch (Gbl.Ctrs.SelectedOrder)
{
case Ctr_ORDER_BY_CENTRE:
sprintf (OrderBySubQuery,"FullName");
if (asprintf (&OrderBySubQuery,"FullName") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Ctr_ORDER_BY_NUM_TCHS:
sprintf (OrderBySubQuery,"NumUsrs DESC,FullName");
if (asprintf (&OrderBySubQuery,"NumUsrs DESC,FullName") < 0)
Lay_NotEnoughMemoryExit ();
break;
}
DB_BuildQuery ("(SELECT centres.CtrCod,centres.InsCod,centres.PlcCod,"
@ -1070,6 +1072,7 @@ void Ctr_GetListCentres (long InsCod)
InsCod,
OrderBySubQuery);
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get centres");
free ((void *) OrderBySubQuery);
if (NumRows) // Centres found...
{

View File

@ -355,10 +355,11 @@ En OpenSWAD:
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 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.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.

View File

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

View File

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

View File

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

View File

@ -993,7 +993,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
char SubQueryNam2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char SubQueryWWW1[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char SubQueryWWW2[Cty_MAX_BYTES_SUBQUERY_CTYS + 1];
char OrderBySubQuery[256];
char *OrderBySubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -1009,6 +1009,7 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
" FROM countries ORDER BY Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language],
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
OrderBySubQuery = NULL;
break;
case Cty_GET_EXTRA_DATA:
SubQueryNam1[0] = '\0';
@ -1045,12 +1046,14 @@ void Cty_GetListCountries (Cty_GetExtraData_t GetExtraData)
switch (Gbl.Ctys.SelectedOrder)
{
case Cty_ORDER_BY_COUNTRY:
sprintf (OrderBySubQuery,"Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
if (asprintf (&OrderBySubQuery,"Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Cty_ORDER_BY_NUM_USRS:
sprintf (OrderBySubQuery,"NumUsrs DESC,Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
if (asprintf (&OrderBySubQuery,"NumUsrs DESC,Name_%s",
Txt_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
Lay_NotEnoughMemoryExit ();
break;
}
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 *****/
NumRows = DB_QuerySELECT_new (&mysql_res,"can not get countries");
/***** Free memory for subquery *****/
if (OrderBySubQuery)
free ((void *) OrderBySubQuery);
if (NumRows) // Countries found...
{
Gbl.Ctys.Num = (unsigned) NumRows;

View File

@ -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_Course;
extern const char *Txt_ROLES_PLURAL_BRIEF_Abc[Rol_NUM_ROLES];
char SubQuery[32];
char *SubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumCrss;
unsigned NumCrs;
/***** Get courses of a user from database *****/
if (Role == Rol_UNK)
SubQuery[0] = '\0'; // Role == Rol_UNK ==> any role
if (Role == Rol_UNK) // Role == Rol_UNK ==> any role
{
if (asprintf (&SubQuery,"%s","") < 0)
Lay_NotEnoughMemoryExit ();
}
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,"
"courses.Year,courses.FullName,centres.ShortName,crs_usr.Accepted"
" 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"
" ORDER BY degrees.FullName,courses.Year,courses.FullName",
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) *****/
if ((NumCrss = (unsigned) DB_QuerySELECT_new (&mysql_res,"can not get courses of a user")))
if (NumCrss)
{
/* Start box and table */
Box_StartBoxTable ("100%",NULL,NULL,