mirror of https://github.com/acanas/swad-core.git
Version 21.51: Nov 04, 2021 Eliminated the limit of origin courses in messages.
This commit is contained in:
parent
f99d0b0faa
commit
df0dc40476
|
@ -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)
|
||||||
|
|
|
@ -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 ",TxtSelector[Messages->TypeOfMessages]);
|
HTM_TxtF ("%s ",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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue