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 *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_account.h"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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...
|
||||
{
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 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;
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue