Version 21.20: Sep 30, 2021 New module swad_nickname_database for database queries related to nicknames.

This commit is contained in:
acanas 2021-09-30 00:04:29 +02:00
parent f63f69f61d
commit 7f54d9010d
18 changed files with 66 additions and 160 deletions

View File

@ -66,8 +66,9 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
swad_match.o swad_match_database.o swad_match_print.o \ swad_match.o swad_match_database.o swad_match_print.o \
swad_match_result.o swad_media.o swad_media_database.o swad_menu.o \ swad_match_result.o swad_media.o swad_media_database.o swad_menu.o \
swad_message.o swad_message_database.o swad_MFU.o swad_MFU_database.o \ swad_message.o swad_message_database.o swad_MFU.o swad_MFU_database.o \
swad_network.o swad_network_database.o swad_nickname.o swad_notice.o \ swad_network.o swad_network_database.o swad_nickname.o \
swad_notification.o swad_notification_database.o swad_pagination.o \ swad_nickname_database.o swad_notice.o swad_notification.o \
swad_notification_database.o swad_pagination.o \
swad_parameter.o swad_password.o swad_photo.o swad_place.o \ swad_parameter.o swad_password.o swad_photo.o swad_place.o \
swad_plugin.o swad_privacy.o swad_profile.o swad_program.o \ swad_plugin.o swad_privacy.o swad_profile.o swad_program.o \
swad_project.o \ swad_project.o \

View File

