Version 21.17.3: Sep 29, 2021 Queries moved to module swad_message_database.

This commit is contained in:
acanas 2021-09-29 14:40:42 +02:00
parent f9b99de2bb
commit b48901d204
5 changed files with 245 additions and 155 deletions

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.17.2 (2021-09-27)" #define Log_PLATFORM_VERSION "SWAD 21.17.3 (2021-09-29)"
#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.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.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.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) Version 21.17: Sep 27, 2021 New module swad_message_database for database queries related to messages. (317295 lines)

View File

@ -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_MoveRcvMsgToDeleted (long MsgCod,long UsrCod);
static void Msg_MoveSntMsgToDeleted (long MsgCod); static void Msg_MoveSntMsgToDeleted (long MsgCod);
static void Msg_MoveMsgContentToDeleted (long MsgCod); static void Msg_MoveMsgContentToDeleted (long MsgCod);
static unsigned Msg_GetNumUnreadMsgs (const struct Msg_Messages *Messages, static unsigned Msg_DB_GetNumUnreadMsgs (const struct Msg_Messages *Messages,
const char *FilterFromToSubquery); const char *FilterFromToSubquery);
static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod, static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod,
time_t *CreatTimeUTC, time_t *CreatTimeUTC,
char Subject[Cns_MAX_BYTES_SUBJECT + 1], char Subject[Cns_MAX_BYTES_SUBJECT + 1],
bool *Deleted); 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); struct Med_Media *Media);
static void Msg_WriteSentOrReceivedMsgSubject (struct Msg_Messages *Messages, 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 *******/ /******** Get number of received messages that haven't been read by me *******/
/*****************************************************************************/ /*****************************************************************************/
static unsigned Msg_GetNumUnreadMsgs (const struct Msg_Messages *Messages, static unsigned Msg_DB_GetNumUnreadMsgs (const struct Msg_Messages *Messages,
const char *FilterFromToSubquery) const char *FilterFromToSubquery)
{ {
char *SubQuery; char *SubQuery;
unsigned NumMsgs; unsigned NumMsgs;
@ -1510,7 +1511,7 @@ void Msg_ShowRecMsgs (void)
/***** Reset messages context *****/ /***** Reset messages context *****/
Msg_ResetMessages (&Messages); Msg_ResetMessages (&Messages);
if (Msg_DB_GetNumUsrsBannedByMe ()) if (Msg_DB_GetNumUsrsBannedBy (Gbl.Usrs.Me.UsrDat.UsrCod))
{ {
/***** Contextual menu *****/ /***** Contextual menu *****/
Mnu_ContextMenuBegin (); Mnu_ContextMenuBegin ();
@ -1584,7 +1585,7 @@ static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages)
{ {
case Msg_RECEIVED: case Msg_RECEIVED:
Messages->ShowOnlyUnreadMsgs = Msg_GetParamOnlyUnreadMsgs (); Messages->ShowOnlyUnreadMsgs = Msg_GetParamOnlyUnreadMsgs ();
NumUnreadMsgs = Msg_GetNumUnreadMsgs (Messages, NumUnreadMsgs = Msg_DB_GetNumUnreadMsgs (Messages,
FilterFromToSubquery); FilterFromToSubquery);
break; break;
case Msg_SENT: case Msg_SENT:
@ -1920,30 +1921,10 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_RECEIVED: case Msg_RECEIVED:
NumCrss = (unsigned) NumCrss = Msg_DB_GetDistinctCrssInMyRcvMsgs (&mysql_res);
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);
break; break;
case Msg_SENT: case Msg_SENT:
NumCrss = (unsigned) NumCrss = Msg_DB_GetDistinctCrssInMySntMsgs (&mysql_res);
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);
break; break;
default: // Not aplicable here default: // Not aplicable here
break; break;
@ -2098,36 +2079,10 @@ static void Msg_GetMsgSntData (long MsgCod,long *CrsCod,long *UsrCod,
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumRows;
/***** Get data of message from table msg_snt *****/ /***** 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 */ /* Result should have a unique row */
if (NumRows != 1) if (Msg_DB_GetMsgSntData (&mysql_res,MsgCod,Deleted) != 1)
Err_WrongMessageExit (); Err_WrongMessageExit ();
/* Get number of rows */ /* 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 *****************/ /*************** 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) struct Med_Media *Media)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
/***** Get content of message from database *****/ /***** Get content of message from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get the content of a message", if (Msg_DB_GetMsgContent (&mysql_res,MsgCod) != 1)
"SELECT Content," // row[0]
"MedCod" // row[1]
" FROM msg_content"
" WHERE MsgCod=%ld",
MsgCod) != 1)
Err_WrongMessageExit (); Err_WrongMessageExit ();
/***** Get number of rows *****/ /***** 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 SummaryStr[0] = '\0'; // Return nothing on error
/***** Get subject of message from database *****/ /***** Get subject of message from database *****/
if (DB_QuerySELECT (&mysql_res,"can not get subject and content" if (Msg_DB_GetSubjectAndContent (&mysql_res,MsgCod) == 1) // Result should have a unique row
" of a message",
"SELECT Subject," // row[0]
"Content" // row[1]
" FROM msg_content"
" WHERE MsgCod=%ld",
MsgCod) == 1) // Result should have a unique row
{ {
/***** Get subject and content of the message *****/ /***** Get subject and content of the message *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
@ -2445,13 +2390,13 @@ static void Msg_WriteSentOrReceivedMsgSubject (struct Msg_Messages *Messages,
/***** Begin cell *****/ /***** Begin cell *****/
HTM_TD_Begin ("class=\"%s LT\"",Open ? "MSG_TIT_BG" : 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 *****/ /***** Begin form to expand/contract the message *****/
Frm_BeginForm (Messages->TypeOfMessages == Msg_RECEIVED ? (Expanded ? ActConRcvMsg : Frm_BeginForm (Messages->TypeOfMessages == Msg_RECEIVED ? (Expanded ? ActConRcvMsg :
ActExpRcvMsg) : ActExpRcvMsg) :
(Expanded ? ActConSntMsg : (Expanded ? ActConSntMsg :
ActExpSntMsg)); ActExpSntMsg));
Messages->MsgCod = MsgCod; // Message to be contracted/expanded Messages->MsgCod = MsgCod; // Message to be contracted/expanded
Msg_PutHiddenParamsOneMsg (Messages); Msg_PutHiddenParamsOneMsg (Messages);
@ -2706,10 +2651,13 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumRcp; unsigned NumRcp;
unsigned NumRecipientsTotal; struct
unsigned NumRecipientsKnown; {
unsigned NumRecipientsUnknown; unsigned Total;
unsigned NumRecipientsToShow; unsigned Known;
unsigned Unknown;
unsigned ToShow;
} NumRecipients;
struct UsrData UsrDat; struct UsrData UsrDat;
bool Deleted; bool Deleted;
bool OpenByDst; 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 *****/ /***** Get number of recipients of a message from database *****/
NumRecipientsTotal = (unsigned) NumRecipients.Total = Msg_DB_GetNumRecipients (MsgCod);
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 recipients of a message from database *****/ /***** Get recipients of a message from database *****/
NumRecipientsKnown = (unsigned) NumRecipients.Known = Msg_DB_GetKnownRecipients (&mysql_res,MsgCod);
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);
/***** Check number of recipients *****/ /***** Check number of recipients *****/
if (NumRecipientsTotal) if (NumRecipients.Total)
{ {
/***** Begin table *****/ /***** Begin table *****/
HTM_TABLE_Begin (NULL); HTM_TABLE_Begin (NULL);
/***** How many recipients will be shown? *****/ /***** How many recipients will be shown? *****/
if (NumRecipientsKnown <= Msg_MAX_RECIPIENTS_TO_SHOW) if (NumRecipients.Known <= Msg_MAX_RECIPIENTS_TO_SHOW)
NumRecipientsToShow = NumRecipientsKnown; NumRecipients.ToShow = NumRecipients.Known;
else // A lot of recipients else // A lot of recipients
/***** Get parameter that indicates if I want to see all recipients *****/ /***** Get parameter that indicates if I want to see all recipients *****/
NumRecipientsToShow = Par_GetParToBool ("SeeAllRcpts") ? NumRecipientsKnown : NumRecipients.ToShow = Par_GetParToBool ("SeeAllRcpts") ? NumRecipients.Known :
Msg_DEF_RECIPIENTS_TO_SHOW; Msg_DEF_RECIPIENTS_TO_SHOW;
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
/***** Write known recipients *****/ /***** Write known recipients *****/
for (NumRcp = 0; for (NumRcp = 0;
NumRcp < NumRecipientsToShow; NumRcp < NumRecipients.ToShow;
NumRcp++) NumRcp++)
{ {
/* Get user's code */ /* Get user's code */
@ -2831,7 +2741,7 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
/* Write user's name */ /* Write user's name */
HTM_TD_Begin ("class=\"%s LM\"",OpenByDst ? "AUTHOR_TXT" : HTM_TD_Begin ("class=\"%s LM\"",OpenByDst ? "AUTHOR_TXT" :
"AUTHOR_TXT_NEW"); "AUTHOR_TXT_NEW");
if (UsrValid) if (UsrValid)
HTM_Txt (UsrDat.FullName); HTM_Txt (UsrDat.FullName);
else else
@ -2842,23 +2752,23 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
} }
/***** If any recipients are unknown *****/ /***** If any recipients are unknown *****/
if ((NumRecipientsUnknown = NumRecipientsTotal - NumRecipientsKnown)) if ((NumRecipients.Unknown = NumRecipients.Total - NumRecipients.Known))
{ {
/***** Begin form to show all the users *****/ /***** Begin form to show all the users *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"3\" class=\"AUTHOR_TXT LM\""); HTM_TD_Begin ("colspan=\"3\" class=\"AUTHOR_TXT LM\"");
HTM_TxtF ("[%u %s]", HTM_TxtF ("[%u %s]",
NumRecipientsUnknown, NumRecipients.Unknown,
(NumRecipientsUnknown == 1) ? Txt_unknown_recipient : (NumRecipients.Unknown == 1) ? Txt_unknown_recipient :
Txt_unknown_recipients); Txt_unknown_recipients);
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
} }
/***** If any known recipient is not listed *****/ /***** If any known recipient is not listed *****/
if (NumRecipientsToShow < NumRecipientsKnown) if (NumRecipients.ToShow < NumRecipients.Known)
{ {
/***** Begin form to show all the users *****/ /***** Begin form to show all the users *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -2870,7 +2780,7 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
Par_PutHiddenParamChar ("SeeAllRcpts",'Y'); Par_PutHiddenParamChar ("SeeAllRcpts",'Y');
HTM_BUTTON_SUBMIT_Begin (Txt_View_all_recipients,"BT_LINK AUTHOR_TXT",NULL); HTM_BUTTON_SUBMIT_Begin (Txt_View_all_recipients,"BT_LINK AUTHOR_TXT",NULL);
HTM_TxtF (Txt_and_X_other_recipients, HTM_TxtF (Txt_and_X_other_recipients,
NumRecipientsKnown - NumRecipientsToShow); NumRecipients.Known - NumRecipients.ToShow);
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
@ -3008,13 +2918,8 @@ void Msg_BanSenderWhenShowingMsgs (void)
Err_WrongUserExit (); Err_WrongUserExit ();
/***** Insert pair (sender's code - my code) in table of banned senders if not inserted *****/ /***** Insert pair (sender's code - my code) in table of banned senders if not inserted *****/
DB_QueryREPLACE ("can not ban sender", Msg_DB_CreateUsrsPairIntoBanned (Gbl.Usrs.Other.UsrDat.UsrCod, // From
"REPLACE INTO msg_banned" Gbl.Usrs.Me.UsrDat.UsrCod); // To
" (FromUsrCod,ToUsrCod)"
" VALUES"
" (%ld,%ld)",
Gbl.Usrs.Other.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Show alert with the change made *****/ /***** Show alert with the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_From_this_time_you_will_not_receive_messages_from_X, 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 (); Err_WrongUserExit ();
/***** Remove pair (sender's code - my code) from table of banned senders *****/ /***** Remove pair (sender's code - my code) from table of banned senders *****/
DB_QueryDELETE ("can not ban sender", Msg_DB_RemoveUsrsPairFromBanned (Gbl.Usrs.Other.UsrDat.UsrCod, // From
"DELETE FROM msg_banned" Gbl.Usrs.Me.UsrDat.UsrCod); // To
" WHERE FromUsrCod=%ld"
" AND ToUsrCod=%ld",
Gbl.Usrs.Other.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Show alert with the change made *****/ /***** Show alert with the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_From_this_time_you_can_receive_messages_from_X, 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; struct UsrData UsrDat;
/***** Get users banned by me *****/ /***** 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 *****/ /***** Initialize structure with user's data *****/
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);

View File

@ -279,6 +279,44 @@ void Msg_DB_MoveSntMsgToDeleted (long MsgCod)
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 *************************/ /************************* Make "from"/"to" subquery *************************/
/*****************************************************************************/ /*****************************************************************************/
@ -548,6 +586,58 @@ void Msg_DB_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1])
MsgCod); 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 ********************/ /********************** Get if a sent message is expanded ********************/
/*****************************************************************************/ /*****************************************************************************/
@ -638,6 +728,62 @@ bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod)
// in table of received messages undeleted // 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 **********/ /******** Get the number of unique messages sent from this location **********/
/******** (all the platform, current degree or current course) **********/ /******** (all the platform, current degree or current course) **********/
@ -1141,25 +1287,40 @@ void Msg_DB_MoveUnusedMsgsContentToDeleted (void)
" FROM msg_rcv)"); " 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 **********************/ /******************** Get number of users I have banned **********************/
/*****************************************************************************/ /*****************************************************************************/
unsigned Msg_DB_GetNumUsrsBannedByMe (void) unsigned Msg_DB_GetNumUsrsBannedBy (long UsrCod)
{ {
return (unsigned) return (unsigned)
DB_QueryCOUNT ("can not get number of users you have banned", DB_QueryCOUNT ("can not get number of users banned",
"SELECT COUNT(*)" "SELECT COUNT(*)"
" FROM msg_banned" " FROM msg_banned"
" WHERE ToUsrCod=%ld", " WHERE ToUsrCod=%ld",
Gbl.Usrs.Me.UsrDat.UsrCod); UsrCod);
} }
/*****************************************************************************/ /*****************************************************************************/
/************************* Get users I have banned ***************************/ /************************* 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) return (unsigned)
DB_QuerySELECT (mysql_res,"can not get banned users", 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," " ORDER BY usr_data.Surname1,"
"usr_data.Surname2," "usr_data.Surname2,"
"usr_data.FirstName", "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) void Msg_DB_RemoveUsrFromBanned (long UsrCod)
@ -1199,5 +1374,6 @@ void Msg_DB_RemoveUsrFromBanned (long UsrCod)
"DELETE FROM msg_banned" "DELETE FROM msg_banned"
" WHERE FromUsrCod=%ld" " WHERE FromUsrCod=%ld"
" OR ToUsrCod=%ld", " OR ToUsrCod=%ld",
UsrCod,UsrCod); UsrCod,
UsrCod);
} }

View File

@ -60,6 +60,8 @@ void Msg_DB_SetRcvMsgAsOpen (long MsgCod,long UsrCod);
void Msg_DB_MoveRcvMsgToDeleted (long MsgCod,long UsrCod); void Msg_DB_MoveRcvMsgToDeleted (long MsgCod,long UsrCod);
void Msg_DB_MoveSntMsgToDeleted (long MsgCod); 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, void Msg_DB_MakeFilterFromToSubquery (const struct Msg_Messages *Messages,
char FilterFromToSubquery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]); char FilterFromToSubquery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]);
unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res, unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res,
@ -68,11 +70,15 @@ unsigned Msg_DB_GetSntOrRcvMsgs (MYSQL_RES **mysql_res,
const char *FilterFromToSubquery); const char *FilterFromToSubquery);
unsigned Msg_DB_GetSubjectAndContent (MYSQL_RES **mysql_res,long MsgCod); unsigned Msg_DB_GetSubjectAndContent (MYSQL_RES **mysql_res,long MsgCod);
void Msg_DB_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1]); 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); bool Msg_DB_GetStatusOfSntMsg (long MsgCod);
void Msg_DB_GetStatusOfRcvMsg (long MsgCod, void Msg_DB_GetStatusOfRcvMsg (long MsgCod,
bool *Open,bool *Replied,bool *Expanded); bool *Open,bool *Replied,bool *Expanded);
bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod); bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod);
bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (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_GetNumSntMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus);
unsigned Msg_DB_GetNumRcvMsgs (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); unsigned Msg_DB_GetNumMsgsSentByTchsCrs (long CrsCod);
@ -84,10 +90,12 @@ void Msg_DB_RemoveAllRecAndSntMsgsUsr (long UsrCod);
void Msg_DB_MoveUnusedMsgsContentToDeleted (void); void Msg_DB_MoveUnusedMsgsContentToDeleted (void);
//--------------------------- Users banned ------------------------------------ //--------------------------- Users banned ------------------------------------
unsigned Msg_DB_GetNumUsrsBannedByMe (void); void Msg_DB_CreateUsrsPairIntoBanned (long FromUsrCod,long ToUsrCod);
unsigned Msg_DB_GetUsrsBannedByMe (MYSQL_RES **mysql_res); unsigned Msg_DB_GetNumUsrsBannedBy (long UsrCod);
unsigned Msg_DB_GetUsrsBannedBy (MYSQL_RES **mysql_res,long UsrCod);
bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod); bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod);
void Msg_DB_RemoveUsrsPairFromBanned (long FromUsrCod,long ToUsrCod);
void Msg_DB_RemoveUsrFromBanned (long UsrCod); void Msg_DB_RemoveUsrFromBanned (long UsrCod);
#endif #endif

View File

@ -10329,6 +10329,10 @@ void Usr_PutWhoIcon (Usr_Who_t Who)
"ICO_HIGHLIGHT PHOTO15x20"); "ICO_HIGHLIGHT PHOTO15x20");
break; break;
case Usr_WHO_SELECTED: case Usr_WHO_SELECTED:
HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"search.svg",
Txt_WHO[Who],
"ICO_HIGHLIGHT ICOx20");
break;
case Usr_WHO_FOLLOWED: case Usr_WHO_FOLLOWED:
HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg", HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"user-check.svg",
Txt_WHO[Who], Txt_WHO[Who],