Version20.2

This commit is contained in:
acanas 2020-09-26 17:20:01 +02:00
parent e2ab1b601b
commit d15f8b7d94
14 changed files with 420 additions and 373 deletions

View File

@ -1518,7 +1518,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActSeeFor ] = { 95, 2,TabMsg,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ShowForumTheads ,"comments" }, [ActSeeFor ] = { 95, 2,TabMsg,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ShowForumTheads ,"comments" },
// [ActSeeChtRms ] = { 51, 3,TabMsg,ActSeeChtRms ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cht_ShowChatRooms ,"comments" }, // [ActSeeChtRms ] = { 51, 3,TabMsg,ActSeeChtRms ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cht_ShowChatRooms ,"comments" },
[ActSeeChtRms ] = { 51, 3,TabMsg,ActSeeChtRms ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cht_ShowChatRooms ,"comments" }, [ActSeeChtRms ] = { 51, 3,TabMsg,ActSeeChtRms ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cht_ShowChatRooms ,"comments" },
[ActSeeMsg ] = {1912, 4,TabMsg,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ShowRecMsgs ,"envelope" }, [ActSeeRcvMsg ] = { 3, 4,TabMsg,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ShowRecMsgs ,"envelope" },
[ActReqMaiUsr ] = {1772, 5,TabMsg,ActReqMaiUsr ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mai_ReqUsrsToListEmails ,"at" }, [ActReqMaiUsr ] = {1772, 5,TabMsg,ActReqMaiUsr ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mai_ReqUsrsToListEmails ,"at" },
// Actions not in menu: // Actions not in menu:
@ -1682,26 +1682,25 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// [ActCht ] = { 52,-1,TabUnk,ActSeeChtRms ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_NEW_TAB,Cht_OpenChatWindow ,NULL ,NULL}, // [ActCht ] = { 52,-1,TabUnk,ActSeeChtRms ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_NEW_TAB,Cht_OpenChatWindow ,NULL ,NULL},
[ActCht ] = { 52,-1,TabUnk,ActSeeChtRms ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_NEW_TAB,Cht_OpenChatWindow ,NULL ,NULL}, [ActCht ] = { 52,-1,TabUnk,ActSeeChtRms ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_NEW_TAB,Cht_OpenChatWindow ,NULL ,NULL},
[ActReqMsgUsr ] = { 26,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_FormMsgUsrs ,NULL}, [ActReqMsgUsr ] = { 26,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_FormMsgUsrs ,NULL},
[ActSeeRcvMsg ] = { 3,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ShowRecMsgs ,NULL}, [ActSeeSntMsg ] = { 70,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ShowSntMsgs ,NULL},
[ActSeeSntMsg ] = { 70,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ShowSntMsgs ,NULL},
[ActRcvMsgUsr ] = { 27,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Msg_RecMsgFromUsr ,NULL}, [ActRcvMsgUsr ] = { 27,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Msg_RecMsgFromUsr ,NULL},
[ActReqDelAllSntMsg ] = { 604,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ReqDelAllSntMsgs ,NULL}, [ActReqDelAllSntMsg ] = { 604,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ReqDelAllSntMsgs ,NULL},
[ActReqDelAllRcvMsg ] = { 593,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ReqDelAllRecMsgs ,NULL}, [ActReqDelAllRcvMsg ] = { 593,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ReqDelAllRecMsgs ,NULL},
[ActDelAllSntMsg ] = { 434,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelAllSntMsgs ,NULL}, [ActDelAllSntMsg ] = { 434,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelAllSntMsgs ,NULL},
[ActDelAllRcvMsg ] = { 436,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelAllRecMsgs ,NULL}, [ActDelAllRcvMsg ] = { 436,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelAllRecMsgs ,NULL},
[ActDelSntMsg ] = { 90,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelSntMsg ,NULL}, [ActDelSntMsg ] = { 90,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelSntMsg ,NULL},
[ActDelRcvMsg ] = { 64,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelRecMsg ,NULL}, [ActDelRcvMsg ] = { 64,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_DelRecMsg ,NULL},
[ActExpSntMsg ] = { 664,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ExpSntMsg ,NULL}, [ActExpSntMsg ] = { 664,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ExpSntMsg ,NULL},
[ActExpRcvMsg ] = { 663,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ExpRecMsg ,NULL}, [ActExpRcvMsg ] = { 663,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ExpRecMsg ,NULL},
[ActConSntMsg ] = {1020,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ConSntMsg ,NULL}, [ActConSntMsg ] = {1020,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ConSntMsg ,NULL},
[ActConRcvMsg ] = {1019,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ConRecMsg ,NULL}, [ActConRcvMsg ] = {1019,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ConRecMsg ,NULL},
[ActLstBanUsr ] = {1017,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ListBannedUsrs ,NULL}, [ActLstBanUsr ] = {1017,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_ListBannedUsrs ,NULL},
[ActBanUsrMsg ] = {1015,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_BanSenderWhenShowingMsgs ,NULL}, [ActBanUsrMsg ] = {1015,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_BanSenderWhenShowingMsgs ,NULL},
[ActUnbUsrMsg ] = {1016,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_UnbanSenderWhenShowingMsgs ,NULL}, [ActUnbUsrMsg ] = {1016,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_UnbanSenderWhenShowingMsgs ,NULL},
[ActUnbUsrLst ] = {1018,-1,TabUnk,ActSeeMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_UnbanSenderWhenListingUsrs ,NULL}, [ActUnbUsrLst ] = {1018,-1,TabUnk,ActSeeRcvMsg ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Msg_UnbanSenderWhenListingUsrs ,NULL},
[ActMaiUsr ] = { 100,-1,TabUnk,ActReqMaiUsr ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mai_GetSelectedUsrsAndListEmails,NULL}, [ActMaiUsr ] = { 100,-1,TabUnk,ActReqMaiUsr ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mai_GetSelectedUsrsAndListEmails,NULL},
@ -3726,7 +3725,6 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActValSetQst, // #1909 ActValSetQst, // #1909
ActInvSetQst, // #1910 ActInvSetQst, // #1910
ActChgRooMAC, // #1911 ActChgRooMAC, // #1911
ActSeeMsg, // #1912
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -64,7 +64,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_MAX_ACTION_COD 1912 #define Act_MAX_ACTION_COD 1911
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -1457,7 +1457,7 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActSeeAllNot (ActUnfSevTch + 2) #define ActSeeAllNot (ActUnfSevTch + 2)
#define ActSeeFor (ActUnfSevTch + 3) #define ActSeeFor (ActUnfSevTch + 3)
#define ActSeeChtRms (ActUnfSevTch + 4) #define ActSeeChtRms (ActUnfSevTch + 4)
#define ActSeeMsg (ActUnfSevTch + 5) #define ActSeeRcvMsg (ActUnfSevTch + 5)
#define ActReqMaiUsr (ActUnfSevTch + 6) #define ActReqMaiUsr (ActUnfSevTch + 6)
// Secondary actions // Secondary actions
#define ActWriAnn (ActUnfSevTch + 7) #define ActWriAnn (ActUnfSevTch + 7)
@ -1609,26 +1609,25 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActCht (ActUnfSevTch + 151) #define ActCht (ActUnfSevTch + 151)
#define ActReqMsgUsr (ActUnfSevTch + 152) #define ActReqMsgUsr (ActUnfSevTch + 152)
#define ActSeeRcvMsg (ActUnfSevTch + 153) #define ActSeeSntMsg (ActUnfSevTch + 153)
#define ActSeeSntMsg (ActUnfSevTch + 154)
#define ActRcvMsgUsr (ActUnfSevTch + 155) #define ActRcvMsgUsr (ActUnfSevTch + 154)
#define ActReqDelAllSntMsg (ActUnfSevTch + 156) #define ActReqDelAllSntMsg (ActUnfSevTch + 155)
#define ActReqDelAllRcvMsg (ActUnfSevTch + 157) #define ActReqDelAllRcvMsg (ActUnfSevTch + 156)
#define ActDelAllSntMsg (ActUnfSevTch + 158) #define ActDelAllSntMsg (ActUnfSevTch + 157)
#define ActDelAllRcvMsg (ActUnfSevTch + 159) #define ActDelAllRcvMsg (ActUnfSevTch + 158)
#define ActDelSntMsg (ActUnfSevTch + 160) #define ActDelSntMsg (ActUnfSevTch + 159)
#define ActDelRcvMsg (ActUnfSevTch + 161) #define ActDelRcvMsg (ActUnfSevTch + 160)
#define ActExpSntMsg (ActUnfSevTch + 162) #define ActExpSntMsg (ActUnfSevTch + 161)
#define ActExpRcvMsg (ActUnfSevTch + 163) #define ActExpRcvMsg (ActUnfSevTch + 162)
#define ActConSntMsg (ActUnfSevTch + 164) #define ActConSntMsg (ActUnfSevTch + 163)
#define ActConRcvMsg (ActUnfSevTch + 165) #define ActConRcvMsg (ActUnfSevTch + 164)
#define ActLstBanUsr (ActUnfSevTch + 166) #define ActLstBanUsr (ActUnfSevTch + 165)
#define ActBanUsrMsg (ActUnfSevTch + 167) #define ActBanUsrMsg (ActUnfSevTch + 166)
#define ActUnbUsrMsg (ActUnfSevTch + 168) #define ActUnbUsrMsg (ActUnfSevTch + 167)
#define ActUnbUsrLst (ActUnfSevTch + 169) #define ActUnbUsrLst (ActUnfSevTch + 168)
#define ActMaiUsr (ActUnfSevTch + 170) #define ActMaiUsr (ActUnfSevTch + 169)
/*****************************************************************************/ /*****************************************************************************/
/****************************** Analytics tab ********************************/ /****************************** Analytics tab ********************************/