@ -115,6 +115,7 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/
#include "swad_hierarchy_level.h" #include "swad_hierarchy_level.h"
#include "swad_ID.h" #include "swad_ID.h"
#include "swad_match.h" #include "swad_match.h"
#include "swad_nickname_database.h"
#include "swad_notice.h" #include "swad_notice.h"
#include "swad_notification.h" #include "swad_notification.h"
#include "swad_password.h" #include "swad_password.h"
@ -230,7 +231,7 @@ static int API_GetCurrentDegCodFromCurrentCrsCod (void);
static bool API_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod); static bool API_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod);
static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], // Output char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1], // Output
char *NewEmail, // Input-output char *NewEmail, // Input-output
char *NewPlainPassword, // Input char *NewPlainPassword, // Input
char *NewEncryptedPassword); // Output char *NewEncryptedPassword); // Output
@ -678,7 +679,7 @@ int swad__createAccount (struct soap *soap,
char *userNickname,char *userEmail,char *userPassword,char *appKey, // input char *userNickname,char *userEmail,char *userPassword,char *appKey, // input
struct swad__createAccountOutput *createAccountOut) // output struct swad__createAccountOutput *createAccountOut) // output
{ {
char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1];
char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]; char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1];
int Result; int Result;
int ReturnCode; int ReturnCode;
@ -700,7 +701,7 @@ int swad__createAccount (struct soap *soap,
/***** Check parameters used to create the new account *****/ /***** Check parameters used to create the new account *****/
Result = API_CheckParamsNewAccount (userNickname, // Input Result = API_CheckParamsNewAccount (userNickname, // Input
NewNickWithoutArr,// Output NewNickWithoutArr, // Output
userEmail, // Input-output userEmail, // Input-output
userPassword, // Input userPassword, // Input
NewEncryptedPassword); // Output NewEncryptedPassword); // Output
@ -750,15 +751,15 @@ int swad__createAccount (struct soap *soap,
/*****************************************************************************/ /*****************************************************************************/
// Return false on error // Return false on error
//char *userNickname,char *userEmail,char *userID,char *userPassword //char *userNickname,char *userEmail,char *userID,char *userPassword
static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input static int API_CheckParamsNewAccount (char *NewNickWithArr, // Input
char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], // Output char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1], // Output
char *NewEmail, // Input-output char *NewEmail, // Input-output
char *NewPlainPassword, // Input char *NewPlainPassword, // Input
char *NewEncryptedPassword) // Output char *NewEncryptedPassword) // Output
{ {
/***** Step 1/3: Check new nickname *****/ /***** Step 1/3: Check new nickname *****/
/* Make a copy without possible starting arrobas */ /* Make a copy without possible starting arrobas */
Str_Copy (NewNickWithoutArr,NewNickWithArr,Nck_MAX_BYTES_NICK_FROM_FORM); Str_Copy (NewNickWithoutArr,NewNickWithArr,Cns_MAX_BYTES_USR_LOGIN);
if (Nck_CheckIfNickWithArrIsValid (NewNickWithArr)) // If new nickname is valid if (Nck_CheckIfNickWithArrIsValid (NewNickWithArr)) // If new nickname is valid
{ {
/***** Remove arrobas at the beginning *****/ /***** Remove arrobas at the beginning *****/
@ -806,7 +807,7 @@ int swad__loginByUserPasswordKey (struct soap *soap,
char *userID,char *userPassword,char *appKey, // input char *userID,char *userPassword,char *appKey, // input
struct swad__loginByUserPasswordKeyOutput *loginByUserPasswordKeyOut) // output struct swad__loginByUserPasswordKeyOutput *loginByUserPasswordKeyOut) // output
{ {
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char UsrIDNickOrEmail[Cns_MAX_BYTES_USR_LOGIN + 1];
int ReturnCode; int ReturnCode;
char PhotoURL[Cns_MAX_BYTES_WWW + 1]; char PhotoURL[Cns_MAX_BYTES_WWW + 1];
bool UsrFound; bool UsrFound;
@ -1155,7 +1156,7 @@ int swad__getNewPassword (struct soap *soap,
struct swad__getNewPasswordOutput *getNewPasswordOut) // output struct swad__getNewPasswordOutput *getNewPasswordOut) // output
{ {
int ReturnCode; int ReturnCode;
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char UsrIDNickOrEmail[Cns_MAX_BYTES_USR_LOGIN + 1];
char NewRandomPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]; char NewRandomPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1];
/***** Initializations *****/ /***** Initializations *****/
@ -3568,7 +3569,7 @@ int swad__sendMessage (struct soap *soap,
{ {
int ReturnCode; int ReturnCode;
long ReplyUsrCod = -1L; long ReplyUsrCod = -1L;
char Nickname[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char Nickname[Cns_MAX_BYTES_USR_LOGIN + 1];
char *Query = NULL; char *Query = NULL;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
@ -3657,7 +3658,7 @@ int swad__sendMessage (struct soap *soap,
while (*Ptr) while (*Ptr)
{ {
/* Find next string in text until comma (leading and trailing spaces are removed) */ /* Find next string in text until comma (leading and trailing spaces are removed) */
Str_GetNextStringUntilComma (&Ptr,Nickname,Nck_MAX_BYTES_NICK_FROM_FORM); Str_GetNextStringUntilComma (&Ptr,Nickname,Cns_MAX_BYTES_USR_LOGIN);
/* Check if string is a valid nickname */ /* Check if string is a valid nickname */
if (Nck_CheckIfNickWithArrIsValid (Nickname)) // String is a nickname? if (Nck_CheckIfNickWithArrIsValid (Nickname)) // String is a nickname?

View File

@ -56,6 +56,7 @@
#include "swad_message_database.h" #include "swad_message_database.h"
#include "swad_network.h" #include "swad_network.h"
#include "swad_nickname.h" #include "swad_nickname.h"
#include "swad_nickname_database.h"
#include "swad_notification.h" #include "swad_notification.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_profile.h" #include "swad_profile.h"
@ -93,9 +94,9 @@ extern struct Globals Gbl;
static void Acc_ShowFormCheckIfIHaveAccount (const char *Title); static void Acc_ShowFormCheckIfIHaveAccount (const char *Title);
static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat); static void Acc_WriteRowEmptyAccount (unsigned NumUsr,const char *ID,struct UsrData *UsrDat);
static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1],
const char *NewEmail); const char *NewEmail);
static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1],
char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1], char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1],
char *NewEncryptedPassword); char *NewEncryptedPassword);
static void Acc_CreateNewEncryptedUsrCod (struct UsrData *UsrDat); static void Acc_CreateNewEncryptedUsrCod (struct UsrData *UsrDat);
@ -360,7 +361,7 @@ void Acc_ShowFormCreateMyAccount (void)
/************ Show form to create a new account using parameters *************/ /************ Show form to create a new account using parameters *************/
/*****************************************************************************/ /*****************************************************************************/
static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1],
const char *NewEmail) const char *NewEmail)
{ {
extern const char *Hlp_PROFILE_SignUp; extern const char *Hlp_PROFILE_SignUp;
@ -370,7 +371,7 @@ static void Acc_ShowFormRequestNewAccountWithParams (const char NewNickWithoutAr
extern const char *Txt_HELP_nickname; extern const char *Txt_HELP_nickname;
extern const char *Txt_HELP_email; extern const char *Txt_HELP_email;
extern const char *Txt_Email; extern const char *Txt_Email;
char NewNickWithArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithArr[Cns_MAX_BYTES_USR_LOGIN + 1];
/***** Begin form to enter some data of the new user *****/ /***** Begin form to enter some data of the new user *****/
Frm_BeginForm (ActCreUsrAcc); Frm_BeginForm (ActCreUsrAcc);
@ -595,7 +596,7 @@ static void Acc_PutParamsToRemoveMyAccount (void *EncryptedUsrCod)
bool Acc_CreateMyNewAccountAndLogIn (void) bool Acc_CreateMyNewAccountAndLogIn (void)
{ {
char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1];
char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]; char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1];
@ -643,7 +644,7 @@ bool Acc_CreateMyNewAccountAndLogIn (void)
/*****************************************************************************/ /*****************************************************************************/
// Return false on error // Return false on error
static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1], static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1],
char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1], char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1],
char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]) char NewEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1])
{ {
@ -651,15 +652,15 @@ static bool Acc_GetParamsNewAccount (char NewNickWithoutArr[Nck_MAX_BYTES_NICK_F
extern const char *Txt_The_nickname_entered_X_is_not_valid_; extern const char *Txt_The_nickname_entered_X_is_not_valid_;
extern const char *Txt_The_email_address_X_had_been_registered_by_another_user; extern const char *Txt_The_email_address_X_had_been_registered_by_another_user;
extern const char *Txt_The_email_address_entered_X_is_not_valid; extern const char *Txt_The_email_address_entered_X_is_not_valid;
char NewNickWithArr[1 + Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithArr[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]; char NewPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1];
bool Error = false; bool Error = false;
/***** Step 1/3: Get new nickname from form *****/ /***** Step 1/3: Get new nickname from form *****/
Par_GetParToText ("NewNick",NewNickWithArr,Nck_MAX_BYTES_NICK_FROM_FORM); Par_GetParToText ("NewNick",NewNickWithArr,Cns_MAX_BYTES_USR_LOGIN);
/* Remove arrobas at the beginning */ /* Remove arrobas at the beginning */
Str_Copy (NewNickWithoutArr,NewNickWithArr,Nck_MAX_BYTES_NICK_FROM_FORM); Str_Copy (NewNickWithoutArr,NewNickWithArr,Cns_MAX_BYTES_USR_LOGIN);
Str_RemoveLeadingArrobas (NewNickWithoutArr); Str_RemoveLeadingArrobas (NewNickWithoutArr);
/* Create a new version of the nickname with arroba */ /* Create a new version of the nickname with arroba */

View File

@ -80,7 +80,7 @@ unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res,
/****** Check if a nickname matches any of the nicknames of other users ******/ /****** Check if a nickname matches any of the nicknames of other users ******/
/*****************************************************************************/ /*****************************************************************************/
bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]) bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1])
{ {
return (DB_QueryCOUNT ("can not check if nickname already existed", return (DB_QueryCOUNT ("can not check if nickname already existed",
"SELECT COUNT(*)" "SELECT COUNT(*)"

View File

@ -47,7 +47,7 @@
unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res, unsigned Acc_DB_GetUsrsWithID (MYSQL_RES **mysql_res,
const char ID[ID_MAX_BYTES_USR_ID + 1]); const char ID[ID_MAX_BYTES_USR_ID + 1]);
bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]); bool Acc_DB_CheckIfNicknameAlreadyExists (const char NewNickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1]);
bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]); bool Acc_DB_CheckIfEmailAlreadyExists (const char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]);
long Acc_DB_CreateNewUsr (const struct UsrData *UsrDat); long Acc_DB_CreateNewUsr (const struct UsrData *UsrDat);

