mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-15 21:24:07 +02:00
Version 18.7.36
This commit is contained in:
parent
251f67c893
commit
65c3e99394
51
swad_MFU.c
51
swad_MFU.c
|
@ -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"
|
||||
if (asprintf (&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");
|
||||
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"
|
||||
if (asprintf (&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");
|
||||
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"
|
||||
if (asprintf (&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"))
|
||||
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"
|
||||
if (asprintf (&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");
|
||||
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')"
|
||||
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);
|
||||
DB_QueryUPDATE (Query,"can not update most frequently used actions");
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
if (asprintf (&Query,"SELECT URL FROM usr_webs"
|
||||
" WHERE UsrCod=%ld AND Web='%s'",
|
||||
UsrDat->UsrCod,Net_WebsAndSocialNetworksDB[NumURL]);
|
||||
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"
|
||||
if (asprintf (&Query,"SELECT URL FROM usr_webs"
|
||||
" WHERE UsrCod=%ld AND Web='%s'",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Net_WebsAndSocialNetworksDB[NumURL]);
|
||||
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"
|
||||
if (asprintf (&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");
|
||||
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'",
|
||||
if (asprintf (&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");
|
||||
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,13 +463,14 @@ void Net_ShowWebAndSocialNetworksStats (void)
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_SYS:
|
||||
sprintf (Query,"SELECT Web,COUNT(*) AS N"
|
||||
if (asprintf (&Query,"SELECT Web,COUNT(*) AS N"
|
||||
" FROM usr_webs"
|
||||
" GROUP BY Web"
|
||||
" ORDER BY N DESC,Web");
|
||||
" ORDER BY N DESC,Web") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Sco_SCOPE_CTY:
|
||||
sprintf (Query,"SELECT usr_webs.Web,"
|
||||
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"
|
||||
|
@ -474,10 +481,11 @@ void Net_ShowWebAndSocialNetworksStats (void)
|
|||
" AND crs_usr.UsrCod=usr_webs.UsrCod"
|
||||
" GROUP BY usr_webs.Web"
|
||||
" ORDER BY N DESC,usr_webs.Web",
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
Gbl.CurrentCty.Cty.CtyCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
sprintf (Query,"SELECT usr_webs.Web,"
|
||||
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"
|
||||
|
@ -487,10 +495,11 @@ void Net_ShowWebAndSocialNetworksStats (void)
|
|||
" AND crs_usr.UsrCod=usr_webs.UsrCod"
|
||||
" GROUP BY usr_webs.Web"
|
||||
" ORDER BY N DESC,usr_webs.Web",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
Gbl.CurrentIns.Ins.InsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
sprintf (Query,"SELECT usr_webs.Web,"
|
||||
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"
|
||||
|
@ -499,10 +508,11 @@ void Net_ShowWebAndSocialNetworksStats (void)
|
|||
" AND crs_usr.UsrCod=usr_webs.UsrCod"
|
||||
" GROUP BY usr_webs.Web"
|
||||
" ORDER BY N DESC,usr_webs.Web",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
Gbl.CurrentCtr.Ctr.CtrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
sprintf (Query,"SELECT usr_webs.Web,"
|
||||
if (asprintf (&Query,"SELECT usr_webs.Web,"
|
||||
"COUNT(DISTINCT usr_webs.UsrCod) AS N"
|
||||
" FROM courses,crs_usr,usr_webs"
|
||||
" WHERE courses.DegCod=%ld"
|
||||
|
@ -510,23 +520,25 @@ void Net_ShowWebAndSocialNetworksStats (void)
|
|||
" AND crs_usr.UsrCod=usr_webs.UsrCod"
|
||||
" GROUP BY usr_webs.Web"
|
||||
" ORDER BY N DESC,usr_webs.Web",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
Gbl.CurrentDeg.Deg.DegCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Sco_SCOPE_CRS:
|
||||
sprintf (Query,"SELECT usr_webs.Web,"
|
||||
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);
|
||||
Gbl.CurrentCrs.Crs.CrsCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||
break;
|
||||
}
|
||||
NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,
|
||||
NumRows = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,
|
||||
"can not get number of users with webs / social networks");
|
||||
|
||||
/***** Start box and table *****/
|
||||
|
|
|
@ -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"
|
||||
if (asprintf (&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"))
|
||||
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"
|
||||
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);
|
||||
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's code"))
|
||||
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"
|
||||
if (asprintf (&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");
|
||||
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"
|
||||
if (asprintf (&Query,"DELETE FROM usr_nicknames"
|
||||
" WHERE UsrCod=%ld AND Nickname='%s'",
|
||||
UsrCod,Nickname);
|
||||
DB_QueryREPLACE (Query,"can not remove a nickname");
|
||||
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"
|
||||
if (asprintf (&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
|
||||
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"
|
||||
if (asprintf (&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
|
||||
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"
|
||||
if (asprintf (&Query,"REPLACE INTO usr_nicknames"
|
||||
" (UsrCod,Nickname,CreatTime)"
|
||||
" VALUES"
|
||||
" (%ld,'%s',NOW())",
|
||||
UsrCod,NewNickname);
|
||||
DB_QueryREPLACE (Query,"can not update nickname");
|
||||
UsrCod,NewNickname) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryREPLACE_free (Query,"can not update nickname");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user