Version 18.7.36

This commit is contained in:
Antonio Cañas Vargas 2018-10-23 23:05:16 +02:00
parent 251f67c893
commit 65c3e99394
4 changed files with 181 additions and 152 deletions

View File

@ -25,6 +25,12 @@
/*********************************** Headers *********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <mysql/mysql.h> // To access MySQL databases
#include <stdio.h> // For asprintf
#include <stdlib.h> // For malloc and free
#include <string.h> // For string functions
#include "swad_action.h"
#include "swad_box.h"
#include "swad_config.h"
@ -34,10 +40,6 @@
#include "swad_tab.h"
#include "swad_theme.h"
#include <mysql/mysql.h> // To access MySQL databases
#include <stdlib.h> // For malloc and free
#include <string.h> // For string functions
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
@ -98,7 +100,7 @@ void MFU_FreeMFUActions (struct MFU_ListMFUActions *ListMFUActions)
void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxActionsShown)
{
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
char Query[512];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRow,NumRows;
@ -106,10 +108,11 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
Act_Action_t Action;
/***** Get most frequently used actions *****/
sprintf (Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld ORDER BY Score DESC,LastClick DESC",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get most frequently used actions");
if (asprintf (&Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld ORDER BY Score DESC,LastClick DESC",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumRows = DB_QuerySELECT_free (Query,&mysql_res,"can not get most frequently used actions");
/***** Write list of frequently used actions *****/
for (NumRow = 0, ListMFUActions->NumActions = 0;
@ -138,7 +141,7 @@ void MFU_GetMFUActions (struct MFU_ListMFUActions *ListMFUActions,unsigned MaxAc
Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
{
extern Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD];
char Query[512];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumActions;
@ -150,11 +153,12 @@ Act_Action_t MFU_GetMyLastActionInCurrentTab (void)
if (Gbl.Usrs.Me.UsrDat.UsrCod > 0)
{
/***** Get my most frequently used actions *****/
sprintf (Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld"
" ORDER BY LastClick DESC,Score DESC",
Gbl.Usrs.Me.UsrDat.UsrCod);
NumActions = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get most frequently used actions");
if (asprintf (&Query,"SELECT ActCod FROM actions_MFU"
" WHERE UsrCod=%ld"
" ORDER BY LastClick DESC,Score DESC",
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumActions = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get most frequently used actions");
/***** Loop over list of frequently used actions *****/
for (NumAct = 0;
@ -332,7 +336,7 @@ void MFU_WriteSmallMFUActions (struct MFU_ListMFUActions *ListMFUActions)
void MFU_UpdateMFUActions (void)
{
char Query[1024];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
float Score;
@ -353,10 +357,11 @@ void MFU_UpdateMFUActions (void)
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
/***** Get current score *****/
sprintf (Query,"SELECT Score FROM actions_MFU"
" WHERE UsrCod=%ld AND ActCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get score for current action"))
if (asprintf (&Query,"SELECT Score FROM actions_MFU"
" WHERE UsrCod=%ld AND ActCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get score for current action"))
{
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%f",&Score) != 1)
@ -372,19 +377,21 @@ void MFU_UpdateMFUActions (void)
DB_FreeMySQLResult (&mysql_res);
/***** Update score for the current action *****/
sprintf (Query,"REPLACE INTO actions_MFU"
" (UsrCod,ActCod,Score,LastClick)"
" VALUES"
" (%ld,%ld,'%f',NOW())",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod,Score);
DB_QueryREPLACE (Query,"can not update most frequently used actions");
if (asprintf (&Query,"REPLACE INTO actions_MFU"
" (UsrCod,ActCod,Score,LastClick)"
" VALUES"
" (%ld,%ld,'%f',NOW())",
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod,Score) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not update most frequently used actions");
/***** Update score for other actions *****/
sprintf (Query,"UPDATE actions_MFU SET Score=GREATEST(Score*'%f','%f')"
" WHERE UsrCod=%ld AND ActCod<>%ld",
MFU_DECREASE_FACTOR,MFU_MIN_SCORE,
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod);
DB_QueryUPDATE (Query,"can not update most frequently used actions");
if (asprintf (&Query,"UPDATE actions_MFU SET Score=GREATEST(Score*'%f','%f')"
" WHERE UsrCod=%ld AND ActCod<>%ld",
MFU_DECREASE_FACTOR,MFU_MIN_SCORE,
Gbl.Usrs.Me.UsrDat.UsrCod,ActCod) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryUPDATE_free (Query,"can not update most frequently used actions");
Str_SetDecimalPointToLocal (); // Return to local system
}

View File

@ -355,10 +355,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.7.35 (2018-10-23)"
#define Log_PLATFORM_VERSION "SWAD 18.7.36 (2018-10-23)"
#define CSS_FILE "swad18.4.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.7.36: Oct 23, 2018 Some sprintf for database queries changed by asprintf. (237905 lines)
Version 18.7.35: Oct 23, 2018 Some sprintf for database queries changed by asprintf. (237876 lines)
Version 18.7.34: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237814 lines)
Version 18.7.33: Oct 22, 2018 Some sprintf for database queries changed by asprintf. (237796 lines)

View File

@ -25,6 +25,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include <string.h>
#include "swad_box.h"
@ -203,7 +205,7 @@ static void Net_GetMyWebsAndSocialNetsFromForm (void);
void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
{
char Query[256 + Cns_MAX_BYTES_WWW];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Net_WebsAndSocialNetworks_t NumURL;
@ -222,12 +224,13 @@ void Net_ShowWebsAndSocialNets (const struct UsrData *UsrDat)
NumURL++)
{
/***** Get user's web / social network from database *****/
sprintf (Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL]);
if (asprintf (&Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL]) < 0)
Lay_NotEnoughMemoryExit ();
/***** Check if exists the web / social network for this user *****/
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's web / social network"))
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's web / social network"))
{
/* Get URL */
row = mysql_fetch_row (mysql_res);
@ -278,7 +281,7 @@ void Net_ShowFormMyWebsAndSocialNets (void)
extern const char *Hlp_PROFILE_Webs;
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Webs_social_networks;
char Query[256 + Cns_MAX_BYTES_WWW];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
Net_WebsAndSocialNetworks_t NumURL;
@ -301,13 +304,14 @@ void Net_ShowFormMyWebsAndSocialNets (void)
NumURL++)
{
/***** Get user's web / social network from database *****/
sprintf (Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[NumURL]);
if (asprintf (&Query,"SELECT URL FROM usr_webs"
" WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[NumURL]) < 0)
Lay_NotEnoughMemoryExit ();
/***** Check number of rows in result *****/
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's web / social network"))
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's web / social network"))
{
/***** Read the data comunes a all the users *****/
row = mysql_fetch_row (mysql_res);
@ -390,7 +394,7 @@ void Net_UpdateMyWebsAndSocialNets (void)
static void Net_GetMyWebsAndSocialNetsFromForm (void)
{
char Query[256 + Cns_MAX_BYTES_WWW];
char *Query;
Net_WebsAndSocialNetworks_t Web;
char URL[Cns_MAX_BYTES_WWW + 1];
@ -406,22 +410,24 @@ static void Net_GetMyWebsAndSocialNetsFromForm (void)
if (URL[0])
{
/***** Insert or replace web / social network *****/
sprintf (Query,"REPLACE INTO usr_webs"
" (UsrCod,Web,URL)"
" VALUES"
" (%ld,'%s','%s')",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[Web],
URL);
DB_QueryREPLACE (Query,"can not update user's web / social network");
if (asprintf (&Query,"REPLACE INTO usr_webs"
" (UsrCod,Web,URL)"
" VALUES"
" (%ld,'%s','%s')",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[Web],
URL) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not update user's web / social network");
}
else
{
/***** Remove web / social network *****/
sprintf (Query,"DELETE FROM usr_webs WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[Web]);
DB_QueryREPLACE (Query,"can not remove user's web / social network");
if (asprintf (&Query,"DELETE FROM usr_webs WHERE UsrCod=%ld AND Web='%s'",
Gbl.Usrs.Me.UsrDat.UsrCod,
Net_WebsAndSocialNetworksDB[Web]) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not remove user's web / social network");
}
}
@ -436,7 +442,7 @@ void Net_ShowWebAndSocialNetworksStats (void)
extern const char *Txt_Web_social_network;
extern const char *Txt_No_of_users;
extern const char *Txt_PERCENT_of_users;
char Query[512];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned NumRows;
@ -457,77 +463,83 @@ void Net_ShowWebAndSocialNetworksStats (void)
switch (Gbl.Scope.Current)
{
case Sco_SCOPE_SYS:
sprintf (Query,"SELECT Web,COUNT(*) AS N"
" FROM usr_webs"
" GROUP BY Web"
" ORDER BY N DESC,Web");
if (asprintf (&Query,"SELECT Web,COUNT(*) AS N"
" FROM usr_webs"
" GROUP BY Web"
" ORDER BY N DESC,Web") < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CTY:
sprintf (Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_webs"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCty.Cty.CtyCod);
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM institutions,centres,degrees,courses,crs_usr,usr_webs"
" WHERE institutions.CtyCod=%ld"
" AND institutions.InsCod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCty.Cty.CtyCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_INS:
sprintf (Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_webs"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentIns.Ins.InsCod);
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM centres,degrees,courses,crs_usr,usr_webs"
" WHERE centres.InsCod=%ld"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentIns.Ins.InsCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CTR:
sprintf (Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM degrees,courses,crs_usr,usr_webs"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCtr.Ctr.CtrCod);
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM degrees,courses,crs_usr,usr_webs"
" WHERE degrees.CtrCod=%ld"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_DEG:
sprintf (Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM courses,crs_usr,usr_webs"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentDeg.Deg.DegCod);
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM courses,crs_usr,usr_webs"
" WHERE courses.DegCod=%ld"
" AND courses.CrsCod=crs_usr.CrsCod"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentDeg.Deg.DegCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
case Sco_SCOPE_CRS:
sprintf (Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM crs_usr,usr_webs"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCrs.Crs.CrsCod);
if (asprintf (&Query,"SELECT usr_webs.Web,"
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
" FROM crs_usr,usr_webs"
" WHERE crs_usr.CrsCod=%ld"
" AND crs_usr.UsrCod=usr_webs.UsrCod"
" GROUP BY usr_webs.Web"
" ORDER BY N DESC,usr_webs.Web",
Gbl.CurrentCrs.Crs.CrsCod) < 0)
Lay_NotEnoughMemoryExit ();
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");
break;
}
NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,
"can not get number of users with webs / social networks");
NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
"can not get number of users with webs / social networks");
/***** Start box and table *****/
Box_StartBoxTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_SOCIAL_NETWORKS],NULL,

View File

@ -25,6 +25,8 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
#define _GNU_SOURCE // For asprintf
#include <stdio.h> // For asprintf
#include <string.h> // For string functions
#include "swad_account.h"
@ -113,16 +115,17 @@ bool Nck_CheckIfNickWithArrobaIsValid (const char *NicknameWithArroba)
bool Nck_GetNicknameFromUsrCod (long UsrCod,
char Nickname[Nck_MAX_BYTES_NICKNAME_WITHOUT_ARROBA + 1])
{
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
bool Found;
/***** Get current (last updated) user's nickname from database *****/
sprintf (Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get nickname"))
if (asprintf (&Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld ORDER BY CreatTime DESC LIMIT 1",
UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get nickname"))
{
/* Get nickname */
row = mysql_fetch_row (mysql_res);
@ -151,7 +154,7 @@ bool Nck_GetNicknameFromUsrCod (long UsrCod,
long Nck_GetUsrCodFromNickname (const char *Nickname)
{
char NicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
char Query[512];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
long UsrCod = -1L;
@ -166,12 +169,13 @@ long Nck_GetUsrCodFromNickname (const char *Nickname)
/***** Get user's code from database *****/
/* Check if user code from table usr_nicknames is also in table usr_data */
sprintf (Query,"SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NicknameWithoutArroba);
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's code"))
if (asprintf (&Query,"SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NicknameWithoutArroba) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's code"))
{
/* Get row */
row = mysql_fetch_row (mysql_res);
@ -226,7 +230,7 @@ static void Nck_ShowFormChangeUsrNickname (const struct UsrData *UsrDat,bool Its
extern const char *Txt_New_nickname;
extern const char *Txt_Change_nickname;
extern const char *Txt_Save;
char Query[256];
char *Query;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
char StrRecordWidth[10 + 1];
@ -238,11 +242,12 @@ static void Nck_ShowFormChangeUsrNickname (const struct UsrData *UsrDat,bool Its
Lay_StartSection (Nck_NICKNAME_SECTION_ID);
/***** Get my nicknames *****/
sprintf (Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod);
NumNicks = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get nicknames of a user");
if (asprintf (&Query,"SELECT Nickname FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
NumNicks = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get nicknames of a user");
/***** Start box *****/
snprintf (StrRecordWidth,sizeof (StrRecordWidth),
@ -499,13 +504,14 @@ void Nck_RemoveOtherUsrNick (void)
static void Nck_RemoveNicknameFromDB (long UsrCod,const char *Nickname)
{
char Query[256];
char *Query;
/***** Remove a nickname *****/
sprintf (Query,"DELETE FROM usr_nicknames"
" WHERE UsrCod=%ld AND Nickname='%s'",
UsrCod,Nickname);
DB_QueryREPLACE (Query,"can not remove a nickname");
if (asprintf (&Query,"DELETE FROM usr_nicknames"
" WHERE UsrCod=%ld AND Nickname='%s'",
UsrCod,Nickname) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not remove a nickname");
}
/*****************************************************************************/
@ -557,7 +563,7 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat)
extern const char *Txt_The_nickname_X_had_been_registered_by_another_user;
extern const char *Txt_The_nickname_X_has_been_registered_successfully;
extern const char *Txt_The_nickname_entered_X_is_not_valid_;
char Query[128 + Nck_MAX_BYTES_NICKNAME_FROM_FORM];
char *Query;
char NewNicknameWithArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
char NewNicknameWithoutArroba[Nck_MAX_BYTES_NICKNAME_FROM_FORM + 1];
@ -583,16 +589,18 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat)
else if (strcasecmp (UsrDat->Nickname,NewNicknameWithoutArroba)) // User's nickname does not match, not even case insensitive, the new nickname
{
/***** Check if the new nickname matches any of my old nicknames *****/
sprintf (Query,"SELECT COUNT(*) FROM usr_nicknames"
" WHERE UsrCod=%ld AND Nickname='%s'",
UsrDat->UsrCod,NewNicknameWithoutArroba);
if (!DB_QueryCOUNT (Query,"can not check if nickname already existed")) // No matches
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_nicknames"
" WHERE UsrCod=%ld AND Nickname='%s'",
UsrDat->UsrCod,NewNicknameWithoutArroba) < 0)
Lay_NotEnoughMemoryExit ();
if (!DB_QueryCOUNT_free (Query,"can not check if nickname already existed")) // No matches
{
/***** Check if the new nickname matches any of the nicknames of other users *****/
sprintf (Query,"SELECT COUNT(*) FROM usr_nicknames"
" WHERE Nickname='%s' AND UsrCod<>%ld",
NewNicknameWithoutArroba,UsrDat->UsrCod);
if (DB_QueryCOUNT (Query,"can not check if nickname already existed")) // A nickname of another user is the same that user's nickname
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_nicknames"
" WHERE Nickname='%s' AND UsrCod<>%ld",
NewNicknameWithoutArroba,UsrDat->UsrCod) < 0)
Lay_NotEnoughMemoryExit ();
if (DB_QueryCOUNT_free (Query,"can not check if nickname already existed")) // A nickname of another user is the same that user's nickname
{
Gbl.Alert.Type = Ale_WARNING;
Gbl.Alert.Section = Nck_NICKNAME_SECTION_ID;
@ -635,13 +643,14 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat)
void Nck_UpdateNickInDB (long UsrCod,const char *NewNickname)
{
char Query[512];
char *Query;
/***** Update user's nickname in database *****/
sprintf (Query,"REPLACE INTO usr_nicknames"
" (UsrCod,Nickname,CreatTime)"
" VALUES"
" (%ld,'%s',NOW())",
UsrCod,NewNickname);
DB_QueryREPLACE (Query,"can not update nickname");
if (asprintf (&Query,"REPLACE INTO usr_nicknames"
" (UsrCod,Nickname,CreatTime)"
" VALUES"
" (%ld,'%s',NOW())",
UsrCod,NewNickname) < 0)
Lay_NotEnoughMemoryExit ();
DB_QueryREPLACE_free (Query,"can not update nickname");
}