View File

@ -156,7 +156,7 @@ void Agd_PutFormLogInToShowUsrAgenda (void)
void Agd_PutParamAgd (void) void Agd_PutParamAgd (void)
{ {
char Nickname[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char Nickname[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
snprintf (Nickname,sizeof (Nickname),"@%s",Gbl.Usrs.Other.UsrDat.Nickname); snprintf (Nickname,sizeof (Nickname),"@%s",Gbl.Usrs.Other.UsrDat.Nickname);
Par_PutHiddenParamString (NULL,"agd",Nickname); Par_PutHiddenParamString (NULL,"agd",Nickname);
@ -710,7 +710,7 @@ static void Agd_PutIconToViewEditMyFullAgenda (void *EncryptedUsrCod)
static void Agd_PutIconToShowQR (void) static void Agd_PutIconToShowQR (void)
{ {
char URL[Cns_MAX_BYTES_WWW + 1]; char URL[Cns_MAX_BYTES_WWW + Cns_MAX_BYTES_USR_LOGIN + 1];
extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES];
snprintf (URL,sizeof (URL),"%s/%s?agd=@%s", snprintf (URL,sizeof (URL),"%s/%s?agd=@%s",

View File

@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
*/ */
#define Log_PLATFORM_VERSION "SWAD 21.19 (2021-09-29)" #define Log_PLATFORM_VERSION "SWAD 21.20 (2021-09-30)"
#define CSS_FILE "swad20.45.css" #define CSS_FILE "swad20.45.css"
#define JS_FILE "swad20.69.1.js" #define JS_FILE "swad20.69.1.js"
/* /*
TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename CENTRE to CENTER in help wiki.
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
Version 21.20: Sep 30, 2021 New module swad_nickname_database for database queries related to nicknames. (317751 lines)
Version 21.19: Sep 29, 2021 New module swad_network_database for database queries related to webs/social networks. (317644 lines) Version 21.19: Sep 29, 2021 New module swad_network_database for database queries related to webs/social networks. (317644 lines)
Version 21.18: Sep 29, 2021 New module swad_MFU_database for database queries related to most frequently used actions. (317529 lines) Version 21.18: Sep 29, 2021 New module swad_MFU_database for database queries related to most frequently used actions. (317529 lines)
Version 21.17.4: Sep 29, 2021 Queries moved to module swad_message_database. (317408 lines) Version 21.17.4: Sep 29, 2021 Queries moved to module swad_message_database. (317408 lines)

View File

@ -48,6 +48,8 @@
#define Cns_MAX_CHARS_EMAIL_ADDRESS (256 - 1) // 255 #define Cns_MAX_CHARS_EMAIL_ADDRESS (256 - 1) // 255
#define Cns_MAX_BYTES_EMAIL_ADDRESS Cns_MAX_CHARS_EMAIL_ADDRESS // 255 #define Cns_MAX_BYTES_EMAIL_ADDRESS Cns_MAX_CHARS_EMAIL_ADDRESS // 255
#define Cns_MAX_BYTES_USR_LOGIN Cns_MAX_BYTES_EMAIL_ADDRESS // 255
#define Cns_MAX_CHARS_SUBJECT (256 - 1) // 255 #define Cns_MAX_CHARS_SUBJECT (256 - 1) // 255
#define Cns_MAX_BYTES_SUBJECT ((Cns_MAX_CHARS_SUBJECT + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 4095 #define Cns_MAX_BYTES_SUBJECT ((Cns_MAX_CHARS_SUBJECT + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 4095

View File

@ -1102,7 +1102,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role)
/* Find next string in text */ /* Find next string in text */
Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail, Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail,
Cns_MAX_BYTES_EMAIL_ADDRESS); Cns_MAX_BYTES_USR_LOGIN);
/* Reset default list of users' codes */ /* Reset default list of users' codes */
ListUsrCods.NumUsrs = 0; ListUsrCods.NumUsrs = 0;
@ -1230,7 +1230,7 @@ static void Enr_ReceiveFormUsrsCrs (Rol_Role_t Role)
/* Find next string in text */ /* Find next string in text */
Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail, Str_GetNextStringUntilSeparator (&Ptr,UsrDat.UsrIDNickOrEmail,
Cns_MAX_BYTES_EMAIL_ADDRESS); Cns_MAX_BYTES_USR_LOGIN);
/* Reset default list of users' codes */ /* Reset default list of users' codes */
ListUsrCods.NumUsrs = 0; ListUsrCods.NumUsrs = 0;

View File

@ -247,7 +247,7 @@ struct Globals
Rol_Role_t Max; Rol_Role_t Max;
bool HasChanged; // Set when I have changed my role bool HasChanged; // Set when I have changed my role
} Role; } Role;
char UsrIdLogin[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; // String to store the ID, nickname or email entered in the user's login char UsrIdLogin[Cns_MAX_BYTES_USR_LOGIN + 1]; // String to store the ID, nickname or email entered in the user's login
char LoginPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]; char LoginPlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1];
char LoginEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]; char LoginEncryptedPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1];
char PendingPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1]; char PendingPassword[Pwd_BYTES_ENCRYPTED_PASSWORD + 1];

