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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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...
{ {

View File

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

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

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_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,