mirror of https://github.com/acanas/swad-core.git
Version 21.17.2: Sep 27, 2021 Queries moved to module swad_message_database.
This commit is contained in:
parent
71117ce06f
commit
f9b99de2bb
|
@ -53,6 +53,7 @@
|
|||
#include "swad_mail_database.h"
|
||||
#include "swad_match.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_network.h"
|
||||
#include "swad_nickname.h"
|
||||
#include "swad_notification.h"
|
||||
|
@ -1028,7 +1029,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
|
|||
Ntf_DB_RemoveUsrNtfs (UsrDat->UsrCod);
|
||||
|
||||
/***** Delete user's messages sent and received *****/
|
||||
Msg_DelAllRecAndSntMsgsUsr (UsrDat->UsrCod);
|
||||
Msg_DB_RemoveAllRecAndSntMsgsUsr (UsrDat->UsrCod);
|
||||
if (QuietOrVerbose == Cns_VERBOSE)
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_Messages_of_THE_USER_X_have_been_deleted,
|
||||
UsrDat->FullName);
|
||||
|
|
|
@ -602,13 +602,15 @@ 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 (2021-09-27)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 21.17.2 (2021-09-27)"
|
||||
#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.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)
|
||||
Version 21.16.6: Sep 27, 2021 Queries moved to module swad_match_database. (317186 lines)
|
||||
Version 21.16.5: Sep 26, 2021 Queries moved to module swad_match_database. (317134 lines)
|
||||
|
|
|
@ -52,6 +52,7 @@
|
|||
#include "swad_mail_database.h"
|
||||
#include "swad_match.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_notification.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_photo.h"
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#include "swad_institution_database.h"
|
||||
#include "swad_logo.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_network.h"
|
||||
#include "swad_notice.h"
|
||||
#include "swad_privacy.h"
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "swad_indicator.h"
|
||||
#include "swad_indicator_database.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_theme.h"
|
||||
|
||||
|
|
730
swad_message.c
730
swad_message.c
|
@ -137,13 +137,9 @@ static long Msg_InsertNewMsg (const char *Subject,const char *Content,
|
|||
static unsigned long Msg_RemoveSomeRecOrSntMsgsUsr (const struct Msg_Messages *Messages,
|
||||
long UsrCod,
|
||||
const char *FilterFromToSubquery);
|
||||
static void Msg_DB_CreateRcvMsg (long MsgCod,long UsrCod,bool NotifyByEmail);
|
||||
static void Msg_DB_SetRcvMsgAsReplied (long MsgCod);
|
||||
static void Msg_MoveRcvMsgToDeleted (long MsgCod,long UsrCod);
|
||||
static void Msg_MoveSntMsgToDeleted (long MsgCod);
|
||||
static void Msg_MoveMsgContentToDeleted (long MsgCod);
|
||||
static bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod);
|
||||
static bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod);
|
||||
static unsigned Msg_GetNumUnreadMsgs (const struct Msg_Messages *Messages,
|
||||
const char *FilterFromToSubquery);
|
||||
|
||||
|
@ -1260,22 +1256,6 @@ void Msg_ConRecMsg (void)
|
|||
Msg_ShowRecMsgs ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Mark a received message as open **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_SetReceivedMsgAsOpen (long MsgCod,long UsrCod)
|
||||
{
|
||||
/***** Mark message as read by user *****/
|
||||
DB_QueryUPDATE ("can not mark a received message as open",
|
||||
"UPDATE msg_rcv"
|
||||
" SET Open='Y'"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Insert a message in the database *********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -1290,25 +1270,10 @@ static long Msg_InsertNewMsg (const char *Subject,const char *Content,
|
|||
Med_RemoveKeepOrStoreMedia (-1L,Media);
|
||||
|
||||
/***** Insert message subject and content in the database *****/
|
||||
MsgCod =
|
||||
DB_QueryINSERTandReturnCode ("can not create message",
|
||||
"INSERT INTO msg_content"
|
||||
" (Subject,Content,MedCod)"
|
||||
" VALUES"
|
||||
" ('%s','%s',%ld)",
|
||||
Subject,
|
||||
Content,
|
||||
Media->MedCod);
|
||||
MsgCod = Msg_DB_CreateNewMsg (Subject,Content,Media->MedCod);
|
||||
|
||||
/***** Insert message in sent messages *****/
|
||||
DB_QueryINSERT ("can not create message",
|
||||
"INSERT INTO msg_snt"
|
||||
" (MsgCod,CrsCod,UsrCod,Expanded,CreatTime)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%ld,'N',NOW())",
|
||||
MsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
Msg_DB_CreateSntMsg (MsgCod);
|
||||
|
||||
/***** Increment number of messages sent by me *****/
|
||||
Prf_DB_IncrementNumMsgSntUsr (Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
|
@ -1360,86 +1325,6 @@ static unsigned long Msg_RemoveSomeRecOrSntMsgsUsr (const struct Msg_Messages *M
|
|||
return NumMsgs;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Delete all received or sent messages of a user **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DelAllRecAndSntMsgsUsr (long UsrCod)
|
||||
{
|
||||
/***** Move messages from msg_rcv to msg_rcv_deleted *****/
|
||||
/* Insert messages into msg_rcv_deleted */
|
||||
DB_QueryINSERT ("can not remove received messages",
|
||||
"INSERT IGNORE INTO msg_rcv_deleted"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied)"
|
||||
" SELECT MsgCod,"
|
||||
"UsrCod,"
|
||||
"Notified,"
|
||||
"Open,"
|
||||
"Replied"
|
||||
" FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/* Delete messages from msg_rcv *****/
|
||||
DB_QueryDELETE ("can not remove received messages",
|
||||
"DELETE FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/***** Move message from msg_snt to msg_snt_deleted *****/
|
||||
/* Insert message into msg_snt_deleted */
|
||||
DB_QueryINSERT ("can not remove sent messages",
|
||||
"INSERT IGNORE INTO msg_snt_deleted"
|
||||
" (MsgCod,CrsCod,UsrCod,CreatTime)"
|
||||
" SELECT MsgCod,"
|
||||
"CrsCod,"
|
||||
"UsrCod,"
|
||||
"CreatTime"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/* Delete message from msg_snt *****/
|
||||
DB_QueryDELETE ("can not remove sent messages",
|
||||
"DELETE FROM msg_snt"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Insert a message y su destinatario in the table of messages received ***/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Msg_DB_CreateRcvMsg (long MsgCod,long UsrCod,bool NotifyByEmail)
|
||||
{
|
||||
/***** Insert message received in the database *****/
|
||||
DB_QueryINSERT ("can not create received message",
|
||||
"INSERT INTO msg_rcv"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied,Expanded)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,'%c','N','N','N')",
|
||||
MsgCod,
|
||||
UsrCod,
|
||||
NotifyByEmail ? 'Y' :
|
||||
'N');
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Update received message by setting Replied field to true ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Msg_DB_SetRcvMsgAsReplied (long MsgCod)
|
||||
{
|
||||
/***** Update received message by setting Replied field to true *****/
|
||||
DB_QueryUPDATE ("can not update a received message",
|
||||
"UPDATE msg_rcv"
|
||||
" SET Replied='Y'"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************ Delete a message from the received message table ***************/
|
||||
/*****************************************************************************/
|
||||
|
@ -1448,27 +1333,10 @@ static void Msg_MoveRcvMsgToDeleted (long MsgCod,long UsrCod)
|
|||
{
|
||||
/***** Move message from msg_rcv to msg_rcv_deleted *****/
|
||||
/* Insert message into msg_rcv_deleted */
|
||||
DB_QueryINSERT ("can not remove a received message",
|
||||
"INSERT IGNORE INTO msg_rcv_deleted"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied)"
|
||||
" SELECT MsgCod,"
|
||||
"UsrCod,"
|
||||
"Notified,"
|
||||
"Open,"
|
||||
"Replied"
|
||||
" FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
Msg_DB_MoveRcvMsgToDeleted (MsgCod,UsrCod);
|
||||
|
||||
/* Delete message from msg_rcv *****/
|
||||
DB_QueryDELETE ("can not remove a received message",
|
||||
"DELETE FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
Msg_DB_RemoveRcvMsg (MsgCod,UsrCod);
|
||||
|
||||
/***** If message content is not longer necessary, move it to msg_content_deleted *****/
|
||||
if (Msg_DB_CheckIfSntMsgIsDeleted (MsgCod))
|
||||
|
@ -1487,22 +1355,10 @@ static void Msg_MoveSntMsgToDeleted (long MsgCod)
|
|||
{
|
||||
/***** Move message from msg_snt to msg_snt_deleted *****/
|
||||
/* Insert message into msg_snt_deleted */
|
||||
DB_QueryINSERT ("can not remove a sent message",
|
||||
"INSERT IGNORE INTO msg_snt_deleted"
|
||||
" (MsgCod,CrsCod,UsrCod,CreatTime)"
|
||||
" SELECT MsgCod,"
|
||||
"CrsCod,"
|
||||
"UsrCod,"
|
||||
"CreatTime"
|
||||
" FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod);
|
||||
Msg_DB_MoveSntMsgToDeleted (MsgCod);
|
||||
|
||||
/* Delete message from msg_snt *****/
|
||||
DB_QueryDELETE ("can not remove a sent message",
|
||||
"DELETE FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod);
|
||||
Msg_DB_RemoveSntMsg (MsgCod);
|
||||
|
||||
/***** If message content is not longer necessary, move it to msg_content_deleted *****/
|
||||
if (Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (MsgCod))
|
||||
|
@ -1538,75 +1394,6 @@ static void Msg_MoveMsgContentToDeleted (long MsgCod)
|
|||
MsgCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Delete the subject and content of all completely deleted messages *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_MoveUnusedMsgsContentToDeleted (void)
|
||||
{
|
||||
/***** Move messages from msg_content to msg_content_deleted *****/
|
||||
/* Insert message content into msg_content_deleted */
|
||||
DB_QueryINSERT ("can not remove the content of some messages",
|
||||
"INSERT IGNORE INTO msg_content_deleted"
|
||||
" (MsgCod,Subject,Content)"
|
||||
" SELECT MsgCod,"
|
||||
"Subject,"
|
||||
"Content"
|
||||
" FROM msg_content"
|
||||
" WHERE MsgCod NOT IN"
|
||||
" (SELECT MsgCod"
|
||||
" FROM msg_snt)"
|
||||
" AND MsgCod NOT IN"
|
||||
" (SELECT DISTINCT MsgCod"
|
||||
" FROM msg_rcv)");
|
||||
|
||||
/* Messages in msg_content_deleted older than a certain time
|
||||
should be deleted to ensure the protection of personal data */
|
||||
|
||||
/* Delete message from msg_content *****/
|
||||
DB_QueryDELETE ("can not remove the content of some messages",
|
||||
"DELETE FROM msg_content"
|
||||
" WHERE MsgCod NOT IN"
|
||||
" (SELECT MsgCod"
|
||||
" FROM msg_snt)"
|
||||
" AND MsgCod NOT IN"
|
||||
" (SELECT DISTINCT MsgCod"
|
||||
" FROM msg_rcv)");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************** Check if a sent message is deleted *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod)
|
||||
{
|
||||
/***** Get if the message code is in table of sent messages not deleted *****/
|
||||
return (DB_QueryCOUNT ("can not check if a sent message is deleted",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod) == 0); // The message has been deleted
|
||||
// by its author when it is not present
|
||||
// in table of sent messages undeleted
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Check if a received message has been deleted by all its recipients ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod)
|
||||
{
|
||||
/***** Get if the message code is in table of received messages not deleted *****/
|
||||
return (DB_QueryCOUNT ("can not check if a received message"
|
||||
" is deleted by all recipients",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod) == 0); // The message has been deleted
|
||||
// by all its recipients when it is not present
|
||||
// in table of received messages undeleted
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Get number of received messages that haven't been read by me *******/
|
||||
/*****************************************************************************/
|
||||
|
@ -1932,401 +1719,6 @@ static void Msg_PutLinkToViewBannedUsers(void)
|
|||
Txt_Banned_users);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Get the number of unique messages sent by any teacher from a course ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumMsgsSentByTchsCrs (long CrsCod)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get the number of messages sent by teachers",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"crs_users"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND crs_users.CrsCod=%ld"
|
||||
" AND crs_users.Role IN (%u,%u)"
|
||||
" AND msg_snt.UsrCod=crs_users.UsrCod",
|
||||
CrsCod,
|
||||
CrsCod,
|
||||
(unsigned) Rol_NET, // Non-editing teacher
|
||||
(unsigned) Rol_TCH); // Teacher
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Get the number of unique messages sent by a user *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumMsgsSentByUsr (long UsrCod)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get the number of messages sent by a user",
|
||||
"SELECT"
|
||||
" (SELECT COUNT(*)"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod=%ld)"
|
||||
" +"
|
||||
" (SELECT COUNT(*)"
|
||||
" FROM msg_snt_deleted"
|
||||
" WHERE UsrCod=%ld)",
|
||||
UsrCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Get the number of unique messages sent from this location **********/
|
||||
/******** (all the platform, current degree or current course) **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumSntMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus)
|
||||
{
|
||||
const char *Table = "msg_snt";
|
||||
|
||||
/***** Get the number of messages sent from this location
|
||||
(all the platform, current degree or current course) from database *****/
|
||||
switch (MsgStatus)
|
||||
{
|
||||
case Msg_STATUS_ALL:
|
||||
case Msg_STATUS_NOTIFIED:
|
||||
Table = "msg_snt";
|
||||
break;
|
||||
case Msg_STATUS_DELETED:
|
||||
Table = "msg_snt_deleted";
|
||||
break;
|
||||
}
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned) DB_GetNumRowsTable (Table);
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Table);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Table);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Table);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"%s"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Table);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM %s"
|
||||
" WHERE CrsCod=%ld",
|
||||
Table,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****** Get the number of unique messages received from this location ********/
|
||||
/****** (all the platform, current degree or current course) ********/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumRcvMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus)
|
||||
{
|
||||
char *Table;
|
||||
|
||||
/***** Get the number of unique messages sent from this location
|
||||
(all the platform, current degree or current course) from database *****/
|
||||
switch (MsgStatus)
|
||||
{
|
||||
case Msg_STATUS_ALL:
|
||||
case Msg_STATUS_DELETED:
|
||||
Table = (MsgStatus == Msg_STATUS_ALL) ? "msg_rcv" :
|
||||
"msg_rcv_deleted";
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned) DB_GetNumRowsTable (Table);
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Table);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Table);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Table);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Table);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"%s"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Table);
|
||||
case HieLvl_UNK:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
case Msg_STATUS_NOTIFIED:
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_rcv"
|
||||
" WHERE Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_rcv_deleted"
|
||||
" WHERE Notified='Y')");
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
case HieLvl_UNK:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Set string with number of messages and number of unread messages ******/
|
||||
/*****************************************************************************/
|
||||
|
@ -3688,34 +3080,6 @@ static void Msg_UnbanSender (void)
|
|||
Gbl.Usrs.Other.UsrDat.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Chech if a user is banned by another user ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod)
|
||||
{
|
||||
/***** Get if FromUsrCod is banned by ToUsrCod *****/
|
||||
return (DB_QueryCOUNT ("can not check if a user is banned",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_banned"
|
||||
" WHERE FromUsrCod=%ld"
|
||||
" AND ToUsrCod=%ld",
|
||||
FromUsrCod,ToUsrCod) != 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Remove user from banned table **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_RemoveUsrFromBanned (long UsrCod)
|
||||
{
|
||||
DB_QueryDELETE ("can not remove user from table of banned users",
|
||||
"DELETE FROM msg_banned"
|
||||
" WHERE FromUsrCod=%ld"
|
||||
" OR ToUsrCod=%ld",
|
||||
UsrCod,UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** List banned users, who can not sent messages to me **************/
|
||||
/*****************************************************************************/
|
||||
|
@ -3730,22 +3094,8 @@ void Msg_ListBannedUsrs (void)
|
|||
unsigned NumUsrs;
|
||||
struct UsrData UsrDat;
|
||||
|
||||
/***** Get my banned users *****/
|
||||
NumUsrs = (unsigned)
|
||||
DB_QuerySELECT (&mysql_res,"can not get banned users",
|
||||
"SELECT msg_banned.FromUsrCod"
|
||||
" FROM msg_banned,"
|
||||
"usr_data"
|
||||
" WHERE msg_banned.ToUsrCod=%ld"
|
||||
" AND msg_banned.FromUsrCod=usr_data.UsrCod"
|
||||
" ORDER BY usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
|
||||
if (NumUsrs == 0) // If not result ==> sent message is deleted
|
||||
Ale_ShowAlert (Ale_INFO,Txt_You_have_not_banned_any_sender);
|
||||
else
|
||||
/***** Get users banned by me *****/
|
||||
if ((NumUsrs = Msg_DB_GetUsrsBannedByMe (&mysql_res)))
|
||||
{
|
||||
/***** Initialize structure with user's data *****/
|
||||
Usr_UsrDataConstructor (&UsrDat);
|
||||
|
@ -3755,42 +3105,42 @@ void Msg_ListBannedUsrs (void)
|
|||
NULL,NULL,
|
||||
NULL,Box_NOT_CLOSABLE,2);
|
||||
|
||||
/***** List users *****/
|
||||
for (NumUsr = 1;
|
||||
NumUsr <= NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
/* Get user's code */
|
||||
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
|
||||
/***** List users *****/
|
||||
for (NumUsr = 1;
|
||||
NumUsr <= NumUsrs;
|
||||
NumUsr++)
|
||||
{
|
||||
/* Get user's code */
|
||||
UsrDat.UsrCod = DB_GetNextCode (mysql_res);
|
||||
|
||||
/* Get user's data from database */
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,
|
||||
Usr_DONT_GET_PREFS,
|
||||
Usr_DONT_GET_ROLE_IN_CURRENT_CRS))
|
||||
{
|
||||
HTM_TR_Begin (NULL);
|
||||
/* Get user's data from database */
|
||||
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat,
|
||||
Usr_DONT_GET_PREFS,
|
||||
Usr_DONT_GET_ROLE_IN_CURRENT_CRS))
|
||||
{
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
/* Put form to unban user */
|
||||
HTM_TD_Begin ("class=\"BM\"");
|
||||
Frm_BeginForm (ActUnbUsrLst);
|
||||
Usr_PutParamUsrCodEncrypted (UsrDat.EnUsrCod);
|
||||
Ico_PutIconLink ("lock.svg",Txt_Sender_banned_click_to_unban_him);
|
||||
Frm_EndForm ();
|
||||
HTM_TD_End ();
|
||||
/* Put form to unban user */
|
||||
HTM_TD_Begin ("class=\"BM\"");
|
||||
Frm_BeginForm (ActUnbUsrLst);
|
||||
Usr_PutParamUsrCodEncrypted (UsrDat.EnUsrCod);
|
||||
Ico_PutIconLink ("lock.svg",Txt_Sender_banned_click_to_unban_him);
|
||||
Frm_EndForm ();
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Show photo */
|
||||
HTM_TD_Begin ("class=\"LM\" style=\"width:30px;\"");
|
||||
Pho_ShowUsrPhotoIfAllowed (&UsrDat,"PHOTO21x28",Pho_ZOOM,false);
|
||||
HTM_TD_End ();
|
||||
/* Show photo */
|
||||
HTM_TD_Begin ("class=\"LM\" style=\"width:30px;\"");
|
||||
Pho_ShowUsrPhotoIfAllowed (&UsrDat,"PHOTO21x28",Pho_ZOOM,false);
|
||||
HTM_TD_End ();
|
||||
|
||||
/* Write user's full name */
|
||||
HTM_TD_Begin ("class=\"DAT LM\"");
|
||||
HTM_Txt (UsrDat.FullName);
|
||||
HTM_TD_End ();
|
||||
/* Write user's full name */
|
||||
HTM_TD_Begin ("class=\"DAT LM\"");
|
||||
HTM_Txt (UsrDat.FullName);
|
||||
HTM_TD_End ();
|
||||
|
||||
HTM_TR_End ();
|
||||
}
|
||||
}
|
||||
HTM_TR_End ();
|
||||
}
|
||||
}
|
||||
|
||||
/***** End table and box *****/
|
||||
Box_BoxTableEnd ();
|
||||
|
@ -3798,6 +3148,8 @@ void Msg_ListBannedUsrs (void)
|
|||
/***** Free memory used for user's data *****/
|
||||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
else // If not result ==> sent message is deleted
|
||||
Ale_ShowAlert (Ale_INFO,Txt_You_have_not_banned_any_sender);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
|
|
@ -101,19 +101,10 @@ void Msg_ExpSntMsg (void);
|
|||
void Msg_ExpRecMsg (void);
|
||||
void Msg_ConSntMsg (void);
|
||||
void Msg_ConRecMsg (void);
|
||||
void Msg_DB_SetReceivedMsgAsOpen (long MsgCod,long UsrCod);
|
||||
|
||||
void Msg_DelAllRecAndSntMsgsUsr (long UsrCod);
|
||||
void Msg_DB_MoveUnusedMsgsContentToDeleted (void);
|
||||
|
||||
void Msg_ShowSntMsgs (void);
|
||||
void Msg_ShowRecMsgs (void);
|
||||
|
||||
unsigned Msg_DB_GetNumMsgsSentByTchsCrs (long CrsCod);
|
||||
unsigned Msg_DB_GetNumMsgsSentByUsr (long UsrCod);
|
||||
unsigned Msg_DB_GetNumSntMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus);
|
||||
unsigned Msg_DB_GetNumRcvMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus);
|
||||
|
||||
void Msg_PutHiddenParamsMsgsFilters (void *Messages);
|
||||
void Msg_GetNotifMessage (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||
char **ContentStr,long MsgCod,bool GetContent);
|
||||
|
@ -128,8 +119,6 @@ void Msg_PutHiddenParamMsgCod (long MsgCod);
|
|||
void Msg_BanSenderWhenShowingMsgs (void);
|
||||
void Msg_UnbanSenderWhenShowingMsgs (void);
|
||||
void Msg_UnbanSenderWhenListingUsrs (void);
|
||||
bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod);
|
||||
void Msg_DB_RemoveUsrFromBanned (long UsrCod);
|
||||
void Msg_ListBannedUsrs (void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -75,6 +75,72 @@ extern struct Globals Gbl;
|
|||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/************* Insert message subject and content in the database ************/
|
||||
/*****************************************************************************/
|
||||
// Return the code of the new inserted message
|
||||
|
||||
long Msg_DB_CreateNewMsg (const char *Subject,const char *Content,long MedCod)
|
||||
{
|
||||
return
|
||||
DB_QueryINSERTandReturnCode ("can not create message",
|
||||
"INSERT INTO msg_content"
|
||||
" (Subject,Content,MedCod)"
|
||||
" VALUES"
|
||||
" ('%s','%s',%ld)",
|
||||
Subject,
|
||||
Content,
|
||||
MedCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************* Insert a message in the table of sent messages ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_CreateSntMsg (long MsgCod)
|
||||
{
|
||||
DB_QueryINSERT ("can not create sent message",
|
||||
"INSERT INTO msg_snt"
|
||||
" (MsgCod,CrsCod,UsrCod,Expanded,CreatTime)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%ld,'N',NOW())",
|
||||
MsgCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********** Insert a message in the table of received messages **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_CreateRcvMsg (long MsgCod,long UsrCod,bool NotifyByEmail)
|
||||
{
|
||||
DB_QueryINSERT ("can not create received message",
|
||||
"INSERT INTO msg_rcv"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied,Expanded)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,'%c','N','N','N')",
|
||||
MsgCod,
|
||||
UsrCod,
|
||||
NotifyByEmail ? 'Y' :
|
||||
'N');
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Update received message by setting Replied field to true ***********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_SetRcvMsgAsReplied (long MsgCod)
|
||||
{
|
||||
DB_QueryUPDATE ("can not update a received message",
|
||||
"UPDATE msg_rcv"
|
||||
" SET Replied='Y'"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************************** Expand a sent message **************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -158,6 +224,61 @@ void Msg_DB_ContractRcvMsg (long MsgCod)
|
|||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************** Mark a received message as open **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_SetRcvMsgAsOpen (long MsgCod,long UsrCod)
|
||||
{
|
||||
/***** Mark message as read by user *****/
|
||||
DB_QueryUPDATE ("can not mark a received message as open",
|
||||
"UPDATE msg_rcv"
|
||||
" SET Open='Y'"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Insert received message into deleted ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_MoveRcvMsgToDeleted (long MsgCod,long UsrCod)
|
||||
{
|
||||
DB_QueryINSERT ("can not remove a received message",
|
||||
"INSERT IGNORE INTO msg_rcv_deleted"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied)"
|
||||
" SELECT MsgCod,"
|
||||
"UsrCod,"
|
||||
"Notified,"
|
||||
"Open,"
|
||||
"Replied"
|
||||
" FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Insert received message into deleted ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_MoveSntMsgToDeleted (long MsgCod)
|
||||
{
|
||||
DB_QueryINSERT ("can not remove a sent message",
|
||||
"INSERT IGNORE INTO msg_snt_deleted"
|
||||
" (MsgCod,CrsCod,UsrCod,CreatTime)"
|
||||
" SELECT MsgCod,"
|
||||
"CrsCod,"
|
||||
"UsrCod,"
|
||||
"CreatTime"
|
||||
" FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Make "from"/"to" subquery *************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -487,7 +608,541 @@ void Msg_DB_GetStatusOfRcvMsg (long MsgCod,
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Get number of user I have banned **********************/
|
||||
/******************** Check if a sent message is deleted *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Msg_DB_CheckIfSntMsgIsDeleted (long MsgCod)
|
||||
{
|
||||
return (DB_QueryCOUNT ("can not check if a sent message is deleted",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod) == 0); // The message has been deleted
|
||||
// by its author when it is not present
|
||||
// in table of sent messages undeleted
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Check if a received message has been deleted by all its recipients ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Msg_DB_CheckIfRcvMsgIsDeletedForAllItsRecipients (long MsgCod)
|
||||
{
|
||||
return (DB_QueryCOUNT ("can not check if a received message"
|
||||
" is deleted by all recipients",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod) == 0); // The message has been deleted
|
||||
// by all its recipients when it is not present
|
||||
// in table of received messages undeleted
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******** Get the number of unique messages sent from this location **********/
|
||||
/******** (all the platform, current degree or current course) **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumSntMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus)
|
||||
{
|
||||
const char *Table = "msg_snt";
|
||||
|
||||
/***** Get the number of messages sent from this location
|
||||
(all the platform, current degree or current course) from database *****/
|
||||
switch (MsgStatus)
|
||||
{
|
||||
case Msg_STATUS_ALL:
|
||||
case Msg_STATUS_NOTIFIED:
|
||||
Table = "msg_snt";
|
||||
break;
|
||||
case Msg_STATUS_DELETED:
|
||||
Table = "msg_snt_deleted";
|
||||
break;
|
||||
}
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned) DB_GetNumRowsTable (Table);
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Table);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Table);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Table);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"%s"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=%s.CrsCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Table);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of sent messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM %s"
|
||||
" WHERE CrsCod=%ld",
|
||||
Table,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****** Get the number of unique messages received from this location ********/
|
||||
/****** (all the platform, current degree or current course) ********/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumRcvMsgs (HieLvl_Level_t Scope,Msg_Status_t MsgStatus)
|
||||
{
|
||||
char *Table;
|
||||
|
||||
/***** Get the number of unique messages sent from this location
|
||||
(all the platform, current degree or current course) from database *****/
|
||||
switch (MsgStatus)
|
||||
{
|
||||
case Msg_STATUS_ALL:
|
||||
case Msg_STATUS_DELETED:
|
||||
Table = (MsgStatus == Msg_STATUS_ALL) ? "msg_rcv" :
|
||||
"msg_rcv_deleted";
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned) DB_GetNumRowsTable (Table);
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Table);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Table);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Table);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"%s,"
|
||||
"msg_snt"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Table);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"%s"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=%s.MsgCod",
|
||||
Table,
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Table);
|
||||
case HieLvl_UNK:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
case Msg_STATUS_NOTIFIED:
|
||||
switch (Scope)
|
||||
{
|
||||
case HieLvl_SYS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_rcv"
|
||||
" WHERE Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_rcv_deleted"
|
||||
" WHERE Notified='Y')");
|
||||
case HieLvl_CTY:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ins_instits,"
|
||||
"ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE ins_instits.CtyCod=%ld"
|
||||
" AND ins_instits.InsCod=ctr_centers.InsCod"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Cty.CtyCod,
|
||||
Gbl.Hierarchy.Cty.CtyCod);
|
||||
case HieLvl_INS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM ctr_centers,"
|
||||
"deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE ctr_centers.InsCod=%ld"
|
||||
" AND ctr_centers.CtrCod=deg_degrees.CtrCod"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Ins.InsCod,
|
||||
Gbl.Hierarchy.Ins.InsCod);
|
||||
case HieLvl_CTR:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM deg_degrees,"
|
||||
"crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE deg_degrees.CtrCod=%ld"
|
||||
" AND deg_degrees.DegCod=crs_courses.DegCod"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Gbl.Hierarchy.Ctr.CtrCod);
|
||||
case HieLvl_DEG:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM crs_courses,"
|
||||
"msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE crs_courses.DegCod=%ld"
|
||||
" AND crs_courses.CrsCod=msg_snt.CrsCod"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Deg.DegCod,
|
||||
Gbl.Hierarchy.Deg.DegCod);
|
||||
case HieLvl_CRS:
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get number of received messages",
|
||||
"SELECT "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"msg_rcv"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.Notified='Y')"
|
||||
" + "
|
||||
"(SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"msg_rcv_deleted"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND msg_snt.MsgCod=msg_rcv_deleted.MsgCod"
|
||||
" AND msg_rcv_deleted.Notified='Y')",
|
||||
Gbl.Hierarchy.Crs.CrsCod,
|
||||
Gbl.Hierarchy.Crs.CrsCod);
|
||||
case HieLvl_UNK:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Get the number of unique messages sent by any teacher from a course ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumMsgsSentByTchsCrs (long CrsCod)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get the number of messages sent by teachers",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_snt,"
|
||||
"crs_users"
|
||||
" WHERE msg_snt.CrsCod=%ld"
|
||||
" AND crs_users.CrsCod=%ld"
|
||||
" AND crs_users.Role IN (%u,%u)"
|
||||
" AND msg_snt.UsrCod=crs_users.UsrCod",
|
||||
CrsCod,
|
||||
CrsCod,
|
||||
(unsigned) Rol_NET, // Non-editing teacher
|
||||
(unsigned) Rol_TCH); // Teacher
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Get the number of unique messages sent by a user *************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumMsgsSentByUsr (long UsrCod)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QueryCOUNT ("can not get the number of messages sent by a user",
|
||||
"SELECT"
|
||||
" (SELECT COUNT(*)"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod=%ld)"
|
||||
" +"
|
||||
" (SELECT COUNT(*)"
|
||||
" FROM msg_snt_deleted"
|
||||
" WHERE UsrCod=%ld)",
|
||||
UsrCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Remove message from received messages ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_RemoveRcvMsg (long MsgCod,long UsrCod)
|
||||
{
|
||||
DB_QueryDELETE ("can not remove a received message",
|
||||
"DELETE FROM msg_rcv"
|
||||
" WHERE MsgCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
MsgCod,
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Remove message from sent messages ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_RemoveSntMsg (long MsgCod)
|
||||
{
|
||||
DB_QueryDELETE ("can not remove a sent message",
|
||||
"DELETE FROM msg_snt"
|
||||
" WHERE MsgCod=%ld",
|
||||
MsgCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Remove all received or sent messages of a user **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_RemoveAllRecAndSntMsgsUsr (long UsrCod)
|
||||
{
|
||||
/***** Move messages from msg_rcv to msg_rcv_deleted *****/
|
||||
/* Insert messages into msg_rcv_deleted */
|
||||
DB_QueryINSERT ("can not remove received messages",
|
||||
"INSERT IGNORE INTO msg_rcv_deleted"
|
||||
" (MsgCod,UsrCod,Notified,Open,Replied)"
|
||||
" SELECT MsgCod,"
|
||||
"UsrCod,"
|
||||
"Notified,"
|
||||
"Open,"
|
||||
"Replied"
|
||||
" FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/* Delete messages from msg_rcv *****/
|
||||
DB_QueryDELETE ("can not remove received messages",
|
||||
"DELETE FROM msg_rcv"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/***** Move message from msg_snt to msg_snt_deleted *****/
|
||||
/* Insert message into msg_snt_deleted */
|
||||
DB_QueryINSERT ("can not remove sent messages",
|
||||
"INSERT IGNORE INTO msg_snt_deleted"
|
||||
" (MsgCod,CrsCod,UsrCod,CreatTime)"
|
||||
" SELECT MsgCod,"
|
||||
"CrsCod,"
|
||||
"UsrCod,"
|
||||
"CreatTime"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
|
||||
/* Delete message from msg_snt *****/
|
||||
DB_QueryDELETE ("can not remove sent messages",
|
||||
"DELETE FROM msg_snt"
|
||||
" WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Delete the subject and content of all completely deleted messages *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_MoveUnusedMsgsContentToDeleted (void)
|
||||
{
|
||||
/***** Move messages from msg_content to msg_content_deleted *****/
|
||||
/* Insert message content into msg_content_deleted */
|
||||
DB_QueryINSERT ("can not remove the content of some messages",
|
||||
"INSERT IGNORE INTO msg_content_deleted"
|
||||
" (MsgCod,Subject,Content)"
|
||||
" SELECT MsgCod,"
|
||||
"Subject,"
|
||||
"Content"
|
||||
" FROM msg_content"
|
||||
" WHERE MsgCod NOT IN"
|
||||
" (SELECT MsgCod"
|
||||
" FROM msg_snt)"
|
||||
" AND MsgCod NOT IN"
|
||||
" (SELECT DISTINCT MsgCod"
|
||||
" FROM msg_rcv)");
|
||||
|
||||
/* Messages in msg_content_deleted older than a certain time
|
||||
should be deleted to ensure the protection of personal data */
|
||||
|
||||
/* Delete message from msg_content *****/
|
||||
DB_QueryDELETE ("can not remove the content of some messages",
|
||||
"DELETE FROM msg_content"
|
||||
" WHERE MsgCod NOT IN"
|
||||
" (SELECT MsgCod"
|
||||
" FROM msg_snt)"
|
||||
" AND MsgCod NOT IN"
|
||||
" (SELECT DISTINCT MsgCod"
|
||||
" FROM msg_rcv)");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************** Get number of users I have banned **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetNumUsrsBannedByMe (void)
|
||||
|
@ -499,3 +1154,50 @@ unsigned Msg_DB_GetNumUsrsBannedByMe (void)
|
|||
" WHERE ToUsrCod=%ld",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Get users I have banned ***************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Msg_DB_GetUsrsBannedByMe (MYSQL_RES **mysql_res)
|
||||
{
|
||||
return (unsigned)
|
||||
DB_QuerySELECT (mysql_res,"can not get banned users",
|
||||
"SELECT msg_banned.FromUsrCod"
|
||||
" FROM msg_banned,"
|
||||
"usr_data"
|
||||
" WHERE msg_banned.ToUsrCod=%ld"
|
||||
" AND msg_banned.FromUsrCod=usr_data.UsrCod"
|
||||
" ORDER BY usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Chech if a user is banned by another user ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod)
|
||||
{
|
||||
/***** Get if FromUsrCod is banned by ToUsrCod *****/
|
||||
return (DB_QueryCOUNT ("can not check if a user is banned",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM msg_banned"
|
||||
" WHERE FromUsrCod=%ld"
|
||||
" AND ToUsrCod=%ld",
|
||||
FromUsrCod,ToUsrCod) != 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Remove user from banned table **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Msg_DB_RemoveUsrFromBanned (long UsrCod)
|
||||
{
|
||||
DB_QueryDELETE ("can not remove user from table of banned users",
|
||||
"DELETE FROM msg_banned"
|
||||
" WHERE FromUsrCod=%ld"
|
||||
" OR ToUsrCod=%ld",
|
||||
UsrCod,UsrCod);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <mysql/mysql.h> // To access MySQL databases
|
||||
|
||||
// #include "swad_course.h"
|
||||
#include "swad_hierarchy_level.h"
|
||||
// #include "swad_notification.h"
|
||||
// #include "swad_statistic.h"
|
||||
|
||||
|
@ -47,10 +48,17 @@
|
|||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
long Msg_DB_CreateNewMsg (const char *Subject,const char *Content,long MedCod);
|
||||
void Msg_DB_CreateSntMsg (long MsgCod);
|
||||
void Msg_DB_CreateRcvMsg (long MsgCod,long UsrCod,bool NotifyByEmail);
|
||||
void Msg_DB_SetRcvMsgAsReplied (long MsgCod);
|
||||
void Msg_DB_ExpandSntMsg (long MsgCod);
|
||||
void Msg_DB_ExpandRcvMsg (long MsgCod);
|
||||
void Msg_DB_ContractSntMsg (long MsgCod);
|
||||
void Msg_DB_ContractRcvMsg (long MsgCod);
|
||||
void Msg_DB_SetRcvMsgAsOpen (long MsgCod,long UsrCod);
|
||||
void Msg_DB_MoveRcvMsgToDeleted (long MsgCod,long UsrCod);
|
||||
void Msg_DB_MoveSntMsgToDeleted (long MsgCod);
|
||||
|
||||
void Msg_DB_MakeFilterFromToSubquery (const struct Msg_Messages *Messages,
|
||||
char FilterFromToSubquery[Msg_MAX_BYTES_MESSAGES_QUERY + 1]);
|
||||
|
@ -63,6 +71,23 @@ void Msg_DB_GetMsgSubject (long MsgCod,char Subject[Cns_MAX_BYTES_SUBJECT + 1]);
|
|||
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_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);
|
||||
unsigned Msg_DB_GetNumMsgsSentByUsr (long UsrCod);
|
||||
|
||||
void Msg_DB_RemoveRcvMsg (long MsgCod,long UsrCod);
|
||||
void Msg_DB_RemoveSntMsg (long MsgCod);
|
||||
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);
|
||||
bool Msg_DB_CheckIfUsrIsBanned (long FromUsrCod,long ToUsrCod);
|
||||
|
||||
void Msg_DB_RemoveUsrFromBanned (long UsrCod);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
#include "swad_HTML.h"
|
||||
#include "swad_mark.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_notice.h"
|
||||
#include "swad_notification.h"
|
||||
#include "swad_notification_database.h"
|
||||
|
@ -907,7 +908,7 @@ void Ntf_GetNotifSummaryAndContent (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
Msg_GetNotifMessage (SummaryStr,ContentStr,Cod,GetContent);
|
||||
if (Gbl.WebService.IsWebService)
|
||||
/* Set the message as open by me, because I can read it in an extern application */
|
||||
Msg_DB_SetReceivedMsgAsOpen (Cod,UsrCod);
|
||||
Msg_DB_SetRcvMsgAsOpen (Cod,UsrCod);
|
||||
break;
|
||||
case Ntf_EVENT_SURVEY:
|
||||
Svy_GetNotifSurvey (SummaryStr,ContentStr,Cod,GetContent);
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "swad_HTML.h"
|
||||
#include "swad_language.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_network.h"
|
||||
#include "swad_nickname.h"
|
||||
#include "swad_notification.h"
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "swad_ID.h"
|
||||
#include "swad_logo.h"
|
||||
#include "swad_message.h"
|
||||
#include "swad_message_database.h"
|
||||
#include "swad_network.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_photo.h"
|
||||
|
|
Loading…
Reference in New Issue