From b48901d204225b6a6da48fa192db98dd4261e2a5 Mon Sep 17 00:00:00 2001 From: acanas Date: Wed, 29 Sep 2021 14:40:42 +0200 Subject: [PATCH] Version 21.17.3: Sep 29, 2021 Queries moved to module swad_message_database. --- swad_changelog.h | 3 +- swad_message.c | 191 ++++++++++------------------------------ swad_message_database.c | 190 +++++++++++++++++++++++++++++++++++++-- swad_message_database.h | 12 ++- swad_user.c | 4 + 5 files changed, 245 insertions(+), 155 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index c2f98d2f..039c9f27 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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. */ -#define Log_PLATFORM_VERSION "SWAD 21.17.2 (2021-09-27)" +#define Log_PLATFORM_VERSION "SWAD 21.17.3 (2021-09-29)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 21.17.3: Sep 29, 2021 Queries moved to module swad_message_database. (317431 lines) Version 21.17.2: Sep 27, 2021 Queries moved to module swad_message_database. (317358 lines) Version 21.17.1: Sep 27, 2021 Queries moved to module swad_message_database. (317325 lines) Version 21.17: Sep 27, 2021 New module swad_message_database for database queries related to messages. (317295 lines) diff --git a/swad_message.c b/swad_message.c index 4eabe490..040b8a38 100644 --- a/swad_message.c +++ b/swad_message.c @@ -140,14 +140,15 @@ static unsigned long Msg_RemoveSomeRecOrSntMsgsUsr (const struct Msg_Messages *M static void Msg_MoveRcvMsgToDeleted (long MsgCod,long UsrCod); static void Msg_MoveSntMsgToDeleted (long MsgCod); static void Msg_MoveMsgContentToDeleted (long MsgCod); -static unsigned Msg_GetNumUnreadMsgs (const struct Msg_Messages *Messages, - const char *FilterFromToSubquery); +static unsigned Msg_DB_GetNumUnreadMsgs (const struct Msg_Messages *Messages, + const char *FilterFromToSubquery); static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod, time_t *CreatTimeUTC, char Subject[Cns_MAX_BYTES_SUBJECT + 1], bool *Deleted); -static void Msg_GetMsgContent (long MsgCod,char Content[Cns_MAX_BYTES_LONG_TEXT + 1], +static void Msg_GetMsgContent (long MsgCod, + char Content[Cns_MAX_BYTES_LONG_TEXT + 1], struct Med_Media *Media); static void Msg_WriteSentOrReceivedMsgSubject (struct Msg_Messages *Messages, @@ -1398,8 +1399,8 @@ static void Msg_MoveMsgContentToDeleted (long MsgCod) /******** Get number of received messages that haven't been read by me *******/ /*****************************************************************************/ -static unsigned Msg_GetNumUnreadMsgs (const struct Msg_Messages *Messages, - const char *FilterFromToSubquery) +static unsigned Msg_DB_GetNumUnreadMsgs (const struct Msg_Messages *Messages, + const char *FilterFromToSubquery) { char *SubQuery; unsigned NumMsgs; @@ -1510,7 +1511,7 @@ void Msg_ShowRecMsgs (void) /***** Reset messages context *****/ Msg_ResetMessages (&Messages); - if (Msg_DB_GetNumUsrsBannedByMe ()) + if (Msg_DB_GetNumUsrsBannedBy (Gbl.Usrs.Me.UsrDat.UsrCod)) { /***** Contextual menu *****/ Mnu_ContextMenuBegin (); @@ -1584,7 +1585,7 @@ static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages) { case Msg_RECEIVED: Messages->ShowOnlyUnreadMsgs = Msg_GetParamOnlyUnreadMsgs (); - NumUnreadMsgs = Msg_GetNumUnreadMsgs (Messages, + NumUnreadMsgs = Msg_DB_GetNumUnreadMsgs (Messages, FilterFromToSubquery); break; case Msg_SENT: @@ -1920,30 +1921,10 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages) switch (Messages->TypeOfMessages) { case Msg_RECEIVED: - NumCrss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages", - "SELECT DISTINCT crs_courses.CrsCod," // row[0] - "crs_courses.ShortName" // row[1] - " FROM msg_rcv," - "msg_snt," - "crs_courses" - " WHERE msg_rcv.UsrCod=%ld" - " AND msg_rcv.MsgCod=msg_snt.MsgCod" - " AND msg_snt.CrsCod=crs_courses.CrsCod" - " ORDER BY crs_courses.ShortName", - Gbl.Usrs.Me.UsrDat.UsrCod); + NumCrss = Msg_DB_GetDistinctCrssInMyRcvMsgs (&mysql_res); break; case Msg_SENT: - NumCrss = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get distinct courses in your messages", - "SELECT DISTINCT crs_courses.CrsCod," // row[0] - "crs_courses.ShortName" // row[1] - " FROM msg_snt," - "crs_courses" - " WHERE msg_snt.UsrCod=%ld" - " AND msg_snt.CrsCod=crs_courses.CrsCod" - " ORDER BY crs_courses.ShortName", - Gbl.Usrs.Me.UsrDat.UsrCod); + NumCrss = Msg_DB_GetDistinctCrssInMySntMsgs (&mysql_res); break; default: // Not aplicable here break; @@ -2098,36 +2079,10 @@ static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod, { MYSQL_RES *mysql_res; MYSQL_ROW row; - unsigned NumRows; /***** Get data of message from table msg_snt *****/ - *Deleted = false; - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get data of a message", - "SELECT CrsCod," // row[0] - "UsrCod," // row[1] - "UNIX_TIMESTAMP(CreatTime)" // row[2] - " FROM msg_snt" - " WHERE MsgCod=%ld", - MsgCod); - - if (NumRows == 0) // If not result ==> sent message is deleted - { - /***** Get data of message from table msg_snt_deleted *****/ - NumRows = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get data of a message", - "SELECT CrsCod," // row[0] - "UsrCod," // row[1] - "UNIX_TIMESTAMP(CreatTime)" // row[2] - " FROM msg_snt_deleted" - " WHERE MsgCod=%ld", - MsgCod); - - *Deleted = true; - } - /* Result should have a unique row */ - if (NumRows != 1) + if (Msg_DB_GetMsgSntData (&mysql_res,MsgCod,Deleted) != 1) Err_WrongMessageExit (); /* Get number of rows */ @@ -2153,19 +2108,15 @@ static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod, /*************** Get content and optional image of a message *****************/ /*****************************************************************************/ -static void Msg_GetMsgContent (long MsgCod,char Content[Cns_MAX_BYTES_LONG_TEXT + 1], +static void Msg_GetMsgContent (long MsgCod, + char Content[Cns_MAX_BYTES_LONG_TEXT + 1], struct Med_Media *Media) { MYSQL_RES *mysql_res; MYSQL_ROW row; /***** Get content of message from database *****/ - if (DB_QuerySELECT (&mysql_res,"can not get the content of a message", - "SELECT Content," // row[0] - "MedCod" // row[1] - " FROM msg_content" - " WHERE MsgCod=%ld", - MsgCod) != 1) + if (Msg_DB_GetMsgContent (&mysql_res,MsgCod) != 1) Err_WrongMessageExit (); /***** Get number of rows *****/ @@ -2382,13 +2333,7 @@ void Msg_GetNotifMessage (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1], SummaryStr[0] = '\0'; // Return nothing on error /***** Get subject of message from database *****/ - if (DB_QuerySELECT (&mysql_res,"can not get subject and content" - " of a message", - "SELECT Subject," // row[0] - "Content" // row[1] - " FROM msg_content" - " WHERE MsgCod=%ld", - MsgCod) == 1) // Result should have a unique row + if (Msg_DB_GetSubjectAndContent (&mysql_res,MsgCod) == 1) // Result should have a unique row { /***** Get subject and content of the message *****/ row = mysql_fetch_row (mysql_res); @@ -2445,13 +2390,13 @@ static void Msg_WriteSentOrReceivedMsgSubject (struct Msg_Messages *Messages, /***** Begin cell *****/ HTM_TD_Begin ("class=\"%s LT\"",Open ? "MSG_TIT_BG" : - "MSG_TIT_BG_NEW"); + "MSG_TIT_BG_NEW"); /***** Begin form to expand/contract the message *****/ Frm_BeginForm (Messages->TypeOfMessages == Msg_RECEIVED ? (Expanded ? ActConRcvMsg : - ActExpRcvMsg) : - (Expanded ? ActConSntMsg : - ActExpSntMsg)); + ActExpRcvMsg) : + (Expanded ? ActConSntMsg : + ActExpSntMsg)); Messages->MsgCod = MsgCod; // Message to be contracted/expanded Msg_PutHiddenParamsOneMsg (Messages); @@ -2706,10 +2651,13 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod) MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumRcp; - unsigned NumRecipientsTotal; - unsigned NumRecipientsKnown; - unsigned NumRecipientsUnknown; - unsigned NumRecipientsToShow; + struct + { + unsigned Total; + unsigned Known; + unsigned Unknown; + unsigned ToShow; + } NumRecipients; struct UsrData UsrDat; bool Deleted; bool OpenByDst; @@ -2725,69 +2673,31 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod) }; /***** Get number of recipients of a message from database *****/ - NumRecipientsTotal = (unsigned) - DB_QueryCOUNT ("can not get number of recipients", - "SELECT " - "(SELECT COUNT(*)" - " FROM msg_rcv" - " WHERE MsgCod=%ld)" - " + " - "(SELECT COUNT(*)" - " FROM msg_rcv_deleted" - " WHERE MsgCod=%ld)", - MsgCod, - MsgCod); + NumRecipients.Total = Msg_DB_GetNumRecipients (MsgCod); /***** Get recipients of a message from database *****/ - NumRecipientsKnown = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get recipients of a message", - "(SELECT msg_rcv.UsrCod," // row[0] - "'N'," // row[1] - "msg_rcv.Open," // row[2] - "usr_data.Surname1 AS S1," // row[3] - "usr_data.Surname2 AS S2," // row[4] - "usr_data.FirstName AS FN" // row[5] - " FROM msg_rcv," - "usr_data" - " WHERE msg_rcv.MsgCod=%ld" - " AND msg_rcv.UsrCod=usr_data.UsrCod)" - " UNION " - "(SELECT msg_rcv_deleted.UsrCod," // row[0] - "'Y'," // row[1] - "msg_rcv_deleted.Open," // row[2] - "usr_data.Surname1 AS S1," // row[3] - "usr_data.Surname2 AS S2," // row[4] - "usr_data.FirstName AS FN" // row[5] - " FROM msg_rcv_deleted," - "usr_data" - " WHERE msg_rcv_deleted.MsgCod=%ld" - " AND msg_rcv_deleted.UsrCod=usr_data.UsrCod)" - " ORDER BY S1," - "S2," - "FN", - MsgCod, - MsgCod); + NumRecipients.Known = Msg_DB_GetKnownRecipients (&mysql_res,MsgCod); /***** Check number of recipients *****/ - if (NumRecipientsTotal) + if (NumRecipients.Total) { /***** Begin table *****/ HTM_TABLE_Begin (NULL); /***** How many recipients will be shown? *****/ - if (NumRecipientsKnown <= Msg_MAX_RECIPIENTS_TO_SHOW) - NumRecipientsToShow = NumRecipientsKnown; + if (NumRecipients.Known <= Msg_MAX_RECIPIENTS_TO_SHOW) + NumRecipients.ToShow = NumRecipients.Known; else // A lot of recipients /***** Get parameter that indicates if I want to see all recipients *****/ - NumRecipientsToShow = Par_GetParToBool ("SeeAllRcpts") ? NumRecipientsKnown : - Msg_DEF_RECIPIENTS_TO_SHOW; + NumRecipients.ToShow = Par_GetParToBool ("SeeAllRcpts") ? NumRecipients.Known : + Msg_DEF_RECIPIENTS_TO_SHOW; /***** Initialize structure with user's data *****/ Usr_UsrDataConstructor (&UsrDat); /***** Write known recipients *****/ for (NumRcp = 0; - NumRcp < NumRecipientsToShow; + NumRcp < NumRecipients.ToShow; NumRcp++) { /* Get user's code */ @@ -2831,7 +2741,7 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod) /* Write user's name */ HTM_TD_Begin ("class=\"%s LM\"",OpenByDst ? "AUTHOR_TXT" : - "AUTHOR_TXT_NEW"); + "AUTHOR_TXT_NEW"); if (UsrValid) HTM_Txt (UsrDat.FullName); else @@ -2842,23 +2752,23 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod) } /***** If any recipients are unknown *****/ - if ((NumRecipientsUnknown = NumRecipientsTotal - NumRecipientsKnown)) + if ((NumRecipients.Unknown = NumRecipients.Total - NumRecipients.Known)) { /***** Begin form to show all the users *****/ HTM_TR_Begin (NULL); HTM_TD_Begin ("colspan=\"3\" class=\"AUTHOR_TXT LM\""); HTM_TxtF ("[%u %s]", - NumRecipientsUnknown, - (NumRecipientsUnknown == 1) ? Txt_unknown_recipient : - Txt_unknown_recipients); + NumRecipients.Unknown, + (NumRecipients.Unknown == 1) ? Txt_unknown_recipient : + Txt_unknown_recipients); HTM_TD_End (); HTM_TR_End (); } /***** If any known recipient is not listed *****/ - if (NumRecipientsToShow < NumRecipientsKnown) + if (NumRecipients.ToShow < NumRecipients.Known) { /***** Begin form to show all the users *****/ HTM_TR_Begin (NULL); @@ -2870,7 +2780,7 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod) Par_PutHiddenParamChar ("SeeAllRcpts",'Y'); HTM_BUTTON_SUBMIT_Begin (Txt_View_all_recipients,"BT_LINK AUTHOR_TXT",NULL); HTM_TxtF (Txt_and_X_other_recipients, - NumRecipientsKnown - NumRecipientsToShow); + NumRecipients.Known - NumRecipients.ToShow); HTM_BUTTON_End (); Frm_EndForm (); HTM_TD_End (); @@ -3008,13 +2918,8 @@ void Msg_BanSenderWhenShowingMsgs (void) Err_WrongUserExit (); /***** Insert pair (sender's code - my code) in table of banned senders if not inserted *****/ - DB_QueryREPLACE ("can not ban sender", - "REPLACE INTO msg_banned" - " (FromUsrCod,ToUsrCod)" - " VALUES" - " (%ld,%ld)", - Gbl.Usrs.Other.UsrDat.UsrCod, - Gbl.Usrs.Me.UsrDat.UsrCod); + Msg_DB_CreateUsrsPairIntoBanned (Gbl.Usrs.Other.UsrDat.UsrCod, // From + Gbl.Usrs.Me.UsrDat.UsrCod); // To /***** Show alert with the change made *****/ Ale_ShowAlert (Ale_SUCCESS,Txt_From_this_time_you_will_not_receive_messages_from_X, @@ -3068,12 +2973,8 @@ static void Msg_UnbanSender (void) Err_WrongUserExit (); /***** Remove pair (sender's code - my code) from table of banned senders *****/ - DB_QueryDELETE ("can not ban sender", - "DELETE FROM msg_banned" - " WHERE FromUsrCod=%ld" - " AND ToUsrCod=%ld", - Gbl.Usrs.Other.UsrDat.UsrCod, - Gbl.Usrs.Me.UsrDat.UsrCod); + Msg_DB_RemoveUsrsPairFromBanned (Gbl.Usrs.Other.UsrDat.UsrCod, // From + Gbl.Usrs.Me.UsrDat.UsrCod); // To /***** Show alert with the change made *****/ Ale_ShowAlert (Ale_SUCCESS,Txt_From_this_time_you_can_receive_messages_from_X, @@ -3095,7 +2996,7 @@ void Msg_ListBannedUsrs (void) struct UsrData UsrDat; /***** Get users banned by me *****/ - if ((NumUsrs = Msg_DB_GetUsrsBannedByMe (&mysql_res))) + if ((NumUsrs = Msg_DB_GetUsrsBannedBy (&mysql_res,Gbl.Usrs.Me.UsrDat.UsrCod))) { /***** Initialize structure with user's data *****/ Usr_UsrDataConstructor (&UsrDat); diff --git a/swad_message_database.c b/swad_message_database.c index 78b40cb7..c0a2a2b8 100644 --- a/swad_message_database.c +++ b/swad_message_database.c @@ -279,6 +279,44 @@ void Msg_DB_MoveSntMsgToDeleted (long MsgCod) MsgCod); } +/*****************************************************************************/ +/*************** Get dictinct courses in my received messages ****************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetDistinctCrssInMyRcvMsgs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages", + "SELECT DISTINCT crs_courses.CrsCod," // row[0] + "crs_courses.ShortName" // row[1] + " FROM msg_rcv," + "msg_snt," + "crs_courses" + " WHERE msg_rcv.UsrCod=%ld" + " AND msg_rcv.MsgCod=msg_snt.MsgCod" + " AND msg_snt.CrsCod=crs_courses.CrsCod" + " ORDER BY crs_courses.ShortName", + Gbl.Usrs.Me.UsrDat.UsrCod); + } + +/*****************************************************************************/ +/***************** Get dictinct courses in my sent messages ******************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetDistinctCrssInMySntMsgs (MYSQL_RES **mysql_res) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get distinct courses in your messages", + "SELECT DISTINCT crs_courses.CrsCod," // row[0] + "crs_courses.ShortName" // row[1] + " FROM msg_snt," + "crs_courses" + " WHERE msg_snt.UsrCod=%ld" + " AND msg_snt.CrsCod=crs_courses.CrsCod" + " ORDER BY crs_courses.ShortName", + Gbl.Usrs.Me.UsrDat.UsrCod); + } + /*****************************************************************************/ /************************* Make "from"/"to" subquery *************************/ /*****************************************************************************/ @@ -548,6 +586,58 @@ void Msg_DB_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1]) MsgCod); } +/*****************************************************************************/ +/*************** Get content and optional image of a message *****************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetMsgContent (MYSQL_RES **mysql_res,long MsgCod) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get the content of a message", + "SELECT Content," // row[0] + "MedCod" // row[1] + " FROM msg_content" + " WHERE MsgCod=%ld", + MsgCod); + } + +/*****************************************************************************/ +/***************************** Get data of a message *************************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetMsgSntData (MYSQL_RES **mysql_res,long MsgCod,bool *Deleted) + { + unsigned NumRows; + + /***** Get data of message from table msg_snt *****/ + *Deleted = false; + NumRows = (unsigned) + DB_QuerySELECT (mysql_res,"can not get data of a message", + "SELECT CrsCod," // row[0] + "UsrCod," // row[1] + "UNIX_TIMESTAMP(CreatTime)" // row[2] + " FROM msg_snt" + " WHERE MsgCod=%ld", + MsgCod); + + if (NumRows == 0) // If not result ==> sent message is deleted + { + /***** Get data of message from table msg_snt_deleted *****/ + NumRows = (unsigned) + DB_QuerySELECT (mysql_res,"can not get data of a message", + "SELECT CrsCod," // row[0] + "UsrCod," // row[1] + "UNIX_TIMESTAMP(CreatTime)" // row[2] + " FROM msg_snt_deleted" + " WHERE MsgCod=%ld", + MsgCod); + + *Deleted = true; + } + + return NumRows; + } + /*****************************************************************************/ /********************** Get if a sent message is expanded ********************/ /*****************************************************************************/ @@ -638,6 +728,62 @@ bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod) // in table of received messages undeleted } +/*****************************************************************************/ +/************ Get number of recipients of a message from database ************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetNumRecipients (long MsgCod) + { + return (unsigned) + DB_QueryCOUNT ("can not get number of recipients", + "SELECT " + "(SELECT COUNT(*)" + " FROM msg_rcv" + " WHERE MsgCod=%ld)" + " + " + "(SELECT COUNT(*)" + " FROM msg_rcv_deleted" + " WHERE MsgCod=%ld)", + MsgCod, + MsgCod); + } + +/*****************************************************************************/ +/*************** Get known recipients of a message from database *************/ +/*****************************************************************************/ + +unsigned Msg_DB_GetKnownRecipients (MYSQL_RES **mysql_res,long MsgCod) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get recipients of a message", + "(SELECT msg_rcv.UsrCod," // row[0] + "'N'," // row[1] + "msg_rcv.Open," // row[2] + "usr_data.Surname1 AS S1," // row[3] + "usr_data.Surname2 AS S2," // row[4] + "usr_data.FirstName AS FN" // row[5] + " FROM msg_rcv," + "usr_data" + " WHERE msg_rcv.MsgCod=%ld" + " AND msg_rcv.UsrCod=usr_data.UsrCod)" + " UNION " + "(SELECT msg_rcv_deleted.UsrCod," // row[0] + "'Y'," // row[1] + "msg_rcv_deleted.Open," // row[2] + "usr_data.Surname1 AS S1," // row[3] + "usr_data.Surname2 AS S2," // row[4] + "usr_data.FirstName AS FN" // row[5] + " FROM msg_rcv_deleted," + "usr_data" + " WHERE msg_rcv_deleted.MsgCod=%ld" + " AND msg_rcv_deleted.UsrCod=usr_data.UsrCod)" + " ORDER BY S1," + "S2," + "FN", + MsgCod, + MsgCod); + } + /*****************************************************************************/ /******** Get the number of unique messages sent from this location **********/ /******** (all the platform, current degree or current course) **********/ @@ -1141,25 +1287,40 @@ void Msg_DB_MoveUnusedMsgsContentToDeleted (void) " FROM msg_rcv)"); } +/*****************************************************************************/ +/***** Insert pair (sender's code - my code) in table of banned senders ******/ +/*****************************************************************************/ + +void Msg_DB_CreateUsrsPairIntoBanned (long FromUsrCod,long ToUsrCod) + { + DB_QueryREPLACE ("can not ban sender", + "REPLACE INTO msg_banned" + " (FromUsrCod,ToUsrCod)" + " VALUES" + " (%ld,%ld)", + FromUsrCod, + ToUsrCod); + } + /*****************************************************************************/ /******************** Get number of users I have banned **********************/ /*****************************************************************************/ -unsigned Msg_DB_GetNumUsrsBannedByMe (void) +unsigned Msg_DB_GetNumUsrsBannedBy (long UsrCod) { return (unsigned) - DB_QueryCOUNT ("can not get number of users you have banned", + DB_QueryCOUNT ("can not get number of users banned", "SELECT COUNT(*)" " FROM msg_banned" " WHERE ToUsrCod=%ld", - Gbl.Usrs.Me.UsrDat.UsrCod); + UsrCod); } /*****************************************************************************/ /************************* Get users I have banned ***************************/ /*****************************************************************************/ -unsigned Msg_DB_GetUsrsBannedByMe (MYSQL_RES **mysql_res) +unsigned Msg_DB_GetUsrsBannedBy (MYSQL_RES **mysql_res,long UsrCod) { return (unsigned) DB_QuerySELECT (mysql_res,"can not get banned users", @@ -1171,7 +1332,7 @@ unsigned Msg_DB_GetUsrsBannedByMe (MYSQL_RES **mysql_res) " ORDER BY usr_data.Surname1," "usr_data.Surname2," "usr_data.FirstName", - Gbl.Usrs.Me.UsrDat.UsrCod); + UsrCod); } /*****************************************************************************/ @@ -1190,7 +1351,21 @@ bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod) } /*****************************************************************************/ -/************************ Remove user from banned table **********************/ +/**** Remove pair (sender's code - recipient's code) from table of banned ****/ +/*****************************************************************************/ + +void Msg_DB_RemoveUsrsPairFromBanned (long FromUsrCod,long ToUsrCod) + { + DB_QueryDELETE ("can not unban sender", + "DELETE FROM msg_banned" + " WHERE FromUsrCod=%ld" + " AND ToUsrCod=%ld", + FromUsrCod, + ToUsrCod); + } + +/*****************************************************************************/ +/**************** Remove user from table of banned senders *******************/ /*****************************************************************************/ void Msg_DB_RemoveUsrFromBanned (long UsrCod) @@ -1199,5 +1374,6 @@ void Msg_DB_RemoveUsrFromBanned (long UsrCod) "DELETE FROM msg_banned" " WHERE FromUsrCod=%ld" " OR ToUsrCod=%ld", - UsrCod,UsrCod); + UsrCod, + UsrCod); } diff --git a/swad_message_database.h b/swad_message_database.h index 8e7e8959..6b5a6dc5 100644 --- a/swad_message_database.h +++ b/swad_message_database.h @@ -60,6 +60,8 @@ void Msg_DB_SetRcvMsgAsOpen (long MsgCod,long UsrCod); void Msg_DB_MoveRcvMsgToDeleted (long MsgCod,long UsrCod); void Msg_DB_MoveSntMsgToDeleted (long MsgCod); +unsigned Msg_DB_GetDistinctCrssInMyRcvMsgs (MYSQL_RES **mysql_res); +unsigned Msg_DB_GetDistinctCrssInMySntMsgs (MYSQL_RES **mysql_res); void Msg_DB_MakeFilterFromToSubquery (const struct Msg_Messages *Messages, char FilterFromToSubquery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]); unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res, @@ -68,11 +70,15 @@ unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res, const char *FilterFromToSubquery); unsigned Msg_DB_GetSubjectAndContent (MYSQL_RES **mysql_res,long MsgCod); void Msg_DB_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1]); +unsigned Msg_DB_GetMsgContent (MYSQL_RES **mysql_res,long MsgCod); +unsigned Msg_DB_GetMsgSntData (MYSQL_RES **mysql_res,long MsgCod,bool *Deleted); bool Msg_DB_GetStatusOfSntMsg (long MsgCod); void Msg_DB_GetStatusOfRcvMsg (long MsgCod, bool *Open,bool *Replied,bool *Expanded); bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod); bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod); +unsigned Msg_DB_GetNumRecipients (long MsgCod); +unsigned Msg_DB_GetKnownRecipients (MYSQL_RES **mysql_res,long MsgCod); unsigned Msg_DB_GetNumSntMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus); unsigned Msg_DB_GetNumRcvMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus); unsigned Msg_DB_GetNumMsgsSentByTchsCrs (long CrsCod); @@ -84,10 +90,12 @@ void Msg_DB_RemoveAllRecAndSntMsgsUsr (long UsrCod); void Msg_DB_MoveUnusedMsgsContentToDeleted (void); //--------------------------- Users banned ------------------------------------ -unsigned Msg_DB_GetNumUsrsBannedByMe (void); -unsigned Msg_DB_GetUsrsBannedByMe (MYSQL_RES **mysql_res); +void Msg_DB_CreateUsrsPairIntoBanned (long FromUsrCod,long ToUsrCod); +unsigned Msg_DB_GetNumUsrsBannedBy (long UsrCod); +unsigned Msg_DB_GetUsrsBannedBy (MYSQL_RES **mysql_res,long UsrCod); bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod); +void Msg_DB_RemoveUsrsPairFromBanned (long FromUsrCod,long ToUsrCod); void Msg_DB_RemoveUsrFromBanned (long UsrCod); #endif diff --git a/swad_user.c b/swad_user.c index 2dcd747a..bbf7e8ee 100644 --- a/swad_user.c +++ b/swad_user.c @@ -10329,6 +10329,10 @@ void Usr_PutWhoIcon (Usr_Who_t Who) "ICO_HIGHLIGHT PHOTO15x20"); break; case Usr_WHO_SELECTED: + HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"search.svg", + Txt_WHO[Who], + "ICO_HIGHLIGHT ICOx20"); + break; case Usr_WHO_FOLLOWED: HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg", Txt_WHO[Who],