View File

@ -79,7 +79,7 @@ static void Ann_CreateAnnouncement (unsigned Roles,const char *Subject,const cha
void Ann_ShowAllAnnouncements (void) void Ann_ShowAllAnnouncements (void)
{ {
extern const char *Hlp_MESSAGES_Announcements; extern const char *Hlp_COMMUNICATION_Announcements;
extern const char *Txt_Announcements; extern const char *Txt_Announcements;
extern const char *Txt_No_announcements; extern const char *Txt_No_announcements;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
@ -130,7 +130,7 @@ void Ann_ShowAllAnnouncements (void)
Box_BoxBegin ("550px",Txt_Announcements, Box_BoxBegin ("550px",Txt_Announcements,
ICanEdit ? Ann_PutIconToAddNewAnnouncement : ICanEdit ? Ann_PutIconToAddNewAnnouncement :
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Announcements,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Announcements,Box_NOT_CLOSABLE);
if (!NumAnnouncements) if (!NumAnnouncements)
Ale_ShowAlert (Ale_INFO,Txt_No_announcements); Ale_ShowAlert (Ale_INFO,Txt_No_announcements);
@ -395,7 +395,7 @@ static long Ann_GetParamAnnCod (void)
void Ann_ShowFormAnnouncement (void) void Ann_ShowFormAnnouncement (void)
{ {
extern const char *Hlp_MESSAGES_Announcements; extern const char *Hlp_COMMUNICATION_Announcements;
extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_New_announcement; extern const char *Txt_New_announcement;
extern const char *Txt_MSG_Subject; extern const char *Txt_MSG_Subject;
@ -409,7 +409,7 @@ void Ann_ShowFormAnnouncement (void)
/***** Begin box and table *****/ /***** Begin box and table *****/
Box_BoxTableBegin (NULL,Txt_New_announcement, Box_BoxTableBegin (NULL,Txt_New_announcement,
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Announcements,Box_NOT_CLOSABLE,2); Hlp_COMMUNICATION_Announcements,Box_NOT_CLOSABLE,2);
/***** Announcement subject and body *****/ /***** Announcement subject and body *****/
Ann_PutSubjectMessage ("Subject",Txt_MSG_Subject, 2); Ann_PutSubjectMessage ("Subject",Txt_MSG_Subject, 2);

View File

@ -555,7 +555,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 20.1.1 (2020-09-25)" #define Log_PLATFORM_VERSION "SWAD 20.2 (2020-09-26)"
#define CSS_FILE "swad20.1.1.css" #define CSS_FILE "swad20.1.1.css"
#define JS_FILE "swad19.254.js" #define JS_FILE "swad19.254.js"
/* /*
@ -573,6 +573,9 @@ TODO: Que al generar un examen s
TODO: Create module swad_test_result TODO: Create module swad_test_result
"sudo apt install webp" en Ubuntu, y "yum install libwebp libwebp-tools" en CentOS, para decodificar imágenes Web/ug reportado por Javier Fernández Baldomero. "sudo apt install webp" en Ubuntu, y "yum install libwebp libwebp-tools" en CentOS, para decodificar imágenes Web/ug reportado por Javier Fernández Baldomero.
Version 20.2: Sep 26, 2020 Removed unused action.
Contextual menu in box used to write a new message.
Changes in help links. (304440 lines)
Version 20.1.1: Sep 25, 2020 Old options related to messages removed from menu. (304394 lines) Version 20.1.1: Sep 25, 2020 Old options related to messages removed from menu. (304394 lines)
Copy the following icon to icon public directory: Copy the following icon to icon public directory:
sudo cp icon/iconset/awesome/comment.svg /var/www/html/swad/icon/iconset/awesome/ sudo cp icon/iconset/awesome/comment.svg /var/www/html/swad/icon/iconset/awesome/

View File

@ -989,7 +989,7 @@ void For_RemoveUsrFromReadThrs (long UsrCod)
static void For_ShowPostsOfAThread (struct For_Forums *Forums, static void For_ShowPostsOfAThread (struct For_Forums *Forums,
Ale_AlertType_t AlertType,const char *Message) Ale_AlertType_t AlertType,const char *Message)
{ {
extern const char *Hlp_MESSAGES_Forums_posts; extern const char *Hlp_COMMUNICATION_Forums_posts;
extern const char *Txt_Thread; extern const char *Txt_Thread;
struct For_Thread Thread; struct For_Thread Thread;
char LastSubject[Cns_MAX_BYTES_SUBJECT + 1]; char LastSubject[Cns_MAX_BYTES_SUBJECT + 1];
@ -1031,7 +1031,7 @@ static void For_ShowPostsOfAThread (struct For_Forums *Forums,
Txt_Thread,Thread.Subject); Txt_Thread,Thread.Subject);
Box_BoxBegin (NULL,FrameTitle, Box_BoxBegin (NULL,FrameTitle,
For_PutIconNewPost,Forums, For_PutIconNewPost,Forums,
Hlp_MESSAGES_Forums_posts,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Forums_posts,Box_NOT_CLOSABLE);
/***** Get posts of a thread from database *****/ /***** Get posts of a thread from database *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get posts of a thread", NumRows = DB_QuerySELECT (&mysql_res,"can not get posts of a thread",
@ -1564,7 +1564,7 @@ static void For_PutHiddenParamPstCod (long PstCod)
static void For_ShowForumList (struct For_Forums *Forums) static void For_ShowForumList (struct For_Forums *Forums)
{ {
extern const char *Hlp_MESSAGES_Forums; extern const char *Hlp_COMMUNICATION_Forums;
extern const char *Txt_Forums; extern const char *Txt_Forums;
bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]; bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS];
MYSQL_RES *mysql_resCtr; MYSQL_RES *mysql_resCtr;
@ -1596,7 +1596,7 @@ static void For_ShowForumList (struct For_Forums *Forums)
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Txt_Forums, Box_BoxBegin (NULL,Txt_Forums,
For_PutIconsForums,NULL, For_PutIconsForums,NULL,
Hlp_MESSAGES_Forums,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Forums,Box_NOT_CLOSABLE);
/***** Put a form to select which forums *****/ /***** Put a form to select which forums *****/
For_PutFormWhichForums (Forums); For_PutFormWhichForums (Forums);
@ -2428,7 +2428,7 @@ void For_ShowForumTheads (void)
static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums, static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums,
Ale_AlertType_t AlertType,const char *Message) Ale_AlertType_t AlertType,const char *Message)
{ {
extern const char *Hlp_MESSAGES_Forums_threads; extern const char *Hlp_COMMUNICATION_Forums_threads;
extern const char *Txt_Forum; extern const char *Txt_Forum;
extern const char *Txt_MSG_Subject; extern const char *Txt_MSG_Subject;
extern const char *Txt_FORUM_THREAD_HELP_ORDER[Dat_NUM_START_END_TIME]; extern const char *Txt_FORUM_THREAD_HELP_ORDER[Dat_NUM_START_END_TIME];
@ -2518,7 +2518,7 @@ static void For_ShowForumThreadsHighlightingOneThread (struct For_Forums *Forums
Txt_Forum,ForumName); Txt_Forum,ForumName);
Box_BoxBegin (NULL,FrameTitle, Box_BoxBegin (NULL,FrameTitle,
For_PutIconNewThread,Forums, For_PutIconNewThread,Forums,
Hlp_MESSAGES_Forums_threads,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Forums_threads,Box_NOT_CLOSABLE);
/***** List the threads *****/ /***** List the threads *****/
if (NumThrs) if (NumThrs)
@ -3847,8 +3847,8 @@ static void For_RestrictAccess (const struct For_Forums *Forums)
static void For_WriteFormForumPst (struct For_Forums *Forums, static void For_WriteFormForumPst (struct For_Forums *Forums,
bool IsReply,const char *Subject) bool IsReply,const char *Subject)
{ {
extern const char *Hlp_MESSAGES_Forums_new_post; extern const char *Hlp_COMMUNICATION_Forums_new_post;
extern const char *Hlp_MESSAGES_Forums_new_thread; extern const char *Hlp_COMMUNICATION_Forums_new_thread;
extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_New_post; extern const char *Txt_New_post;
extern const char *Txt_New_thread; extern const char *Txt_New_thread;
@ -3860,11 +3860,11 @@ static void For_WriteFormForumPst (struct For_Forums *Forums,
if (IsReply) if (IsReply)
Box_BoxBegin (NULL,Txt_New_post, Box_BoxBegin (NULL,Txt_New_post,
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Forums_new_post,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Forums_new_post,Box_NOT_CLOSABLE);
else else
Box_BoxBegin (NULL,Txt_New_thread, Box_BoxBegin (NULL,Txt_New_thread,
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Forums_new_thread,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Forums_new_thread,Box_NOT_CLOSABLE);
/***** Begin form *****/ /***** Begin form *****/
if (IsReply) // Form to write a reply to a post of an existing thread if (IsReply) // Form to write a reply to a post of an existing thread

View File

@ -157,6 +157,69 @@ const char *Hlp_START_Calendar =
"START.Calendar.en"; "START.Calendar.en";
#endif #endif
const char *Hlp_START_Notifications =
#if L==1
"START.Notifications.es";
#elif L==2
"START.Notifications.en";
#elif L==3
"START.Notifications.en";
#elif L==4
"START.Notifications.es";
#elif L==5
"START.Notifications.en";
#elif L==6
"START.Notifications.es";
#elif L==7
"START.Notifications.en";
#elif L==8
"START.Notifications.en";
#elif L==9
"START.Notifications.en";
#endif
const char *Hlp_START_Domains =
#if L==1
"START.Domains.es";
#elif L==2
"START.Domains.en";
#elif L==3
"START.Domains.en";
#elif L==4
"START.Domains.es";
#elif L==5
"START.Domains.en";
#elif L==6
"START.Domains.es";
#elif L==7
"START.Domains.en";
#elif L==8
"START.Domains.en";
#elif L==9
"START.Domains.en";
#endif
const char *Hlp_START_Domains_edit =
#if L==1
"START.Domains.es#editar";
#elif L==2
"START.Domains.en#edit";
#elif L==3
"START.Domains.en#edit";
#elif L==4
"START.Domains.es#editar";
#elif L==5
"START.Domains.en#edit";
#elif L==6
"START.Domains.es#editar";
#elif L==7
"START.Domains.en#edit";
#elif L==8
"START.Domains.en#edit";
#elif L==9
"START.Domains.en#edit";
#endif
/***** SYSTEM tab *****/ /***** SYSTEM tab *****/
const char *Hlp_SYSTEM_Information = const char *Hlp_SYSTEM_Information =
@ -2486,342 +2549,279 @@ const char *Hlp_USERS_Connected_last_clicks =
"USERS.Connected.en#last-clicks"; "USERS.Connected.en#last-clicks";
#endif #endif
/***** MESSAGES tab *****/ /***** COMMUNICATION tab *****/
const char *Hlp_START_Notifications = const char *Hlp_COMMUNICATION_Announcements =
#if L==1 #if L==1
"MESSAGES.Notifications.es"; "COMMUNICATION.Announcements.es";
#elif L==2 #elif L==2
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#elif L==3 #elif L==3
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#elif L==4 #elif L==4
"MESSAGES.Notifications.es"; "COMMUNICATION.Announcements.es";
#elif L==5 #elif L==5
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#elif L==6 #elif L==6
"MESSAGES.Notifications.es"; "COMMUNICATION.Announcements.es";
#elif L==7 #elif L==7
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#elif L==8 #elif L==8
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#elif L==9 #elif L==9
"MESSAGES.Notifications.en"; "COMMUNICATION.Announcements.en";
#endif #endif
const char *Hlp_START_Domains = const char *Hlp_COMMUNICATION_Notices =
#if L==1 #if L==1
"MESSAGES.Domains.es"; "COMMUNICATION.Notices.es";
#elif L==2 #elif L==2
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#elif L==3 #elif L==3
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#elif L==4 #elif L==4
"MESSAGES.Domains.es"; "COMMUNICATION.Notices.es";
#elif L==5 #elif L==5
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#elif L==6 #elif L==6
"MESSAGES.Domains.es"; "COMMUNICATION.Notices.es";
#elif L==7 #elif L==7
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#elif L==8 #elif L==8
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#elif L==9 #elif L==9
"MESSAGES.Domains.en"; "COMMUNICATION.Notices.en";
#endif #endif
const char *Hlp_START_Domains_edit = const char *Hlp_COMMUNICATION_Forums =
#if L==1 #if L==1
"MESSAGES.Domains.es#editar"; "COMMUNICATION.Forums.es";
#elif L==2 #elif L==2
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#elif L==3 #elif L==3
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#elif L==4 #elif L==4
"MESSAGES.Domains.es#editar"; "COMMUNICATION.Forums.es";
#elif L==5 #elif L==5
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#elif L==6 #elif L==6
"MESSAGES.Domains.es#editar"; "COMMUNICATION.Forums.es";
#elif L==7 #elif L==7
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#elif L==8 #elif L==8
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#elif L==9 #elif L==9
"MESSAGES.Domains.en#edit"; "COMMUNICATION.Forums.en";
#endif #endif
const char *Hlp_MESSAGES_Announcements = const char *Hlp_COMMUNICATION_Forums_threads =
#if L==1 #if L==1
"MESSAGES.Announcements.es"; "COMMUNICATION.Forums.es#discusiones";
#elif L==2 #elif L==2
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#elif L==3 #elif L==3
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#elif L==4 #elif L==4
"MESSAGES.Announcements.es"; "COMMUNICATION.Forums.es#discusiones";
#elif L==5 #elif L==5
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#elif L==6 #elif L==6
"MESSAGES.Announcements.es"; "COMMUNICATION.Forums.es#discusiones";
#elif L==7 #elif L==7
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#elif L==8 #elif L==8
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#elif L==9 #elif L==9
"MESSAGES.Announcements.en"; "COMMUNICATION.Forums.en#threads";
#endif #endif
const char *Hlp_MESSAGES_Notices = const char *Hlp_COMMUNICATION_Forums_new_thread =
#if L==1 #if L==1
"MESSAGES.Notices.es"; "COMMUNICATION.Forums.es#nueva-discusi%C3%B3n";
#elif L==2 #elif L==2
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#elif L==3 #elif L==3
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#elif L==4 #elif L==4
"MESSAGES.Notices.es"; "COMMUNICATION.Forums.es#nueva-discusi%C3%B3n";
#elif L==5 #elif L==5
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#elif L==6 #elif L==6
"MESSAGES.Notices.es"; "COMMUNICATION.Forums.es#nueva-discusi%C3%B3n";
#elif L==7 #elif L==7
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#elif L==8 #elif L==8
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#elif L==9 #elif L==9
"MESSAGES.Notices.en"; "COMMUNICATION.Forums.en#new-thread";
#endif #endif
const char *Hlp_MESSAGES_Forums = const char *Hlp_COMMUNICATION_Forums_posts =
#if L==1 #if L==1
"MESSAGES.Forums.es"; "COMMUNICATION.Forums.es#comentarios";
#elif L==2 #elif L==2
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#elif L==3 #elif L==3
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#elif L==4 #elif L==4
"MESSAGES.Forums.es"; "COMMUNICATION.Forums.es#comentarios";
#elif L==5 #elif L==5
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#elif L==6 #elif L==6
"MESSAGES.Forums.es"; "COMMUNICATION.Forums.es#comentarios";
#elif L==7 #elif L==7
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#elif L==8 #elif L==8
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#elif L==9 #elif L==9
"MESSAGES.Forums.en"; "COMMUNICATION.Forums.en#posts";
#endif #endif
const char *Hlp_MESSAGES_Forums_threads = const char *Hlp_COMMUNICATION_Forums_new_post =
#if L==1 #if L==1
"MESSAGES.Forums.es#discusiones"; "COMMUNICATION.Forums.es#nuevo-comentario";
#elif L==2 #elif L==2
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#elif L==3 #elif L==3
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#elif L==4 #elif L==4
"MESSAGES.Forums.es#discusiones"; "COMMUNICATION.Forums.es#nuevo-comentario";
#elif L==5 #elif L==5
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#elif L==6 #elif L==6
"MESSAGES.Forums.es#discusiones"; "COMMUNICATION.Forums.es#nuevo-comentario";
#elif L==7 #elif L==7
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#elif L==8 #elif L==8
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#elif L==9 #elif L==9
"MESSAGES.Forums.en#threads"; "COMMUNICATION.Forums.en#new-post";
#endif #endif
const char *Hlp_MESSAGES_Forums_new_thread = const char *Hlp_COMMUNICATION_Messages_write =
#if L==1 #if L==1
"MESSAGES.Forums.es#nueva-discusi%C3%B3n"; "COMMUNICATION.Write.es";
#elif L==2 #elif L==2
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#elif L==3 #elif L==3
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#elif L==4 #elif L==4
"MESSAGES.Forums.es#nueva-discusi%C3%B3n"; "COMMUNICATION.Write.es";
#elif L==5 #elif L==5
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#elif L==6 #elif L==6
"MESSAGES.Forums.es#nueva-discusi%C3%B3n"; "COMMUNICATION.Write.es";
#elif L==7 #elif L==7
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#elif L==8 #elif L==8
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#elif L==9 #elif L==9
"MESSAGES.Forums.en#new-thread"; "COMMUNICATION.Write.en";
#endif #endif
const char *Hlp_MESSAGES_Forums_posts = const char *Hlp_COMMUNICATION_Messages_received =
#if L==1 #if L==1
"MESSAGES.Forums.es#comentarios"; "COMMUNICATION.Received.es";
#elif L==2 #elif L==2
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#elif L==3 #elif L==3
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#elif L==4 #elif L==4
"MESSAGES.Forums.es#comentarios"; "COMMUNICATION.Received.es";
#elif L==5 #elif L==5
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#elif L==6 #elif L==6
"MESSAGES.Forums.es#comentarios"; "COMMUNICATION.Received.es";
#elif L==7 #elif L==7
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#elif L==8 #elif L==8
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#elif L==9 #elif L==9
"MESSAGES.Forums.en#posts"; "COMMUNICATION.Received.en";
#endif #endif
const char *Hlp_MESSAGES_Forums_new_post = const char *Hlp_COMMUNICATION_Messages_received_filter =
#if L==1 #if L==1
"MESSAGES.Forums.es#nuevo-comentario"; "COMMUNICATION.Received.es#filtro";
#elif L==2 #elif L==2
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#elif L==3 #elif L==3
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#elif L==4 #elif L==4
"MESSAGES.Forums.es#nuevo-comentario"; "COMMUNICATION.Received.es#filtro";
#elif L==5 #elif L==5
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#elif L==6 #elif L==6
"MESSAGES.Forums.es#nuevo-comentario"; "COMMUNICATION.Received.es#filtro";
#elif L==7 #elif L==7
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#elif L==8 #elif L==8
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#elif L==9 #elif L==9
"MESSAGES.Forums.en#new-post"; "COMMUNICATION.Received.en#filter";
#endif #endif
const char *Hlp_MESSAGES_Write = const char *Hlp_COMMUNICATION_Messages_sent =
#if L==1 #if L==1
"MESSAGES.Write.es"; "COMMUNICATION.Sent.es";
#elif L==2 #elif L==2
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#elif L==3 #elif L==3
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#elif L==4 #elif L==4
"MESSAGES.Write.es"; "COMMUNICATION.Sent.es";
#elif L==5 #elif L==5
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#elif L==6 #elif L==6
"MESSAGES.Write.es"; "COMMUNICATION.Sent.es";
#elif L==7 #elif L==7
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#elif L==8 #elif L==8
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#elif L==9 #elif L==9
"MESSAGES.Write.en"; "COMMUNICATION.Sent.en";
#endif #endif
const char *Hlp_MESSAGES_Received = const char *Hlp_COMMUNICATION_Messages_sent_filter =
#if L==1 #if L==1
"MESSAGES.Received.es"; "COMMUNICATION.Sent.es#filtro";
#elif L==2 #elif L==2
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#elif L==3 #elif L==3
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#elif L==4 #elif L==4
"MESSAGES.Received.es"; "COMMUNICATION.Sent.es#filtro";
#elif L==5 #elif L==5
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#elif L==6 #elif L==6
"MESSAGES.Received.es"; "COMMUNICATION.Sent.es#filtro";
#elif L==7 #elif L==7
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#elif L==8 #elif L==8
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#elif L==9 #elif L==9
"MESSAGES.Received.en"; "COMMUNICATION.Sent.en#filter";
#endif #endif
const char *Hlp_MESSAGES_Received_filter = const char *Hlp_COMMUNICATION_Email =
#if L==1 #if L==1
"MESSAGES.Received.es#filtro"; "COMMUNICATION.Email.es";
#elif L==2 #elif L==2
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#elif L==3 #elif L==3
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#elif L==4 #elif L==4
"MESSAGES.Received.es#filtro"; "COMMUNICATION.Email.es";
#elif L==5 #elif L==5
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#elif L==6 #elif L==6
"MESSAGES.Received.es#filtro"; "COMMUNICATION.Email.es";
#elif L==7 #elif L==7
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#elif L==8 #elif L==8
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#elif L==9 #elif L==9
"MESSAGES.Received.en#filter"; "COMMUNICATION.Email.en";
#endif
const char *Hlp_MESSAGES_Sent =
#if L==1
"MESSAGES.Sent.es";
#elif L==2
"MESSAGES.Sent.en";
#elif L==3
"MESSAGES.Sent.en";
#elif L==4
"MESSAGES.Sent.es";
#elif L==5
"MESSAGES.Sent.en";
#elif L==6
"MESSAGES.Sent.es";
#elif L==7
"MESSAGES.Sent.en";
#elif L==8
"MESSAGES.Sent.en";
#elif L==9
"MESSAGES.Sent.en";
#endif
const char *Hlp_MESSAGES_Sent_filter =
#if L==1
"MESSAGES.Sent.es#filtro";
#elif L==2
"MESSAGES.Sent.en#filter";
#elif L==3
"MESSAGES.Sent.en#filter";
#elif L==4
"MESSAGES.Sent.es#filtro";
#elif L==5
"MESSAGES.Sent.en#filter";
#elif L==6
"MESSAGES.Sent.es#filtro";
#elif L==7
"MESSAGES.Sent.en#filter";
#elif L==8
"MESSAGES.Sent.en#filter";
#elif L==9
"MESSAGES.Sent.en#filter";
#endif
const char *Hlp_MESSAGES_Email =
#if L==1
"MESSAGES.Email.es";
#elif L==2
"MESSAGES.Email.en";
#elif L==3
"MESSAGES.Email.en";
#elif L==4
"MESSAGES.Email.es";
#elif L==5
"MESSAGES.Email.en";
#elif L==6
"MESSAGES.Email.es";
#elif L==7
"MESSAGES.Email.en";
#elif L==8
"MESSAGES.Email.en";
#elif L==9
"MESSAGES.Email.en";
#endif #endif
/***** ANALYTICS tab *****/ /***** ANALYTICS tab *****/

View File

@ -879,7 +879,7 @@ void Mai_ReqUsrsToListEmails (void)
static void Mai_PutFormToSelectUsrsToListEmails (__attribute__((unused)) void *Args) static void Mai_PutFormToSelectUsrsToListEmails (__attribute__((unused)) void *Args)
{ {
extern const char *Hlp_MESSAGES_Email; extern const char *Hlp_COMMUNICATION_Email;
extern const char *Txt_Email; extern const char *Txt_Email;
extern const char *Txt_View_email_addresses; extern const char *Txt_View_email_addresses;
@ -888,7 +888,7 @@ static void Mai_PutFormToSelectUsrsToListEmails (__attribute__((unused)) void *A
ActMaiUsr, ActMaiUsr,
NULL,NULL, NULL,NULL,
Txt_Email, Txt_Email,
Hlp_MESSAGES_Email, Hlp_COMMUNICATION_Email,
Txt_View_email_addresses, Txt_View_email_addresses,
false); // Do not put form with date range false); // Do not put form with date range
} }
@ -912,7 +912,7 @@ void Mai_GetSelectedUsrsAndListEmails (void)
static void Mai_ListEmails (__attribute__((unused)) void *Args) static void Mai_ListEmails (__attribute__((unused)) void *Args)
{ {
extern const char *Hlp_MESSAGES_Email; extern const char *Hlp_COMMUNICATION_Email;
extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES]; extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES];
extern const char *Txt_Email_addresses; extern const char *Txt_Email_addresses;
extern const char *Txt_X_users_who_have_email; extern const char *Txt_X_users_who_have_email;
@ -928,7 +928,7 @@ static void Mai_ListEmails (__attribute__((unused)) void *Args)
/***** Start the box used to list the emails *****/ /***** Start the box used to list the emails *****/
Box_BoxBegin (NULL,Txt_Email_addresses, Box_BoxBegin (NULL,Txt_Email_addresses,
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Email,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Email,Box_NOT_CLOSABLE);
/***** Start list with users' email addresses *****/ /***** Start list with users' email addresses *****/
HTM_DIV_Begin ("class=\"DAT_SMALL CM\""); HTM_DIV_Begin ("class=\"DAT_SMALL CM\"");

View File

@ -152,7 +152,7 @@ static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_
[ 1] = ActSeeAllNot, [ 1] = ActSeeAllNot,
[ 2] = ActSeeFor, [ 2] = ActSeeFor,
[ 3] = ActSeeChtRms, [ 3] = ActSeeChtRms,
[ 4] = ActSeeMsg, [ 4] = ActSeeRcvMsg,
[ 5] = ActReqMaiUsr, [ 5] = ActReqMaiUsr,
}, },
[TabAna] = { [TabAna] = {

View File

@ -75,8 +75,9 @@ extern struct Globals Gbl;
static const Pag_WhatPaginate_t Msg_WhatPaginate[Msg_NUM_TYPES_OF_MSGS] = static const Pag_WhatPaginate_t Msg_WhatPaginate[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Pag_MESSAGES_RECEIVED, [Msg_WRITING ] = Pag_NONE,
[Msg_MESSAGES_SENT ] = Pag_MESSAGES_SENT, [Msg_RECEIVED] = Pag_MESSAGES_RECEIVED,
[Msg_SENT ] = Pag_MESSAGES_SENT,
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -236,7 +237,7 @@ void Msg_FormMsgUsrs (void)
static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages, static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages,
char Content[Cns_MAX_BYTES_LONG_TEXT + 1]) char Content[Cns_MAX_BYTES_LONG_TEXT + 1])
{ {
extern const char *Hlp_MESSAGES_Write; extern const char *Hlp_COMMUNICATION_Messages_write;
extern const char *The_ClassFormInBox[The_NUM_THEMES]; extern const char *The_ClassFormInBox[The_NUM_THEMES];
extern const char *Txt_Reply_message; extern const char *Txt_Reply_message;
extern const char *Txt_New_message; extern const char *Txt_New_message;
@ -290,8 +291,8 @@ static void Msg_PutFormMsgUsrs (struct Msg_Messages *Messages,
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Messages->Reply.IsReply ? Txt_Reply_message : Box_BoxBegin (NULL,Messages->Reply.IsReply ? Txt_Reply_message :
Txt_New_message, Txt_New_message,
NULL,NULL, Msg_PutIconsListMsgs,Messages,
Hlp_MESSAGES_Write,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Messages_write,Box_NOT_CLOSABLE);
if (Messages->ShowOnlyOneRecipient) if (Messages->ShowOnlyOneRecipient)
/***** Form to show several potential recipients *****/ /***** Form to show several potential recipients *****/
@ -989,7 +990,7 @@ void Msg_ReqDelAllRecMsgs (void)
} }
/* Show received messages again */ /* Show received messages again */
Messages.TypeOfMessages = Msg_MESSAGES_RECEIVED; Messages.TypeOfMessages = Msg_RECEIVED;
Msg_ShowSentOrReceivedMessages (&Messages); Msg_ShowSentOrReceivedMessages (&Messages);
/* End alert */ /* End alert */
@ -1032,7 +1033,7 @@ void Msg_ReqDelAllSntMsgs (void)
Messages.FilterCrsShrtName); Messages.FilterCrsShrtName);
/* Show sent messages again */ /* Show sent messages again */
Messages.TypeOfMessages = Msg_MESSAGES_SENT; Messages.TypeOfMessages = Msg_SENT;
Msg_ShowSentOrReceivedMessages (&Messages); Msg_ShowSentOrReceivedMessages (&Messages);
/* End alert */ /* End alert */
@ -1063,7 +1064,7 @@ void Msg_DelAllRecMsgs (void)
/***** Delete messages *****/ /***** Delete messages *****/
NumMsgs = Msg_DelSomeRecOrSntMsgsUsr (&Messages, NumMsgs = Msg_DelSomeRecOrSntMsgsUsr (&Messages,
Msg_MESSAGES_RECEIVED, Msg_RECEIVED,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
FilterFromToSubquery); FilterFromToSubquery);
Msg_ShowNumMsgsDeleted (NumMsgs); Msg_ShowNumMsgsDeleted (NumMsgs);
@ -1091,7 +1092,7 @@ void Msg_DelAllSntMsgs (void)
/***** Delete messages *****/ /***** Delete messages *****/
NumMsgs = Msg_DelSomeRecOrSntMsgsUsr (&Messages, NumMsgs = Msg_DelSomeRecOrSntMsgsUsr (&Messages,
Msg_MESSAGES_SENT, Msg_SENT,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
FilterFromToSubquery); FilterFromToSubquery);
Msg_ShowNumMsgsDeleted (NumMsgs); Msg_ShowNumMsgsDeleted (NumMsgs);
@ -1470,10 +1471,10 @@ static unsigned long Msg_DelSomeRecOrSntMsgsUsr (const struct Msg_Messages *Mess
Lay_ShowErrorAndExit ("Wrong code of message."); Lay_ShowErrorAndExit ("Wrong code of message.");
switch (TypeOfMessages) switch (TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
Msg_MoveReceivedMsgToDeleted (MsgCod,UsrCod); Msg_MoveReceivedMsgToDeleted (MsgCod,UsrCod);
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
Msg_MoveSentMsgToDeleted (MsgCod); Msg_MoveSentMsgToDeleted (MsgCod);
break; break;
default: default:
@ -1774,7 +1775,7 @@ void Msg_ShowSntMsgs (void)
Msg_ResetMessages (&Messages); Msg_ResetMessages (&Messages);
/***** Show the sent messages *****/ /***** Show the sent messages *****/
Messages.TypeOfMessages = Msg_MESSAGES_SENT; Messages.TypeOfMessages = Msg_SENT;
Msg_ShowSentOrReceivedMessages (&Messages); Msg_ShowSentOrReceivedMessages (&Messages);
} }
@ -1798,7 +1799,7 @@ void Msg_ShowRecMsgs (void)
} }
/***** Show the received messages *****/ /***** Show the received messages *****/
Messages.TypeOfMessages = Msg_MESSAGES_RECEIVED; Messages.TypeOfMessages = Msg_RECEIVED;
Msg_ShowSentOrReceivedMessages (&Messages); Msg_ShowSentOrReceivedMessages (&Messages);
} }
@ -1808,10 +1809,10 @@ void Msg_ShowRecMsgs (void)
static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages) static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages)
{ {
extern const char *Hlp_MESSAGES_Received; extern const char *Hlp_COMMUNICATION_Messages_received;
extern const char *Hlp_MESSAGES_Received_filter; extern const char *Hlp_COMMUNICATION_Messages_received_filter;
extern const char *Hlp_MESSAGES_Sent; extern const char *Hlp_COMMUNICATION_Messages_sent;
extern const char *Hlp_MESSAGES_Sent_filter; extern const char *Hlp_COMMUNICATION_Messages_sent_filter;
extern const char *The_ClassFormLinkInBoxBold[The_NUM_THEMES]; extern const char *The_ClassFormLinkInBoxBold[The_NUM_THEMES];
extern const char *Txt_Filter; extern const char *Txt_Filter;
extern const char *Txt_Update_messages; extern const char *Txt_Update_messages;
@ -1821,29 +1822,33 @@ static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages)
unsigned long NumRow; unsigned long NumRow;
unsigned long NumRows; unsigned long NumRows;
char *NumMsgsStr; char *NumMsgsStr;
unsigned long NumMsg = 0; // Initialized to avoid warning unsigned long NumMsg;
unsigned NumUnreadMsgs = 0; // Initialized to avoid warning unsigned NumUnreadMsgs;
struct Pagination Pagination; struct Pagination Pagination;
long MsgCod; long MsgCod;
static const Act_Action_t ActionSee[Msg_NUM_TYPES_OF_MSGS] = static const Act_Action_t ActionSee[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = ActSeeRcvMsg, [Msg_WRITING ] = ActUnk,
[Msg_MESSAGES_SENT ] = ActSeeSntMsg, [Msg_RECEIVED] = ActSeeRcvMsg,
[Msg_SENT ] = ActSeeSntMsg,
}; };
static const Pag_WhatPaginate_t WhatPaginate[Msg_NUM_TYPES_OF_MSGS] = static const Pag_WhatPaginate_t WhatPaginate[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Pag_MESSAGES_RECEIVED, [Msg_WRITING ] = Pag_NONE,
[Msg_MESSAGES_SENT ] = Pag_MESSAGES_SENT, [Msg_RECEIVED] = Pag_MESSAGES_RECEIVED,
[Msg_SENT ] = Pag_MESSAGES_SENT,
}; };
const char *Help[Msg_NUM_TYPES_OF_MSGS] = const char *Help[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Hlp_MESSAGES_Received, [Msg_WRITING ] = NULL,
[Msg_MESSAGES_SENT ] = Hlp_MESSAGES_Sent, [Msg_RECEIVED] = Hlp_COMMUNICATION_Messages_received,
[Msg_SENT ] = Hlp_COMMUNICATION_Messages_sent,
}; };
const char *HelpFilter[Msg_NUM_TYPES_OF_MSGS] = const char *HelpFilter[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Hlp_MESSAGES_Received_filter, [Msg_WRITING ] = NULL,
[Msg_MESSAGES_SENT ] = Hlp_MESSAGES_Sent_filter, [Msg_RECEIVED] = Hlp_COMMUNICATION_Messages_received_filter,
[Msg_SENT ] = Hlp_COMMUNICATION_Messages_sent_filter,
}; };
/***** Get the page number *****/ /***** Get the page number *****/
@ -1859,14 +1864,17 @@ static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages)
/***** Get number of unread messages *****/ /***** Get number of unread messages *****/
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
Messages->ShowOnlyUnreadMsgs = Msg_GetParamOnlyUnreadMsgs (); Messages->ShowOnlyUnreadMsgs = Msg_GetParamOnlyUnreadMsgs ();
NumUnreadMsgs = Msg_GetNumUnreadMsgs (Messages, NumUnreadMsgs = Msg_GetNumUnreadMsgs (Messages,
FilterFromToSubquery); FilterFromToSubquery);
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
NumUnreadMsgs = 0; NumUnreadMsgs = 0;
break; break;
default:
NumUnreadMsgs = 0;
break;
} }
/***** Get messages from database *****/ /***** Get messages from database *****/
@ -1894,7 +1902,7 @@ static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages)
HTM_DIV_Begin ("class=\"CM\""); HTM_DIV_Begin ("class=\"CM\"");
Msg_ShowFormSelectCourseSentOrRecMsgs (Messages); Msg_ShowFormSelectCourseSentOrRecMsgs (Messages);
if (Messages->TypeOfMessages == Msg_MESSAGES_RECEIVED) if (Messages->TypeOfMessages == Msg_RECEIVED)
Msg_ShowFormToShowOnlyUnreadMessages (Messages); Msg_ShowFormToShowOnlyUnreadMessages (Messages);
HTM_DIV_End (); HTM_DIV_End ();
Msg_ShowFormToFilterMsgs (Messages); Msg_ShowFormToFilterMsgs (Messages);
@ -1954,7 +1962,7 @@ static void Msg_ShowSentOrReceivedMessages (struct Msg_Messages *Messages)
HTM_TABLE_BeginWidePadding (2); HTM_TABLE_BeginWidePadding (2);
mysql_data_seek (mysql_res,(my_ulonglong) (Pagination.FirstItemVisible - 1)); mysql_data_seek (mysql_res,(my_ulonglong) (Pagination.FirstItemVisible - 1));
for (NumRow = Pagination.FirstItemVisible; for (NumRow = Pagination.FirstItemVisible;
NumRow <= Pagination.LastItemVisible; NumRow <= Pagination.LastItemVisible;
NumRow++) NumRow++)
{ {
@ -2023,7 +2031,7 @@ static unsigned long Msg_GetSentOrReceivedMsgs (const struct Msg_Messages *Messa
if (Messages->FilterCrsCod > 0) // If origin course selected if (Messages->FilterCrsCod > 0) // If origin course selected
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
StrUnreadMsg = (Messages->ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" : StrUnreadMsg = (Messages->ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" :
""); "");
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
@ -2063,7 +2071,7 @@ static unsigned long Msg_GetSentOrReceivedMsgs (const struct Msg_Messages *Messa
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
{ {
if (asprintf (&SubQuery,"(SELECT DISTINCT msg_snt.MsgCod" if (asprintf (&SubQuery,"(SELECT DISTINCT msg_snt.MsgCod"
@ -2098,7 +2106,7 @@ static unsigned long Msg_GetSentOrReceivedMsgs (const struct Msg_Messages *Messa
else // If no origin course selected else // If no origin course selected
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
{ {
StrUnreadMsg = (Messages->ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" : StrUnreadMsg = (Messages->ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" :
@ -2129,7 +2137,7 @@ static unsigned long Msg_GetSentOrReceivedMsgs (const struct Msg_Messages *Messa
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
{ {
if (asprintf (&SubQuery,"(SELECT msg_snt.MsgCod" if (asprintf (&SubQuery,"(SELECT msg_snt.MsgCod"
@ -2566,7 +2574,7 @@ static void Msg_SetNumMsgsStr (const struct Msg_Messages *Messages,
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
if (Messages->NumMsgs == 1) if (Messages->NumMsgs == 1)
{ {
if (NumUnreadMsgs) if (NumUnreadMsgs)
@ -2605,7 +2613,7 @@ static void Msg_SetNumMsgsStr (const struct Msg_Messages *Messages,
} }
} }
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
if (Messages->NumMsgs == 1) if (Messages->NumMsgs == 1)
{ {
if (asprintf (NumMsgsStr,"1 %s",Txt_message_sent) < 0) if (asprintf (NumMsgsStr,"1 %s",Txt_message_sent) < 0)
@ -2618,6 +2626,8 @@ static void Msg_SetNumMsgsStr (const struct Msg_Messages *Messages,
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
} }
break; break;
default:
break;
} }
} }
@ -2632,31 +2642,66 @@ static void Msg_PutIconsListMsgs (void *Messages)
extern const char *Txt_MSGS_Write; extern const char *Txt_MSGS_Write;
static const Act_Action_t ActionReqDelAllMsg[Msg_NUM_TYPES_OF_MSGS] = static const Act_Action_t ActionReqDelAllMsg[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = ActReqDelAllRcvMsg, [Msg_WRITING ] = ActUnk,
[Msg_MESSAGES_SENT ] = ActReqDelAllSntMsg, [Msg_RECEIVED] = ActReqDelAllRcvMsg,
[Msg_SENT ] = ActReqDelAllSntMsg,
}; };
if (Messages) if (Messages)
{ {
/***** Put icon to write a new message *****/ /***** Put icon to write a new message *****/
Lay_PutContextualLinkOnlyIcon (ActReqMsgUsr,NULL, switch (((struct Msg_Messages *) Messages)->TypeOfMessages)
Msg_PutHiddenParamsMsgsFilters,Messages, {
"marker.svg", case Msg_RECEIVED:
Txt_MSGS_Write); case Msg_SENT:
Lay_PutContextualLinkOnlyIcon (ActReqMsgUsr,NULL,
Msg_PutHiddenParamsMsgsFilters,Messages,
"marker.svg",
Txt_MSGS_Write);
break;
default:
break;
}
/***** Put icon to see received/sent messages *****/ /***** Put icon to see received messages *****/
Lay_PutContextualLinkOnlyIcon (ActSeeRcvMsg,NULL, switch (((struct Msg_Messages *) Messages)->TypeOfMessages)
Msg_PutHiddenParamsMsgsFilters,Messages, {
"inbox.svg", case Msg_WRITING:
Txt_MSGS_Received); case Msg_SENT:
Lay_PutContextualLinkOnlyIcon (ActSeeSntMsg,NULL, Lay_PutContextualLinkOnlyIcon (ActSeeRcvMsg,NULL,
Msg_PutHiddenParamsMsgsFilters,Messages, Msg_PutHiddenParamsMsgsFilters,Messages,
"share.svg", "inbox.svg",
Txt_MSGS_Sent); Txt_MSGS_Received);
break;
default:
break;
}
/***** Put icon to see sent messages *****/
switch (((struct Msg_Messages *) Messages)->TypeOfMessages)
{
case Msg_WRITING:
case Msg_RECEIVED:
Lay_PutContextualLinkOnlyIcon (ActSeeSntMsg,NULL,
Msg_PutHiddenParamsMsgsFilters,Messages,
"share.svg",
Txt_MSGS_Sent);
break;
default:
break;
}
/***** Put icon to remove messages *****/ /***** Put icon to remove messages *****/
Ico_PutContextualIconToRemove (ActionReqDelAllMsg[((struct Msg_Messages *) Messages)->TypeOfMessages], switch (((struct Msg_Messages *) Messages)->TypeOfMessages)
Msg_PutHiddenParamsMsgsFilters,Messages); {
case Msg_RECEIVED:
case Msg_SENT:
Ico_PutContextualIconToRemove (ActionReqDelAllMsg[((struct Msg_Messages *) Messages)->TypeOfMessages],
Msg_PutHiddenParamsMsgsFilters,Messages);
break;
default:
break;
}
/***** Put icon to show a figure *****/ /***** Put icon to show a figure *****/
Fig_PutIconToShowFigure (Fig_MESSAGES); Fig_PutIconToShowFigure (Fig_MESSAGES);
@ -2712,7 +2757,7 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
/***** Get distinct courses in my messages from database *****/ /***** Get distinct courses in my messages from database *****/
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses" NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses"
" in your messages","" " in your messages",""
"SELECT DISTINCT courses.CrsCod,courses.ShortName" "SELECT DISTINCT courses.CrsCod,courses.ShortName"
@ -2723,7 +2768,7 @@ static void Msg_GetDistinctCoursesInMyMessages (struct Msg_Messages *Messages)
" ORDER BY courses.ShortName", " ORDER BY courses.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses" NumRows = DB_QuerySELECT (&mysql_res,"can not get distinct courses"
" in your messages", " in your messages",
"SELECT DISTINCT courses.CrsCod,courses.ShortName" "SELECT DISTINCT courses.CrsCod,courses.ShortName"
@ -2773,8 +2818,9 @@ static void Msg_ShowFormSelectCourseSentOrRecMsgs (const struct Msg_Messages *Me
unsigned NumOriginCrs; unsigned NumOriginCrs;
const char *TxtSelector[Msg_NUM_TYPES_OF_MSGS] = const char *TxtSelector[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Txt_Messages_received_from_A_COURSE, [Msg_WRITING ] = NULL,
[Msg_MESSAGES_SENT ] = Txt_Messages_sent_from_A_COURSE [Msg_RECEIVED] = Txt_Messages_received_from_A_COURSE,
[Msg_SENT ] = Txt_Messages_sent_from_A_COURSE
}; };
/***** Course selection *****/ /***** Course selection *****/
@ -2809,8 +2855,9 @@ static void Msg_ShowFormToFilterMsgs (const struct Msg_Messages *Messages)
extern const char *Txt_MSG_Content; extern const char *Txt_MSG_Content;
const char *TxtFromTo[Msg_NUM_TYPES_OF_MSGS] = const char *TxtFromTo[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = Txt_MSG_From, [Msg_WRITING ] = NULL,
[Msg_MESSAGES_SENT ] = Txt_MSG_To [Msg_RECEIVED] = Txt_MSG_From,
[Msg_SENT ] = Txt_MSG_To
}; };
/***** Begin table *****/ /***** Begin table *****/
@ -3075,8 +3122,9 @@ static void Msg_ShowASentOrReceivedMessage (struct Msg_Messages *Messages,
extern const char *Txt_MSG_Content; extern const char *Txt_MSG_Content;
static const Act_Action_t ActionDelMsg[Msg_NUM_TYPES_OF_MSGS] = static const Act_Action_t ActionDelMsg[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = ActDelRcvMsg, [Msg_WRITING ] = ActUnk,
[Msg_MESSAGES_SENT ] = ActDelSntMsg, [Msg_RECEIVED] = ActDelRcvMsg,
[Msg_SENT ] = ActDelSntMsg,
}; };
struct UsrData UsrDat; struct UsrData UsrDat;
const char *Title = NULL; // Initialized to avoid warning const char *Title = NULL; // Initialized to avoid warning
@ -3098,37 +3146,41 @@ static void Msg_ShowASentOrReceivedMessage (struct Msg_Messages *Messages,
Msg_GetMsgSntData (MsgCod,&CrsCod,&UsrDat.UsrCod,&CreatTimeUTC,Subject,&Deleted); Msg_GetMsgSntData (MsgCod,&CrsCod,&UsrDat.UsrCod,&CreatTimeUTC,Subject,&Deleted);
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
Msg_GetStatusOfReceivedMsg (MsgCod,&Open,&Replied,&Expanded); Msg_GetStatusOfReceivedMsg (MsgCod,&Open,&Replied,&Expanded);
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
Msg_GetStatusOfSentMsg (MsgCod,&Expanded); Msg_GetStatusOfSentMsg (MsgCod,&Expanded);
break; break;
default:
break;
} }
/***** Put an icon with message status *****/ /***** Put an icon with message status *****/
switch (Messages->TypeOfMessages) switch (Messages->TypeOfMessages)
{ {
case Msg_MESSAGES_RECEIVED: case Msg_RECEIVED:
Title = (Open ? (Replied ? Txt_MSG_Replied : Title = (Open ? (Replied ? Txt_MSG_Replied :
Txt_MSG_Not_replied) : Txt_MSG_Not_replied) :
Txt_MSG_Unopened); Txt_MSG_Unopened);
break; break;
case Msg_MESSAGES_SENT: case Msg_SENT:
Title = Txt_MSG_Sent; Title = Txt_MSG_Sent;
break; break;
default:
break;
} }
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"CONTEXT_COL %s\"", HTM_TD_Begin ("class=\"CONTEXT_COL %s\"",
Messages->TypeOfMessages == Msg_MESSAGES_RECEIVED ? (Open ? "BG_MSG_BLUE" : Messages->TypeOfMessages == Msg_RECEIVED ? (Open ? "BG_MSG_BLUE" :
"BG_MSG_GREEN") : "BG_MSG_GREEN") :
"BG_MSG_BLUE"); "BG_MSG_BLUE");
Ico_PutIcon (Messages->TypeOfMessages == Msg_MESSAGES_RECEIVED ? (Open ? (Replied ? "reply.svg" : Ico_PutIcon (Messages->TypeOfMessages == Msg_RECEIVED ? (Open ? (Replied ? "reply.svg" :
"envelope-open-text.svg") : "envelope-open-text.svg") :
"envelope.svg") : "envelope.svg") :
"share.svg", "share.svg",
Title,"ICO16x16"); Title,"ICO16x16");
/***** Form to delete message *****/ /***** Form to delete message *****/
@ -3175,7 +3227,7 @@ static void Msg_ShowASentOrReceivedMessage (struct Msg_Messages *Messages,
/***** Form to reply message *****/ /***** Form to reply message *****/
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
if (Messages->TypeOfMessages == Msg_MESSAGES_RECEIVED && if (Messages->TypeOfMessages == Msg_RECEIVED &&
Gbl.Usrs.Me.Role.Logged >= Rol_USR) Gbl.Usrs.Me.Role.Logged >= Rol_USR)
// Guests (users without courses) can read messages but not reply them // Guests (users without courses) can read messages but not reply them
Msg_WriteFormToReply (MsgCod,CrsCod,FromThisCrs,Replied,&UsrDat); Msg_WriteFormToReply (MsgCod,CrsCod,FromThisCrs,Replied,&UsrDat);
@ -3319,7 +3371,7 @@ static void Msg_WriteSentOrReceivedMsgSubject (struct Msg_Messages *Messages,
"MSG_TIT_BG_NEW"); "MSG_TIT_BG_NEW");
/***** Begin form to expand/contract the message *****/ /***** Begin form to expand/contract the message *****/
Frm_StartForm (Messages->TypeOfMessages == Msg_MESSAGES_RECEIVED ? (Expanded ? ActConRcvMsg : Frm_StartForm (Messages->TypeOfMessages == Msg_RECEIVED ? (Expanded ? ActConRcvMsg :
ActExpRcvMsg) : ActExpRcvMsg) :
(Expanded ? ActConSntMsg : (Expanded ? ActConSntMsg :
ActExpSntMsg)); ActExpSntMsg));
@ -3597,8 +3649,9 @@ static void Msg_WriteMsgTo (struct Msg_Messages *Messages,long MsgCod)
char PhotoURL[PATH_MAX + 1]; char PhotoURL[PATH_MAX + 1];
static const Act_Action_t ActionSee[Msg_NUM_TYPES_OF_MSGS] = static const Act_Action_t ActionSee[Msg_NUM_TYPES_OF_MSGS] =
{ {
[Msg_MESSAGES_RECEIVED] = ActSeeRcvMsg, [Msg_WRITING ] = ActUnk,
[Msg_MESSAGES_SENT ] = ActSeeSntMsg, [Msg_RECEIVED] = ActSeeRcvMsg,
[Msg_SENT ] = ActSeeSntMsg,
}; };
/***** Get number of recipients of a message from database *****/ /***** Get number of recipients of a message from database *****/

View File

@ -40,11 +40,12 @@
/******************************** Public types *******************************/ /******************************** Public types *******************************/
/*****************************************************************************/ /*****************************************************************************/
#define Msg_NUM_TYPES_OF_MSGS 2 #define Msg_NUM_TYPES_OF_MSGS 3
typedef enum typedef enum
{ {
Msg_MESSAGES_RECEIVED, Msg_WRITING,
Msg_MESSAGES_SENT, Msg_RECEIVED,
Msg_SENT,
} Msg_TypeOfMessages_t; } Msg_TypeOfMessages_t;
typedef enum typedef enum

View File

@ -94,7 +94,7 @@ static long Not_GetParamNotCod (void);
void Not_ShowFormNotice (void) void Not_ShowFormNotice (void)
{ {
extern const char *Hlp_MESSAGES_Notices; extern const char *Hlp_COMMUNICATION_Notices;
extern const char *Txt_The_notice_will_appear_as_a_yellow_note_; extern const char *Txt_The_notice_will_appear_as_a_yellow_note_;
extern const char *Txt_New_notice; extern const char *Txt_New_notice;
extern const char *Txt_Create_notice; extern const char *Txt_Create_notice;
@ -109,7 +109,7 @@ void Not_ShowFormNotice (void)
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Txt_New_notice, Box_BoxBegin (NULL,Txt_New_notice,
NULL,NULL, NULL,NULL,
Hlp_MESSAGES_Notices,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Notices,Box_NOT_CLOSABLE);
/***** Message body *****/ /***** Message body *****/
HTM_TEXTAREA_Begin ("name=\"Content\" cols=\"30\" rows=\"10\"" HTM_TEXTAREA_Begin ("name=\"Content\" cols=\"30\" rows=\"10\""
@ -353,7 +353,7 @@ void Not_RemoveNotice (void)
void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod) void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod)
{ {
extern const char *Hlp_MESSAGES_Notices; extern const char *Hlp_COMMUNICATION_Notices;
extern const char *Txt_Notices; extern const char *Txt_Notices;
extern const char *Txt_No_notices; extern const char *Txt_No_notices;
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
@ -412,7 +412,7 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod)
Not_ContainerWidth[Not_LIST_FULL_NOTICES] + 50); Not_ContainerWidth[Not_LIST_FULL_NOTICES] + 50);
Box_BoxBegin (StrWidth,Txt_Notices, Box_BoxBegin (StrWidth,Txt_Notices,
Not_PutIconsListNotices,NULL, Not_PutIconsListNotices,NULL,
Hlp_MESSAGES_Notices,Box_NOT_CLOSABLE); Hlp_COMMUNICATION_Notices,Box_NOT_CLOSABLE);
if (!NumNotices) if (!NumNotices)
Ale_ShowAlert (Ale_INFO,Txt_No_notices); Ale_ShowAlert (Ale_INFO,Txt_No_notices);
} }

View File

@ -61,6 +61,7 @@ extern const Act_Action_t For_ActionsSeePstFor[For_NUM_TYPES_FORUM];
static const char *Pag_ParamNumPag[Pag_NUM_WHAT_PAGINATE] = static const char *Pag_ParamNumPag[Pag_NUM_WHAT_PAGINATE] =
{ {
[Pag_NONE ] = NULL,
[Pag_ASSIGNMENTS ] = "NumPagAsg", [Pag_ASSIGNMENTS ] = "NumPagAsg",
[Pag_PROJECTS ] = "NumPagPrj", [Pag_PROJECTS ] = "NumPagPrj",
[Pag_EXAMS ] = "NumPagExa", [Pag_EXAMS ] = "NumPagExa",
@ -264,6 +265,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
if (asprintf (&ClassLink,"BT_LINK LT %s",ClassTxt) < 0) if (asprintf (&ClassLink,"BT_LINK LT %s",ClassTxt) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
@ -389,6 +392,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,1); Pag_PutHiddenParamPagNum (WhatPaginate,1);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
if (asprintf (&Title,Txt_Page_X_of_Y,1,Pagination->NumPags) < 0) if (asprintf (&Title,Txt_Page_X_of_Y,1,Pagination->NumPags) < 0)
Lay_NotEnoughMemoryExit (); Lay_NotEnoughMemoryExit ();
@ -500,6 +505,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->LeftPage);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
if (asprintf (&Title,Txt_Page_X_of_Y, if (asprintf (&Title,Txt_Page_X_of_Y,
Pagination->LeftPage,Pagination->NumPags) < 0) Pagination->LeftPage,Pagination->NumPags) < 0)
@ -623,6 +630,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,NumPage); Pag_PutHiddenParamPagNum (WhatPaginate,NumPage);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
HTM_BUTTON_SUBMIT_Begin (Title,ClassLink,NULL); HTM_BUTTON_SUBMIT_Begin (Title,ClassLink,NULL);
HTM_Unsigned (NumPage); HTM_Unsigned (NumPage);
@ -733,6 +742,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->RightPage);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
if (asprintf (&Title,Txt_Page_X_of_Y, if (asprintf (&Title,Txt_Page_X_of_Y,
Pagination->RightPage,Pagination->NumPags) < 0) Pagination->RightPage,Pagination->NumPags) < 0)
@ -844,6 +855,8 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,
Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags); Pag_PutHiddenParamPagNum (WhatPaginate,Pagination->NumPags);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break; break;
default:
break;
} }
if (asprintf (&Title,Txt_Page_X_of_Y, if (asprintf (&Title,Txt_Page_X_of_Y,
Pagination->NumPags,Pagination->NumPags) < 0) Pagination->NumPags,Pagination->NumPags) < 0)

View File

@ -39,21 +39,22 @@
/******************************** Public types *******************************/ /******************************** Public types *******************************/
/*****************************************************************************/ /*****************************************************************************/
#define Pag_NUM_WHAT_PAGINATE 12 #define Pag_NUM_WHAT_PAGINATE 13
typedef enum typedef enum
{ {
Pag_ASSIGNMENTS = 0, Pag_NONE = 0,
Pag_PROJECTS = 1, Pag_ASSIGNMENTS = 1,
Pag_EXAMS = 2, Pag_PROJECTS = 2,
Pag_GAMES = 3, Pag_EXAMS = 3,
Pag_SURVEYS = 4, Pag_GAMES = 4,
Pag_ATT_EVENTS = 5, Pag_SURVEYS = 5,
Pag_THREADS_FORUM = 6, Pag_ATT_EVENTS = 6,
Pag_POSTS_FORUM = 7, Pag_THREADS_FORUM = 7,
Pag_MESSAGES_RECEIVED = 8, Pag_POSTS_FORUM = 8,
Pag_MESSAGES_SENT = 9, Pag_MESSAGES_RECEIVED = 9,
Pag_MY_AGENDA = 10, Pag_MESSAGES_SENT = 10,
Pag_ANOTHER_AGENDA = 11, Pag_MY_AGENDA = 11,
Pag_ANOTHER_AGENDA = 12,
} Pag_WhatPaginate_t; } Pag_WhatPaginate_t;
struct Pagination // Used for threads and messages pagination struct Pagination // Used for threads and messages pagination

View File

@ -25367,7 +25367,7 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActSeeMsg] = [ActSeeRcvMsg] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
@ -28473,27 +28473,6 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie "" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"" // Precisa de tradução "" // Precisa de tradução
#endif
,
[ActSeeRcvMsg] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Show the messages received from other users"
#elif L==4 // es
"Ver mensajes recibidos de otros usuarios"
#elif L==5 // fr
"" // Besoin de traduction
#elif L==6 // gn
"Ver mensajes recibidos de otros usuarios" // Okoteve traducción
#elif L==7 // it
"" // Bisogno di traduzione
#elif L==8 // pl
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif #endif
, ,
[ActSeeSntMsg] = [ActSeeSntMsg] =