View File

@ -50,6 +50,7 @@
#include "swad_ID.h" #include "swad_ID.h"
#include "swad_message.h" #include "swad_message.h"
#include "swad_message_database.h" #include "swad_message_database.h"
#include "swad_nickname_database.h"
#include "swad_notification.h" #include "swad_notification.h"
#include "swad_pagination.h" #include "swad_pagination.h"
#include "swad_parameter.h" #include "swad_parameter.h"
@ -673,7 +674,7 @@ static void Msg_WriteFormSubjectAndContentMsgToUsrs (struct Msg_Messages *Messag
static void Msg_PutHiddenParamAnotherRecipient (const struct UsrData *UsrDat) static void Msg_PutHiddenParamAnotherRecipient (const struct UsrData *UsrDat)
{ {
char NickWithArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NickWithArr[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
snprintf (NickWithArr,sizeof (NickWithArr),"@%s",UsrDat->Nickname); snprintf (NickWithArr,sizeof (NickWithArr),"@%s",UsrDat->Nickname);
Par_PutHiddenParamString (NULL,"OtherRecipients",NickWithArr); Par_PutHiddenParamString (NULL,"OtherRecipients",NickWithArr);

View File

@ -25,21 +25,11 @@
/********************************* Headers ***********************************/ /********************************* Headers ***********************************/
/*****************************************************************************/ /*****************************************************************************/
// #include <string.h>
// #include "swad_box.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_error.h" #include "swad_error.h"
// #include "swad_figure.h"
// #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
// #include "swad_hierarchy_level.h"
// #include "swad_HTML.h"
#include "swad_network.h" #include "swad_network.h"
#include "swad_network_database.h" #include "swad_network_database.h"
// #include "swad_parameter.h"
// #include "swad_profile.h"
// #include "swad_theme.h"
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/

View File

@ -33,6 +33,7 @@
#include "swad_form.h" #include "swad_form.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_HTML.h" #include "swad_HTML.h"
#include "swad_nickname_database.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_QR.h" #include "swad_QR.h"
#include "swad_user.h" #include "swad_user.h"
@ -66,8 +67,6 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
static void Nck_PutParamsRemoveMyNick (void *Nick); static void Nck_PutParamsRemoveMyNick (void *Nick);
static void Nck_PutParamsRemoveOtherNick (void *Nick); static void Nck_PutParamsRemoveOtherNick (void *Nick);
static void Nck_DB_RemoveNickname (long UsrCod,const char *Nickname);
static void Nck_UpdateUsrNick (struct UsrData *UsrDat); static void Nck_UpdateUsrNick (struct UsrData *UsrDat);
/*****************************************************************************/ /*****************************************************************************/
@ -76,7 +75,7 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat);
bool Nck_CheckIfNickWithArrIsValid (const char *NickWithArr) bool Nck_CheckIfNickWithArrIsValid (const char *NickWithArr)
{ {
char NickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1];
unsigned Length; unsigned Length;
const char *Ptr; const char *Ptr;
@ -108,33 +107,15 @@ bool Nck_CheckIfNickWithArrIsValid (const char *NickWithArr)
return true; return true;
} }
/*****************************************************************************/
/************* Get nickname of a user from his/her user's code ***************/
/*****************************************************************************/
void Nck_DB_GetNicknameFromUsrCod (long UsrCod,
char Nickname[Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1])
{
/***** Get current (last updated) user's nickname from database *****/
DB_QuerySELECTString (Nickname,Nck_MAX_BYTES_NICK_WITHOUT_ARROBA,
"can not get nickname",
"SELECT Nickname"
" FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC"
" LIMIT 1",
UsrCod);
}
/*****************************************************************************/ /*****************************************************************************/
/************** Get user's code of a user from his/her nickname **************/ /************** Get user's code of a user from his/her nickname **************/
/*****************************************************************************/ /*****************************************************************************/
// Nickname may have leading '@' // Nickname may have leading '@'
// Returns true if nickname found in database // Returns true if nickname found in database
long Nck_GetUsrCodFromNickname (const char *Nickname) long Nck_GetUsrCodFromNickname (const char Nickname[Cns_MAX_BYTES_USR_LOGIN + 1])
{ {
char NickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NickWithoutArr[Cns_MAX_BYTES_USR_LOGIN + 1];
/***** Trivial check 1: nickname should be not null *****/ /***** Trivial check 1: nickname should be not null *****/
if (!Nickname) if (!Nickname)
@ -149,13 +130,7 @@ long Nck_GetUsrCodFromNickname (const char *Nickname)
Str_RemoveLeadingArrobas (NickWithoutArr); Str_RemoveLeadingArrobas (NickWithoutArr);
/***** Get user's code from database *****/ /***** Get user's code from database *****/
return DB_QuerySELECTCode ("can not get user's code", return Nck_DB_GetUsrCodFromNickname (NickWithoutArr);
"SELECT usr_nicknames.UsrCod"
" FROM usr_nicknames,"
"usr_data"
" WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
NickWithoutArr);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -200,7 +175,7 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
unsigned NumNicks; unsigned NumNicks;
unsigned NumNick; unsigned NumNick;
Act_Action_t NextAction; Act_Action_t NextAction;
char NickWithArr[1 + Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1]; char NickWithArr[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
const struct UsrData *UsrDat = (ItsMe ? &Gbl.Usrs.Me.UsrDat : const struct UsrData *UsrDat = (ItsMe ? &Gbl.Usrs.Me.UsrDat :
&Gbl.Usrs.Other.UsrDat); &Gbl.Usrs.Other.UsrDat);
@ -208,13 +183,7 @@ static void Nck_ShowFormChangeUsrNickname (bool ItsMe,
HTM_SECTION_Begin (Nck_NICKNAME_SECTION_ID); HTM_SECTION_Begin (Nck_NICKNAME_SECTION_ID);
/***** Get my nicknames *****/ /***** Get my nicknames *****/
NumNicks = (unsigned) NumNicks = Nck_DB_GetUsrNicknames (&mysql_res,UsrDat->UsrCod);
DB_QuerySELECT (&mysql_res,"can not get nicknames of a user",
"SELECT Nickname" // row[0]
" FROM usr_nicknames"
" WHERE UsrCod=%ld"
" ORDER BY CreatTime DESC",
UsrDat->UsrCod);
/***** Begin box *****/ /***** Begin box *****/
snprintf (StrRecordWidth,sizeof (StrRecordWidth),"%upx",Rec_RECORD_WIDTH); snprintf (StrRecordWidth,sizeof (StrRecordWidth),"%upx",Rec_RECORD_WIDTH);
@ -470,33 +439,6 @@ void Nck_RemoveOtherUsrNick (void)
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
} }
/*****************************************************************************/
/********************** Remove a nickname from database **********************/
/*****************************************************************************/
static void Nck_DB_RemoveNickname (long UsrCod,const char *Nickname)
{
/***** Remove a nickname *****/
DB_QueryREPLACE ("can not remove a nickname",
"DELETE FROM usr_nicknames"
" WHERE UsrCod=%ld"
" AND Nickname='%s'",
UsrCod,
Nickname);
}
/*****************************************************************************/
/************************** Remove user's nicknames **************************/
/*****************************************************************************/
void Nck_DB_RemoveUsrNicknames (long UsrCod)
{
DB_QueryDELETE ("can not remove user's nicknames",
"DELETE FROM usr_nicknames"
" WHERE UsrCod=%ld",
UsrCod);
}
/*****************************************************************************/ /*****************************************************************************/
/***************************** Update my nickname ****************************/ /***************************** Update my nickname ****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -544,12 +486,11 @@ 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_had_been_registered_by_another_user;
extern const char *Txt_The_nickname_X_has_been_registered_successfully; extern const char *Txt_The_nickname_X_has_been_registered_successfully;
extern const char *Txt_The_nickname_entered_X_is_not_valid_; extern const char *Txt_The_nickname_entered_X_is_not_valid_;
char NewNickWithArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithArr[1 + Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1];
char NewNickWithoutArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithoutArr[1 + Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1];
/***** Get new nickname from form *****/ /***** Get new nickname from form *****/
Par_GetParToText ("NewNick",NewNickWithArr, Par_GetParToText ("NewNick",NewNickWithArr,sizeof (NewNickWithArr) - 1);
Nck_MAX_BYTES_NICK_FROM_FORM);
if (Nck_CheckIfNickWithArrIsValid (NewNickWithArr)) // If new nickname is valid if (Nck_CheckIfNickWithArrIsValid (NewNickWithArr)) // If new nickname is valid
{ {
/***** Remove arrobas at the beginning *****/ /***** Remove arrobas at the beginning *****/
@ -564,21 +505,11 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat)
else if (strcasecmp (UsrDat->Nickname,NewNickWithoutArr)) // User's nickname does not match, not even case insensitive, the new nickname else if (strcasecmp (UsrDat->Nickname,NewNickWithoutArr)) // User's nickname does not match, not even case insensitive, the new nickname
{ {
/***** Check if the new nickname matches any of my old nicknames *****/ /***** Check if the new nickname matches any of my old nicknames *****/
if (DB_QueryCOUNT ("can not check if nickname already existed", if (!Nck_DB_CheckIfNickMatchesAnyUsrNick (UsrDat->UsrCod,
"SELECT COUNT(*)" NewNickWithoutArr)) // No matches
" FROM usr_nicknames"
" WHERE UsrCod=%ld"
" AND Nickname='%s'",
UsrDat->UsrCod,
NewNickWithoutArr) == 0) // No matches
/***** Check if the new nickname matches any of the nicknames of other users *****/ /***** Check if the new nickname matches any of the nicknames of other users *****/
if (DB_QueryCOUNT ("can not check if nickname already existed", if (Nck_DB_CheckIfNickMatchesAnyOtherUsrsNicks (UsrDat->UsrCod,
"SELECT COUNT(*)" NewNickWithoutArr)) // A nickname of another user is the same that user's nickname
" FROM usr_nicknames"
" WHERE Nickname='%s'"
" AND UsrCod<>%ld",
NewNickWithoutArr,
UsrDat->UsrCod)) // A nickname of another user is the same that user's nickname
Ale_CreateAlert (Ale_WARNING,Nck_NICKNAME_SECTION_ID, Ale_CreateAlert (Ale_WARNING,Nck_NICKNAME_SECTION_ID,
Txt_The_nickname_X_had_been_registered_by_another_user, Txt_The_nickname_X_had_been_registered_by_another_user,
NewNickWithoutArr); NewNickWithoutArr);
@ -602,19 +533,3 @@ static void Nck_UpdateUsrNick (struct UsrData *UsrDat)
Nck_MIN_CHARS_NICK_WITHOUT_ARROBA, Nck_MIN_CHARS_NICK_WITHOUT_ARROBA,
Nck_MAX_CHARS_NICK_WITHOUT_ARROBA); Nck_MAX_CHARS_NICK_WITHOUT_ARROBA);
} }
/*****************************************************************************/
/******************* Update user's nickname in database **********************/
/*****************************************************************************/
void Nck_DB_UpdateNick (long UsrCod,const char *NewNickname)
{
/***** Update user's nickname in database *****/
DB_QueryREPLACE ("can not update nickname",
"REPLACE INTO usr_nicknames"
" (UsrCod,Nickname,CreatTime)"
" VALUES"
" (%ld,'%s',NOW())",
UsrCod,
NewNickname);
}

View File

@ -38,9 +38,7 @@
#define Nck_MAX_CHARS_NICK_WITHOUT_ARROBA 16 #define Nck_MAX_CHARS_NICK_WITHOUT_ARROBA 16
#define Nck_MAX_BYTES_NICK_WITHOUT_ARROBA Nck_MAX_CHARS_NICK_WITHOUT_ARROBA #define Nck_MAX_BYTES_NICK_WITHOUT_ARROBA Nck_MAX_CHARS_NICK_WITHOUT_ARROBA
#define Nck_MAX_BYTES_NICK_FROM_FORM (128 - 1) // For variables that store characters typed in a form #define Nck_MAX_BYTES_LIST_NICKS ((Cns_MAX_BYTES_USR_LOGIN + 2) * Cfg_MAX_USRS_IN_LIST)
#define Nck_MAX_BYTES_LIST_NICKS ((Nck_MAX_BYTES_NICK_FROM_FORM + 2) * Cfg_MAX_USRS_IN_LIST)
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
@ -48,20 +46,15 @@
bool Nck_CheckIfNickWithArrIsValid (const char *NickWithArr); bool Nck_CheckIfNickWithArrIsValid (const char *NickWithArr);
void Nck_DB_GetNicknameFromUsrCod (long UsrCod, long Nck_GetUsrCodFromNickname (const char Nickname[Cns_MAX_BYTES_USR_LOGIN + 1]);
char Nickname[Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1]);
long Nck_GetUsrCodFromNickname (const char *Nickname);
void Nck_ShowFormChangeMyNickname (bool IMustFillNickname); void Nck_ShowFormChangeMyNickname (bool IMustFillNickname);
void Nck_ShowFormChangeOtherUsrNickname (void); void Nck_ShowFormChangeOtherUsrNickname (void);
void Nck_RemoveMyNick (void); void Nck_RemoveMyNick (void);
void Nck_RemoveOtherUsrNick (void); void Nck_RemoveOtherUsrNick (void);
void Nck_DB_RemoveUsrNicknames (long UsrCod);
void Nck_UpdateMyNick (void); void Nck_UpdateMyNick (void);
void Nck_UpdateOtherUsrNick (void); void Nck_UpdateOtherUsrNick (void);
void Nck_DB_UpdateNick (long UsrCod,const char *NewNickname);
#endif #endif

View File

@ -662,7 +662,7 @@ void Par_GetMainParams (void)
extern const char *The_ThemeId[The_NUM_THEMES]; extern const char *The_ThemeId[The_NUM_THEMES];
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
long ActCod; long ActCod;
char Nickname[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char Nickname[Cns_MAX_BYTES_USR_LOGIN + 1];
char URL[PATH_MAX + 1]; char URL[PATH_MAX + 1];
char LongStr[Cns_MAX_DECIMAL_DIGITS_LONG + 1]; char LongStr[Cns_MAX_DECIMAL_DIGITS_LONG + 1];
@ -690,7 +690,7 @@ void Par_GetMainParams (void)
/***** Get another user's nickname, if exists /***** Get another user's nickname, if exists
(this nickname is used to go to another user's profile, (this nickname is used to go to another user's profile,
not to get the logged user) *****/ not to get the logged user) *****/
if (Par_GetParToText ("usr",Nickname,Nck_MAX_BYTES_NICK_FROM_FORM)) if (Par_GetParToText ("usr",Nickname,Cns_MAX_BYTES_USR_LOGIN))
{ {
if (Nickname[0]) if (Nickname[0])
{ {
@ -706,7 +706,7 @@ void Par_GetMainParams (void)
Gbl.Action.Act = Gbl.Action.Original = ActSeeOthPubPrf; // Set default action if no other is specified Gbl.Action.Act = Gbl.Action.Original = ActSeeOthPubPrf; // Set default action if no other is specified
} }
} }
else if (Par_GetParToText ("agd",Nickname,Nck_MAX_BYTES_NICK_FROM_FORM)) else if (Par_GetParToText ("agd",Nickname,Cns_MAX_BYTES_USR_LOGIN))
{ {
if (Nickname[0]) if (Nickname[0])
{ {

View File

@ -195,7 +195,7 @@ void Prf_RequestUserProfile (void)
extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Nickname; extern const char *Txt_Nickname;
extern const char *Txt_Continue; extern const char *Txt_Continue;
char NickWithArr[1 + Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1]; char NickWithArr[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
if (Gbl.Usrs.Me.Logged) if (Gbl.Usrs.Me.Logged)
{ {
@ -222,7 +222,7 @@ void Prf_RequestUserProfile (void)
snprintf (NickWithArr,sizeof (NickWithArr),"@%s", snprintf (NickWithArr,sizeof (NickWithArr),"@%s",
Gbl.Usrs.Me.UsrDat.Nickname); Gbl.Usrs.Me.UsrDat.Nickname);
HTM_INPUT_TEXT ("usr",Nck_MAX_BYTES_NICK_FROM_FORM,NickWithArr, HTM_INPUT_TEXT ("usr",Cns_MAX_BYTES_USR_LOGIN,NickWithArr,
HTM_DONT_SUBMIT_ON_CHANGE, HTM_DONT_SUBMIT_ON_CHANGE,
"size=\"18\""); "size=\"18\"");
HTM_LABEL_End (); HTM_LABEL_End ();

View File

@ -64,6 +64,7 @@
#include "swad_mail_database.h" #include "swad_mail_database.h"
#include "swad_MFU.h" #include "swad_MFU.h"
#include "swad_nickname.h" #include "swad_nickname.h"
#include "swad_nickname_database.h"
#include "swad_notification.h" #include "swad_notification.h"
#include "swad_parameter.h" #include "swad_parameter.h"
#include "swad_password.h" #include "swad_password.h"
@ -2869,7 +2870,7 @@ void Usr_PutFormLogOut (void)
void Usr_GetParamUsrIdLogin (void) void Usr_GetParamUsrIdLogin (void)
{ {
Par_GetParToText ("UsrId",Gbl.Usrs.Me.UsrIdLogin,Cns_MAX_BYTES_EMAIL_ADDRESS); Par_GetParToText ("UsrId",Gbl.Usrs.Me.UsrIdLogin,Cns_MAX_BYTES_USR_LOGIN);
// Users' IDs are always stored internally without leading zeros // Users' IDs are always stored internally without leading zeros
Str_RemoveLeadingZeros (Gbl.Usrs.Me.UsrIdLogin); Str_RemoveLeadingZeros (Gbl.Usrs.Me.UsrIdLogin);
} }
@ -2883,7 +2884,7 @@ static void Usr_GetParamOtherUsrIDNickOrEMail (void)
/***** Get parameter with the plain user's ID, @nick or email of another user *****/ /***** Get parameter with the plain user's ID, @nick or email of another user *****/
Par_GetParToText ("OtherUsrIDNickOrEMail", Par_GetParToText ("OtherUsrIDNickOrEMail",
Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail, Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail,
Cns_MAX_BYTES_EMAIL_ADDRESS); Cns_MAX_BYTES_USR_LOGIN);
// If it's a user's ID (if does not contain '@') // If it's a user's ID (if does not contain '@')
if (strchr (Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail,(int) '@') != NULL) // '@' not found if (strchr (Gbl.Usrs.Other.UsrDat.UsrIDNickOrEmail,(int) '@') != NULL) // '@' not found
@ -5987,7 +5988,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
size_t LengthSelectedUsrsCods; size_t LengthSelectedUsrsCods;
size_t LengthUsrCod; size_t LengthUsrCod;
const char *Ptr; const char *Ptr;
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char UsrIDNickOrEmail[Cns_MAX_BYTES_USR_LOGIN + 1];
struct UsrData UsrDat; struct UsrData UsrDat;
struct ListUsrCods ListUsrCods; struct ListUsrCods ListUsrCods;
bool Error = false; bool Error = false;
@ -6015,7 +6016,7 @@ bool Usr_GetListMsgRecipientsWrittenExplicitelyBySender (bool WriteErrorMsgs)
while (*Ptr) while (*Ptr)
{ {
/* Find next string in text until comma or semicolon (leading and trailing spaces are removed) */ /* Find next string in text until comma or semicolon (leading and trailing spaces are removed) */
Str_GetNextStringUntilComma (&Ptr,UsrIDNickOrEmail,Cns_MAX_BYTES_EMAIL_ADDRESS); Str_GetNextStringUntilComma (&Ptr,UsrIDNickOrEmail,Cns_MAX_BYTES_USR_LOGIN);
/* Check if string is plain user's ID or nickname and get encrypted user's ID */ /* Check if string is plain user's ID or nickname and get encrypted user's ID */
if (UsrIDNickOrEmail[0]) if (UsrIDNickOrEmail[0])
@ -10169,7 +10170,7 @@ void Usr_DB_RemoveUsrFromBanned (long UsrCod)
void Usr_PrintUsrQRCode (void) void Usr_PrintUsrQRCode (void)
{ {
char NewNickWithArr[Nck_MAX_BYTES_NICK_FROM_FORM + 1]; char NewNickWithArr[1 + Cns_MAX_BYTES_USR_LOGIN + 1];
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
{ {

View File

@ -166,13 +166,13 @@ struct UsrData
{ {
long UsrCod; long UsrCod;
char EnUsrCod [Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1]; char EnUsrCod [Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64 + 1];
char UsrIDNickOrEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; // String to store the ID, nickname or email char UsrIDNickOrEmail[Cns_MAX_BYTES_USR_LOGIN + 1]; // String to store the ID, nickname or email
struct struct
{ {
struct ListIDs *List; struct ListIDs *List;
unsigned Num; unsigned Num;
} IDs; } IDs;
char Nickname [Nck_MAX_BYTES_NICK_WITHOUT_ARROBA + 1]; char Nickname [Cns_MAX_BYTES_USR_LOGIN + 1];
char Password [Pwd_BYTES_ENCRYPTED_PASSWORD + 1]; char Password [Pwd_BYTES_ENCRYPTED_PASSWORD + 1];
struct struct
{ {