Version 21.51: Nov 04, 2021 Eliminated the limit of origin courses in messages.

This commit is contained in:
acanas 2021-11-05 00:13:10 +01:00
parent f99d0b0faa
commit df0dc40476
3 changed files with 42 additions and 65 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.50.1 (2021-11-03)" #define Log_PLATFORM_VERSION "SWAD 21.51 (2021-11-04)"
#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.51: Nov 04, 2021 Eliminated the limit of origin courses in messages. (321735 lines)
Version 21.50.1: Nov 03, 2021 Queries moved to module swad_user_database and other modules. (321759 lines) Version 21.50.1: Nov 03, 2021 Queries moved to module swad_user_database and other modules. (321759 lines)
Version 21.50: Nov 03, 2021 Queries moved to module swad_user_database and other modules. (321696 lines) Version 21.50: Nov 03, 2021 Queries moved to module swad_user_database and other modules. (321696 lines)
Version 21.49: Nov 03, 2021 New module swad_user_database for database queries related to users. (321615 lines) Version 21.49: Nov 03, 2021 New module swad_user_database for database queries related to users. (321615 lines)

View File

@ -109,7 +109,6 @@ static void Msg_SetNumMsgsStr (const struct Msg_Messages *Messages,
static void Msg_PutIconsListMsgs (void *Messages); static void Msg_PutIconsListMsgs (void *Messages);
static void Msg_PutHiddenParamsOneMsg (void *Messages); static void Msg_PutHiddenParamsOneMsg (void *Messages);
static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages);
static void Msg_ShowFormSelectCourseSentOrRecMsgs (const struct Msg_Messages *Messages); static void Msg_ShowFormSelectCourseSentOrRecMsgs (const struct Msg_Messages *Messages);
static void Msg_ShowFormToFilterMsgs (const struct Msg_Messages *Messages); static void Msg_ShowFormToFilterMsgs (const struct Msg_Messages *Messages);
@ -180,7 +179,6 @@ static void Msg_ResetMessages (struct Msg_Messages *Messages)
{ {
Messages->NumMsgs = 0; Messages->NumMsgs = 0;
Messages->Subject[0] = '\0'; Messages->Subject[0] = '\0';
Messages->NumCourses = 0;
Messages->FilterCrsCod = -1L; Messages->FilterCrsCod = -1L;
Messages->FilterCrsShrtName[0] = '\0'; Messages->FilterCrsShrtName[0] = '\0';
Messages->FilterFromTo[0] = '\0'; Messages->FilterFromTo[0] = '\0';
@ -1462,7 +1460,6 @@ static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages)
Msg_GetParamFilterFromTo (Messages); Msg_GetParamFilterFromTo (Messages);
Msg_GetParamFilterContent (Messages); Msg_GetParamFilterContent (Messages);
Msg_DB_MakeFilterFromToSubquery (Messages,FilterFromToSubquery); Msg_DB_MakeFilterFromToSubquery (Messages,FilterFromToSubquery);
Msg_GetDistinctCoursesInMyMessages (Messages);
/***** Get number of unread messages *****/ /***** Get number of unread messages *****/
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
@ -1473,11 +1470,9 @@ static void Msg_ShowSntOrRcvMessages (struct Msg_Messages *Messages)
FilterFromToSubquery); FilterFromToSubquery);
break; break;
case Msg_SENT: case Msg_SENT:
default:
NumUnreadMsgs = 0; NumUnreadMsgs = 0;
break; break;
default:
NumUnreadMsgs = 0;
break;
} }
/***** Get messages from database *****/ /***** Get messages from database *****/
@ -1790,18 +1785,28 @@ void Msg_PutHiddenParamsMsgsFilters (void *Messages)
} }
/*****************************************************************************/ /*****************************************************************************/
/********************* Get dictinct courses in my messages *******************/ /********* Show form to select course for sent or received messages **********/
/*****************************************************************************/ /*****************************************************************************/
static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages) static void Msg_ShowFormSelectCourseSentOrRecMsgs (const struct Msg_Messages *Messages)
{ {
extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Messages_received_from_A_COURSE;
extern const char *Txt_Messages_sent_from_A_COURSE;
extern const char *Txt_any_course;
const char *TxtSelector[Msg_NUM_TYPES_OF_MSGS] =
{
[Msg_WRITING ] = NULL,
[Msg_RECEIVED] = Txt_Messages_received_from_A_COURSE,
[Msg_SENT ] = Txt_Messages_sent_from_A_COURSE
};
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned NumCrss = 0; // Initialized to avoid warning unsigned NumCrss = 0; // Initialized to avoid warning
unsigned NumCrs; unsigned NumCrs;
struct Crs_Course Crs; long CrsCod;
/***** Get distinct courses in my messages from database *****/ /***** Get distinct courses in my messages *****/
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_RECEIVED: case Msg_RECEIVED:
@ -1814,65 +1819,36 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
break; break;
} }
/***** Get distinct courses in messages from database *****/
Messages->NumCourses = 0;
for (NumCrs = 0;
NumCrs < NumCrss;
NumCrs++)
{
/* Get next course */
row = mysql_fetch_row (mysql_res);
Crs.CrsCod = Str_ConvertStrCodToLongCod (row[0]);
if (Crs.CrsCod > 0 && Messages->NumCourses < Crs_MAX_COURSES_PER_USR)
if (Crs_GetDataOfCourseByCod (&Crs))
{
Messages->Courses[Messages->NumCourses].CrsCod = Crs.CrsCod;
Str_Copy (Messages->Courses[Messages->NumCourses].ShrtName,Crs.ShrtName,
sizeof (Messages->Courses[Messages->NumCourses].ShrtName) - 1);
Messages->NumCourses++;
}
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/********* Show form to select course for sent or received messages **********/
/*****************************************************************************/
static void Msg_ShowFormSelectCourseSentOrRecMsgs (const struct Msg_Messages *Messages)
{
extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Messages_received_from_A_COURSE;
extern const char *Txt_Messages_sent_from_A_COURSE;
extern const char *Txt_any_course;
unsigned NumOriginCrs;
const char *TxtSelector[Msg_NUM_TYPES_OF_MSGS] =
{
[Msg_WRITING ] = NULL,
[Msg_RECEIVED] = Txt_Messages_received_from_A_COURSE,
[Msg_SENT ] = Txt_Messages_sent_from_A_COURSE
};
/***** Course selection *****/ /***** Course selection *****/
HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]); HTM_LABEL_Begin ("class=\"%s\"",The_ClassFormInBox[Gbl.Prefs.Theme]);
HTM_TxtF ("%s&nbsp;",TxtSelector[Messages->TypeOfMessages]); HTM_TxtF ("%s&nbsp;",TxtSelector[Messages->TypeOfMessages]);
HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE, HTM_SELECT_Begin (HTM_DONT_SUBMIT_ON_CHANGE,
"name=\"FilterCrsCod\""); "name=\"FilterCrsCod\"");
/* Write a first option to select any course */
HTM_OPTION (HTM_Type_STRING,"", HTM_OPTION (HTM_Type_STRING,"",
Messages->FilterCrsCod < 0,false, Messages->FilterCrsCod < 0,false,
"%s",Txt_any_course); "%s",Txt_any_course);
/***** Write an option for each origin course *****/ /* Write an option for each origin course */
for (NumOriginCrs = 0; for (NumCrs = 0;
NumOriginCrs < Messages->NumCourses; NumCrs < NumCrss;
NumOriginCrs++) NumCrs++)
HTM_OPTION (HTM_Type_LONG,&Messages->Courses[NumOriginCrs].CrsCod, {
Messages->Courses[NumOriginCrs].CrsCod == Messages->FilterCrsCod,false, /* Get next course */
"%s",Messages->Courses[NumOriginCrs].ShrtName); row = mysql_fetch_row (mysql_res);
if ((CrsCod = Str_ConvertStrCodToLongCod (row[0])) > 0)
HTM_OPTION (HTM_Type_LONG,&CrsCod,
CrsCod == Messages->FilterCrsCod,false,
"%s",row[1]); // Course short name
}
HTM_SELECT_End (); HTM_SELECT_End ();
HTM_LABEL_End (); HTM_LABEL_End ();
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -59,17 +59,17 @@ typedef enum
Msg_STATUS_NOTIFIED, Msg_STATUS_NOTIFIED,
} Msg_Status_t; } Msg_Status_t;
struct Msg_Course
{
long CrsCod;
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
}; // Distinct courses in my messages sent or received
struct Msg_Messages struct Msg_Messages
{ {
Msg_TypeOfMessages_t TypeOfMessages; Msg_TypeOfMessages_t TypeOfMessages;
unsigned NumMsgs; unsigned NumMsgs;
char Subject[Cns_MAX_BYTES_SUBJECT + 1]; char Subject[Cns_MAX_BYTES_SUBJECT + 1];
unsigned NumCourses;
struct
{
long CrsCod;
char ShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
} Courses[Crs_MAX_COURSES_PER_USR]; // Distinct courses in my messages sent or received
long FilterCrsCod; // Show only messages sent from this course code long FilterCrsCod; // Show only messages sent from this course code
char FilterCrsShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1]; char FilterCrsShrtName[Cns_HIERARCHY_MAX_BYTES_SHRT_NAME + 1];
char FilterFromTo[Usr_MAX_BYTES_FULL_NAME + 1]; // Show only messages from/to these users char FilterFromTo[Usr_MAX_BYTES_FULL_NAME + 1]; // Show only messages from/to these users