Version 18.7.5

This commit is contained in:
Antonio Cañas Vargas 2018-10-18 20:27:22 +02:00
parent ef6631b5ac
commit 28969d7ac0
5 changed files with 113 additions and 42 deletions

View File

@ -210,8 +210,7 @@ void Acc_CheckIfEmptyAccountExists (void)
" AND usr_data.Password=''",
ID) < 0)
Lay_NotEnoughMemoryExit ();
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get user's codes");
free ((void *) Query);
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get user's codes");
if (NumUsrs)
{
@ -639,7 +638,7 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
" WHERE Nickname='%s' AND UsrCod<>%ld",
NewNicknameWithoutArroba,Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QueryCOUNT (Query,"can not check if nickname already existed")) // A nickname of another user is the same that this nickname
if (DB_QueryCOUNT_free (Query,"can not check if nickname already existed")) // A nickname of another user is the same that this nickname
{
Error = true;
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
@ -647,7 +646,6 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
NewNicknameWithoutArroba);
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
}
free ((void *) Query);
}
else // New nickname is not valid
{
@ -671,7 +669,7 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
" WHERE E_mail='%s' AND Confirmed='Y'",
NewEmail) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QueryCOUNT (Query,"can not check if email already existed")) // An email of another user is the same that my email
if (DB_QueryCOUNT_free (Query,"can not check if email already existed")) // An email of another user is the same that my email
{
Error = true;
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
@ -679,7 +677,6 @@ static bool Acc_GetParamsNewAccount (char NewNicknameWithoutArroba[Nck_MAX_BYTES
NewEmail);
Ale_ShowAlert (Ale_WARNING,Gbl.Alert.Txt);
}
free ((void *) Query);
}
else // New email is not valid
{
@ -779,9 +776,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
(unsigned) Mnu_MENU_DEFAULT,
(unsigned) Cfg_DEFAULT_COLUMNS) < 0)
Lay_NotEnoughMemoryExit ();
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (QueryUsrData,
"can not create user");
free ((void *) QueryUsrData);
UsrDat->UsrCod = DB_QueryINSERTandReturnCode_free (QueryUsrData,"can not create user");
/* Insert user's IDs as confirmed */
for (NumID = 0;
@ -798,8 +793,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
UsrDat->IDs.List[NumID].Confirmed ? 'Y' :
'N') < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryINSERT (QueryUsrIDs,"can not store user's ID when creating user");
free ((void *) QueryUsrIDs);
DB_QueryINSERT_free (QueryUsrIDs,"can not store user's ID when creating user");
}
/***** Create directory for the user, if not exists *****/
@ -1038,8 +1032,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
if (asprintf (&Query,"DELETE FROM crs_usr_requests WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's requests for inscription");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's requests for inscription");
/***** Remove user from possible duplicate users *****/
Dup_RemoveUsrFromDuplicated (UsrDat->UsrCod);
@ -1048,8 +1041,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
if (asprintf (&Query,"DELETE FROM crs_usr WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove a user from all courses");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove a user from all courses");
if (QuietOrVerbose == Cns_VERBOSE)
{
@ -1063,8 +1055,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
if (asprintf (&Query,"DELETE FROM admin WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove a user as administrator");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove a user as administrator");
if (QuietOrVerbose == Cns_VERBOSE)
{
@ -1121,15 +1112,13 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
if (asprintf (&Query,"DELETE FROM connected WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove a user from table of connected users");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove a user from table of connected users");
/***** Remove all sessions of this user *****/
if (asprintf (&Query,"DELETE FROM sessions WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove sessions of a user");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove sessions of a user");
/***** Remove social content associated to the user *****/
Soc_RemoveUsrSocialContent (UsrDat->UsrCod);
@ -1195,49 +1184,42 @@ static void Acc_RemoveUsr (struct UsrData *UsrDat)
if (asprintf (&Query,"DELETE FROM usr_webs WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's webs / social networks");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's webs / social networks");
/***** Remove user's nicknames *****/
if (asprintf (&Query,"DELETE FROM usr_nicknames WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's nicknames");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's nicknames");
/***** Remove user's emails *****/
if (asprintf (&Query,"DELETE FROM pending_emails WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove pending user's emails");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove pending user's emails");
if (asprintf (&Query,"DELETE FROM usr_emails WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's emails");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's emails");
/***** Remove user's IDs *****/
if (asprintf (&Query,"DELETE FROM usr_IDs WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's IDs");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's IDs");
/***** Remove user's last data *****/
if (asprintf (&Query,"DELETE FROM usr_last WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's last data");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's last data");
/***** Remove user's data *****/
if (asprintf (&Query,"DELETE FROM usr_data WHERE UsrCod=%ld",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryDELETE (Query,"can not remove user's data");
free ((void *) Query);
DB_QueryDELETE_free (Query,"can not remove user's data");
}
/*****************************************************************************/

View File

@ -25,8 +25,9 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <linux/stddef.h> // For NULL
#include <stdio.h> // For fprintf
#include <stdio.h> // For fprintf, asprintf
#include <stdlib.h> // For malloc and free
#include <string.h> // For string functions
@ -5119,15 +5120,16 @@ char *Act_GetActionTextFromDB (long ActCod,
char ActTxt[Act_MAX_BYTES_ACTION_TXT + 1])
{
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
/***** Get test for an action from database *****/
sprintf (Query,"SELECT Txt FROM actions"
" WHERE ActCod=%ld AND Language='%s'",
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES]); // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
if (DB_QuerySELECT (Query,&mysql_res,"can not get text for an action"))
if (asprintf (&Query,"SELECT Txt FROM actions"
" WHERE ActCod=%ld AND Language='%s'",
ActCod,Txt_STR_LANG_ID[Txt_LANGUAGE_ES]) < 0) // !!! TODO: Replace Txt_LANGUAGE_ES by Gbl.Prefs.Language !!!
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get text for an action"))
{
/***** Get text *****/
row = mysql_fetch_row (mysql_res);

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.7.4 (2018-10-18)"
#define Log_PLATFORM_VERSION "SWAD 18.7.5 (2018-10-18)"
#define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.7.5: Oct 18, 2018 Some sprintf for database queries changed by asprintf. (236688 lines)
Version 18.7.4: Oct 18, 2018 Some sprintf for database queries changed by asprintf. (236640 lines)
Version 18.7.3: Oct 18, 2018 Changes in layout of list of attendance. (236608 lines)
Version 18.7.2: Oct 18, 2018 Changes in layout of list of attendance. (236602 lines)

View File

@ -3066,6 +3066,24 @@ void DB_CloseDBConnection (void)
/******************** Make a SELECT query from database **********************/
/*****************************************************************************/
unsigned long DB_QuerySELECT_free (const char *Query,MYSQL_RES **mysql_res,const char *MsgError)
{
int Result;
/***** Query database *****/
Result = mysql_query (&Gbl.mysql,Query); // Returns 0 on success
free ((void *) Query);
if (Result)
DB_ExitOnMySQLError (MsgError);
/***** Store query result *****/
if ((*mysql_res = mysql_store_result (&Gbl.mysql)) == NULL)
DB_ExitOnMySQLError (MsgError);
/***** Return number of rows of result *****/
return (unsigned long) mysql_num_rows (*mysql_res);
}
unsigned long DB_QuerySELECT (const char *Query,MYSQL_RES **mysql_res,const char *MsgError)
{
/***** Query database *****/
@ -3084,6 +3102,26 @@ unsigned long DB_QuerySELECT (const char *Query,MYSQL_RES **mysql_res,const char
/**************** Make a SELECT COUNT query from database ********************/
/*****************************************************************************/
unsigned long DB_QueryCOUNT_free (const char *Query,const char *MsgError)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
/***** Make query "SELECT COUNT(*) FROM..." *****/
DB_QuerySELECT_free (Query,&mysql_res,MsgError);
/***** Get number of rows *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%lu",&NumRows) != 1)
Lay_ShowErrorAndExit ("Error when counting number of rows.");
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
return NumRows;
}
unsigned long DB_QueryCOUNT (const char *Query,const char *MsgError)
{
MYSQL_RES *mysql_res;
@ -3108,6 +3146,17 @@ unsigned long DB_QueryCOUNT (const char *Query,const char *MsgError)
/******************** Make an INSERT query in database ***********************/
/*****************************************************************************/
void DB_QueryINSERT_free (const char *Query,const char *MsgError)
{
int Result;
/***** Query database *****/
Result = mysql_query (&Gbl.mysql,Query); // Returns 0 on success
free ((void *) Query);
if (Result)
DB_ExitOnMySQLError (MsgError);
}
void DB_QueryINSERT (const char *Query,const char *MsgError)
{
/***** Query database *****/
@ -3119,6 +3168,20 @@ void DB_QueryINSERT (const char *Query,const char *MsgError)
/** Make an INSERT query in database and return code of last inserted item ***/
/*****************************************************************************/
long DB_QueryINSERTandReturnCode_free (const char *Query,const char *MsgError)
{
int Result;
/***** Query database *****/
Result = mysql_query (&Gbl.mysql,Query); // Returns 0 on success
free ((void *) Query);
if (Result)
DB_ExitOnMySQLError (MsgError);
/***** Return the code of the inserted item *****/
return (long) mysql_insert_id (&Gbl.mysql);
}
long DB_QueryINSERTandReturnCode (const char *Query,const char *MsgError)
{
/***** Query database *****/
@ -3158,6 +3221,17 @@ void DB_QueryUPDATE (const char *Query,const char *MsgError)
/******************** Make a DELETE query from database **********************/
/*****************************************************************************/
void DB_QueryDELETE_free (const char *Query,const char *MsgError)
{
int Result;
/***** Query database *****/
Result = mysql_query (&Gbl.mysql,Query); // Returns 0 on success
free ((void *) Query);
if (Result)
DB_ExitOnMySQLError (MsgError);
}
void DB_QueryDELETE (const char *Query,const char *MsgError)
{
/***** Query database *****/

View File

@ -36,13 +36,25 @@
void DB_CreateTablesIfNotExist (void);
void DB_OpenDBConnection (void);
void DB_CloseDBConnection (void);
unsigned long DB_QuerySELECT_free (const char *Query,MYSQL_RES **mysql_res,const char *MsgError);
unsigned long DB_QuerySELECT (const char *Query,MYSQL_RES **mysql_res,const char *MsgError);
unsigned long DB_QueryCOUNT_free (const char *Query,const char *MsgError);
unsigned long DB_QueryCOUNT (const char *Query,const char *MsgError);
void DB_QueryINSERT_free (const char *Query,const char *MsgError);
void DB_QueryINSERT (const char *Query,const char *MsgError);
long DB_QueryINSERTandReturnCode_free (const char *Query,const char *MsgError);
long DB_QueryINSERTandReturnCode (const char *Query,const char *MsgError);
void DB_QueryREPLACE (const char *Query,const char *MsgError);
void DB_QueryUPDATE (const char *Query,const char *MsgError);
void DB_QueryDELETE_free (const char *Query,const char *MsgError);
void DB_QueryDELETE (const char *Query,const char *MsgError);
void DB_Query (const char *Query,const char *MsgError);
void DB_FreeMySQLResult (MYSQL_RES **mysql_res);
void DB_ExitOnMySQLError (const char *Message);