Version 15.216

This commit is contained in:
Antonio Cañas Vargas 2016-06-01 19:34:44 +02:00
parent f2a6f49ffa
commit c756157d8c
17 changed files with 303 additions and 210 deletions

View File

@ -1001,12 +1001,15 @@ function DrawMonth (id,FirstDayOfWeek,YearToDraw,MonthToDraw,CurrentMonth,Curren
];
var Hld_HOLIDAY = 0;
var Hld_NON_SCHOOL_PERIOD = 1;
var Week;
var DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
var Day;
var NumDaysInMonth;
var Yea = YearToDraw;
var Mon = MonthToDraw;
var Day;
var StrMon;
var StrDay;
var StrDate;
var Week;
var DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
var NumDaysInMonth;
var YYYYMMDD;
var NumHld;
var ClassForDay; // Class of day depending on type of day
@ -1139,11 +1142,12 @@ function DrawMonth (id,FirstDayOfWeek,YearToDraw,MonthToDraw,CurrentMonth,Curren
Mon == LstExamAnnouncements[NumExamAnnouncement].Month &&
Day == LstExamAnnouncements[NumExamAnnouncement].Day) {
ThisDayHasEvent = true;
if (!PrintView)
TextForDay = STR_EXAM + ': ' +
LstExamAnnouncements[NumExamAnnouncement].Year + '-' +
LstExamAnnouncements[NumExamAnnouncement].Month + '-' +
LstExamAnnouncements[NumExamAnnouncement].Day;
if (!PrintView) {
StrMon = ((Mon < 10) ? '0' : '') + Mon;
StrDay = ((Day < 10) ? '0' : '') + Day;
StrDate = Yea + '-' + StrMon + '-' + StrDay;
TextForDay = STR_EXAM + ': ' + StrDate;
}
break;
}
@ -1161,11 +1165,13 @@ function DrawMonth (id,FirstDayOfWeek,YearToDraw,MonthToDraw,CurrentMonth,Curren
FormId = id + '_event_' + FormIdNum;
Gbl_HTMLContent += '<form method="post" action="' + CGI + '" id="' + FormId + '">' +
FormEventParams +
'<div class="' + ClassForDay + '"';
'<input type="hidden" name=\"Date\" value="' +
StrDate +
'" /><div class="' + ClassForDay + '"';
if (TextForDay.length)
Gbl_HTMLContent += ' title="' + TextForDay + '"';
Gbl_HTMLContent += '><a href="" class="' + ClassForDay + '"' +
' onclick="document.getElementById(\'' + FormId +
Gbl_HTMLContent += '><a href="" class="' + ClassForDay +
'" onclick="document.getElementById(\'' + FormId +
'\').submit();return false;">';
} else {
Gbl_HTMLContent += '<div class="' + ClassForDay + '"';

View File

@ -168,7 +168,7 @@ void QR_ExamAnnnouncement (void)
" style=\"width:250px; height:250px;\" />"
"</div>",
300,300,
Cfg_HTTPS_URL_SWAD_CGI,Gbl.CurrentCrs.Crs.CrsCod,Act_Actions[ActSeeExaAnn].ActCod,
Cfg_HTTPS_URL_SWAD_CGI,Gbl.CurrentCrs.Crs.CrsCod,Act_Actions[ActSeeAllExaAnn].ActCod,
Txt_Link_to_announcement_of_exam,
Txt_Link_to_announcement_of_exam);
}

View File

@ -695,7 +695,7 @@ Assessment:
551. ActReqAsgWrkCrs A teacher requests edition of works sent to the course
552. ActReqTst Request a test of self-assesment
553. ActSeeCal Show the academic calendar of the course with exam announcements
554. ActSeeExaAnn Show the exam announcements
554. ActSeeAllExaAnn Show the exam announcements
555. ActSeeAdmMrk Marks zone (see or admin)
556. ActEdiAss Edit the assessment system
@ -816,6 +816,7 @@ Assessment:
670. ActPrnCal Show print view of the academic calendar of the course
671. ActChgCal1stDay Change first day of week and show academic calendar of the course
NEW. ActSeeOneExaAnn Show one exam announcement highlighted
672. ActEdiExaAnn Edit an exam announcement
673. ActRcvExaAnn Receive an exam announcement
674. ActPrnExaAnn Show an exam announcement ready to be printed
@ -1232,7 +1233,7 @@ Social:
Messages:
1047. ActSeeNtf Show my recent notifications
1048. ActSeeAnn Show global announcements
1049. ActSeeNot Show notices
1049. ActSeeAllNot Show all notices
1050. ActReqMsgUsr Write message to several users
1051. ActSeeRcvMsg Show the messages received from other users (link in menu)
1052. ActSeeSntMsg Show the messages sent to other users
@ -1242,7 +1243,7 @@ Messages:
1056. ActHidAnn Hide a global announcement that was active
1057. ActRevAnn Reveal a global announcement that was hidden
1058. ActRemAnn Remove global announcement
1059. ActShoNot Show (expand) a notice
1059. ActSeeOneNot Show (expand) a notice
1060. ActWriNot Write a new notice
1061. ActRcvNot Receive and create a new notice
1062. ActHidNot Hide a notice that was active
@ -2050,7 +2051,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqAsgWrkCrs */{ 899, 3,TabAss,ActReqAsgWrkCrs ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_AskEditWorksCrs ,"folderusers64x64.gif" },
/* ActReqTst */{ 103, 4,TabAss,ActReqTst ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowFormAskTst ,"test64x64.gif" },
/* ActSeeCal */{ 16, 5,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Cal_DrawCalendar ,"date64x64.gif" },
/* ActSeeExaAnn */{ 85, 6,TabAss,ActSeeExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ListExamAnnouncementsSee ,"announce64x64.gif" },
/* ActSeeAllExaAnn */{ 85, 6,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ListExamAnnouncementsSee ,"announce64x64.gif" },
/* ActSeeAdmMrk */{ 17, 7,TabAss,ActSeeAdmMrk ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"grades64x64.gif" },
// Actions not in menu:
@ -2182,10 +2183,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActPrnCal */{ 71,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Cal_DrawCalendar ,NULL},
/* ActChgCal1stDay */{1485,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Cal_ChangeFirstDayOfWeek ,Cal_DrawCalendar ,NULL},
/* ActEdiExaAnn */{ 91,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL},
/* ActRcvExaAnn */{ 110,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL},
/* ActPrnExaAnn */{ 179,-1,TabAss,ActSeeExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Exa_PrintExamAnnouncement ,NULL},
/* ActRemExaAnn */{ 187,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_RemoveExamAnnouncement ,NULL},
/* ActSeeOneExaAnn */{1571,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Exa_GetExaToShowHighlighted ,Exa_ListExamAnnouncementsSee ,NULL},
/* ActEdiExaAnn */{ 91,-1,TabAss,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL},
/* ActRcvExaAnn */{ 110,-1,TabAss,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL},
/* ActPrnExaAnn */{ 179,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Exa_PrintExamAnnouncement ,NULL},
/* ActRemExaAnn */{ 187,-1,TabAss,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_RemoveExamAnnouncement ,NULL},
/* ActChgToSeeMrk */{1198,-1,TabAss,ActSeeAdmMrk ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
@ -2633,7 +2635,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// Actions in menu:
/* ActSeeNtf */{ 990, 0,TabMsg,ActSeeNtf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ntf_ShowMyNotifications ,"bell64x64.gif" },
/* ActSeeAnn */{1235, 1,TabMsg,ActSeeAnn ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowAllAnnouncements ,"note64x64.gif" },
/* ActSeeNot */{ 762, 2,TabMsg,ActSeeNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ListFullNotices ,"note64x64.gif" },
/* ActSeeAllNot */{ 762, 2,TabMsg,ActSeeAllNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ListFullNotices ,"note64x64.gif" },
/* ActReqMsgUsr */{ 26, 3,TabMsg,ActReqMsgUsr ,0x1FC,0x1FC,0x1FC,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_FormMsgUsrs ,"editnewmsg64x64.gif" },
/* ActSeeRcvMsg */{ 3, 4,TabMsg,ActSeeRcvMsg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_ShowRecMsgs ,"recmsg64x64.gif" },
/* ActSeeSntMsg */{ 70, 5,TabMsg,ActSeeSntMsg ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Msg_ShowSntMsgs ,"sntmsg64x64.gif" },
@ -2646,13 +2648,13 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRevAnn */{1471,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ann_RevealHiddenAnnouncement,Ann_ShowAllAnnouncements ,NULL},
/* ActRemAnn */{1236,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_RemoveAnnouncement ,NULL},
/* ActShoNot */{1164,-1,TabMsg,ActSeeNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_GetNotToShowHighlighted ,Not_ListFullNotices ,NULL},
/* ActWriNot */{ 59,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ShowFormNotice ,NULL},
/* ActRcvNot */{ 60,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_ReceiveNotice ,Not_ListFullNotices ,NULL},
/* ActHidNot */{ 763,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_HideActiveNotice ,Not_ListFullNotices ,NULL},
/* ActRevNot */{ 764,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_RevealHiddenNotice ,Not_ListFullNotices ,NULL},
/* ActReqRemNot */{1472,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_RequestRemNotice ,NULL},
/* ActRemNot */{ 73,-1,TabMsg,ActSeeNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_RemoveNotice ,Not_ListNoticesAfterRemoval ,NULL},
/* ActSeeOneNot */{1164,-1,TabMsg,ActSeeAllNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_GetNotToShowHighlighted ,Not_ListFullNotices ,NULL},
/* ActWriNot */{ 59,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ShowFormNotice ,NULL},
/* ActRcvNot */{ 60,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_ReceiveNotice ,Not_ListFullNotices ,NULL},
/* ActHidNot */{ 763,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_HideActiveNotice ,Not_ListFullNotices ,NULL},
/* ActRevNot */{ 764,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_RevealHiddenNotice ,Not_ListFullNotices ,NULL},
/* ActReqRemNot */{1472,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_RequestRemNotice ,NULL},
/* ActRemNot */{ 73,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_RemoveNotice ,Not_ListNoticesAfterRemoval ,NULL},
/* ActSeeNewNtf */{ 991,-1,TabMsg,ActSeeNtf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ntf_ShowMyNotifications ,NULL},
/* ActMrkNtfSee */{1146,-1,TabMsg,ActSeeNtf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ntf_MarkAllNotifAsSeen ,NULL},
@ -2902,7 +2904,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
-1, // #82 (obsolete action)
-1, // #83 (obsolete action)
ActSeeUseGbl, // #84
ActSeeExaAnn, // #85
ActSeeAllExaAnn, // #85
-1, // #86 (obsolete action)
ActRemAllStdCrs, // #87
ActReqRemAllStdCrs, // #88
@ -3579,7 +3581,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActRemIns, // #759
-1, // #760 (obsolete action)
ActReqUseGbl, // #761
ActSeeNot, // #762
ActSeeAllNot, // #762
ActHidNot, // #763
ActRevNot, // #764
ActRcvThrForGenTch, // #765
@ -3981,7 +3983,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActRecCtrPho, // #1161
-1, // #1162 (obsolete action)
ActCreUsrAcc, // #1163
ActShoNot, // #1164
ActSeeOneNot, // #1164
ActReqEdiMyIns, // #1165
ActChgCtyMyIns, // #1166
ActChgMyIns, // #1167
@ -4391,6 +4393,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActCnfID_Oth, // #1568
ActCnfID_Std, // #1569
ActCnfID_Tch, // #1570
ActSeeOneExaAnn, // #1571
};
/*****************************************************************************/
@ -4540,7 +4543,7 @@ void Act_FormStartId (Act_Action_t NextAction,const char *Id)
static void Act_FormStartInternal (Act_Action_t NextAction,bool PutParameterLocationIfNoSesion,const char *Id,const char *Anchor)
{
extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES];
char Params[256+256+Ses_LENGTH_SESSION_ID+256];
char ParamsStr[256+256+Ses_LENGTH_SESSION_ID+256];
if (!Gbl.Form.Inside)
{
@ -4566,15 +4569,15 @@ static void Act_FormStartInternal (Act_Action_t NextAction,bool PutParameterLoca
fprintf (Gbl.F.Out," accept-charset=\"windows-1252\">");
/* Put basic form parameters */
Act_SetParamsForm (Params,NextAction,PutParameterLocationIfNoSesion);
fprintf (Gbl.F.Out,"%s",Params);
Act_SetParamsForm (ParamsStr,NextAction,PutParameterLocationIfNoSesion);
fprintf (Gbl.F.Out,"%s",ParamsStr);
Gbl.Form.Inside = true;
}
}
// Params should have space for 256+256+Ses_LENGTH_SESSION_ID+256 bytes
void Act_SetParamsForm (char *Params,Act_Action_t NextAction,bool PutParameterLocationIfNoSesion)
void Act_SetParamsForm (char *ParamsStr,Act_Action_t NextAction,bool PutParameterLocationIfNoSesion)
{
char ParamAction[256];
char ParamSession[256+Ses_LENGTH_SESSION_ID];
@ -4612,7 +4615,7 @@ void Act_SetParamsForm (char *Params,Act_Action_t NextAction,bool PutParameterLo
Gbl.CurrentCty.Cty.CtyCod);
}
sprintf (Params,"%s%s%s",ParamAction,ParamSession,ParamLocation);
sprintf (ParamsStr,"%s%s%s",ParamAction,ParamSession,ParamLocation);
}
void Act_FormEnd (void)

View File

@ -72,9 +72,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+245+184+150+172+36+28+83)
#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+245+185+150+172+36+28+83)
#define Act_MAX_ACTION_COD 1570
#define Act_MAX_ACTION_COD 1571
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -718,7 +718,7 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActReqAsgWrkCrs (ActRcvRchTxtCrsLnk+ 4)
#define ActReqTst (ActRcvRchTxtCrsLnk+ 5)
#define ActSeeCal (ActRcvRchTxtCrsLnk+ 6)
#define ActSeeExaAnn (ActRcvRchTxtCrsLnk+ 7)
#define ActSeeAllExaAnn (ActRcvRchTxtCrsLnk+ 7)
#define ActSeeAdmMrk (ActRcvRchTxtCrsLnk+ 8)
// Secondary actions
#define ActEdiAss (ActRcvRchTxtCrsLnk+ 9)
@ -847,72 +847,73 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActPrnCal (ActRcvRchTxtCrsLnk+123)
#define ActChgCal1stDay (ActRcvRchTxtCrsLnk+124)
#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+125)
#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+126)
#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+127)
#define ActRemExaAnn (ActRcvRchTxtCrsLnk+128)
#define ActSeeOneExaAnn (ActRcvRchTxtCrsLnk+125)
#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+126)
#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+127)
#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+128)
#define ActRemExaAnn (ActRcvRchTxtCrsLnk+129)
#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+129)
#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+130)
#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+130)
#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+131)
#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+132)
#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+133)
#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+134)
#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+131)
#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+132)
#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+133)
#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+134)
#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+135)
#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+135)
#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+136)
#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+137)
#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+138)
#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+139)
#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+136)
#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+137)
#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+138)
#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+139)
#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+140)
#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+140)
#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+141)
#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+141)
#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+142)
#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+143)
#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+144)
#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+145)
#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+146)
#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+147)
#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+148)
#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+149)
#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+150)
#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+151)
#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+152)
#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+153)
#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+154)
#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+155)
#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+156)
#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+157)
#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+158)
#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+159)
#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+160)
#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+161)
#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+162)
#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+142)
#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+143)
#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+144)
#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+145)
#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+146)
#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+147)
#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+148)
#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+149)
#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+150)
#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+151)
#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+152)
#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+153)
#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+154)
#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+155)
#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+156)
#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+157)
#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+158)
#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+159)
#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+160)
#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+161)
#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+162)
#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+163)
#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+163)
#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+164)
#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+165)
#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+166)
#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+167)
#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+168)
#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+169)
#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+170)
#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+171)
#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+172)
#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+173)
#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+174)
#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+175)
#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+176)
#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+177)
#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+178)
#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+179)
#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+180)
#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+181)
#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+182)
#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+183)
#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+184)
#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+164)
#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+165)
#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+166)
#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+167)
#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+168)
#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+169)
#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+170)
#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+171)
#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+172)
#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+173)
#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+174)
#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+175)
#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+176)
#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+177)
#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+178)
#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+179)
#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+180)
#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+181)
#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+182)
#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+183)
#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+184)
#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+185)
/*****************************************************************************/
/******************************* Users tab ***********************************/
@ -1280,7 +1281,7 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
// Actions in menu
#define ActSeeNtf (ActCht+ 1)
#define ActSeeAnn (ActCht+ 2)
#define ActSeeNot (ActCht+ 3)
#define ActSeeAllNot (ActCht+ 3)
#define ActReqMsgUsr (ActCht+ 4)
#define ActSeeRcvMsg (ActCht+ 5)
#define ActSeeSntMsg (ActCht+ 6)
@ -1291,7 +1292,7 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActHidAnn (ActCht+ 10)
#define ActRevAnn (ActCht+ 11)
#define ActRemAnn (ActCht+ 12)
#define ActShoNot (ActCht+ 13)
#define ActSeeOneNot (ActCht+ 13)
#define ActWriNot (ActCht+ 14)
#define ActRcvNot (ActCht+ 15)
#define ActHidNot (ActCht+ 16)
@ -1497,7 +1498,7 @@ void Act_FormStartUnique (Act_Action_t NextAction);
void Act_FormStartAnchor (Act_Action_t NextAction,const char *Anchor);
void Act_FormStartUniqueAnchor (Act_Action_t NextAction,const char *Anchor);
void Act_FormStartId (Act_Action_t NextAction,const char *Id);
void Act_SetParamsForm (char *Params,Act_Action_t NextAction,bool PutParameterLocationIfNoSesion);
void Act_SetParamsForm (char *ParamsStr,Act_Action_t NextAction,bool PutParameterLocationIfNoSesion);
void Act_FormEnd (void);
void Act_LinkFormSubmit (const char *Title,const char *LinkStyle);
void Act_LinkFormSubmitUnique (const char *Title,const char *LinkStyle);

View File

@ -174,7 +174,7 @@ static unsigned Cal_GetParamFirstDayOfWeek (void)
void Cal_DrawCurrentMonth (void)
{
extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES];
char Params[256+256+Ses_LENGTH_SESSION_ID+256];
char ParamsStr[256+256+Ses_LENGTH_SESSION_ID+256];
/***** Get list of holidays *****/
if (!Gbl.Hlds.LstIsRead)
@ -197,11 +197,11 @@ void Cal_DrawCurrentMonth (void)
Gbl.CurrentCtr.Ctr.PlcCod,
Cfg_HTTPS_URL_SWAD_CGI,
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
Act_SetParamsForm (Params,ActSeeCal,true);
fprintf (Gbl.F.Out,"'%s',",Params);
Act_SetParamsForm (Params,ActSeeExaAnn,true);
Act_SetParamsForm (ParamsStr,ActSeeCal,true);
fprintf (Gbl.F.Out,"'%s',",ParamsStr);
Act_SetParamsForm (ParamsStr,ActSeeOneExaAnn,true);
fprintf (Gbl.F.Out,"'%s');"
"</script>",Params);
"</script>",ParamsStr);
}
/*****************************************************************************/
@ -228,7 +228,7 @@ void Cal_DrawCurrentMonth (void)
void Cal_DrawCalendar (void)
{
extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES];
char Params[256+256+Ses_LENGTH_SESSION_ID+256];
char ParamsStr[256+256+Ses_LENGTH_SESSION_ID+256];
bool PrintView = (Gbl.Action.Act == ActPrnCal);
/***** Get list of holidays *****/
@ -266,13 +266,13 @@ void Cal_DrawCalendar (void)
"false",
Cfg_HTTPS_URL_SWAD_CGI,
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
Act_SetParamsForm (Params,ActSeeCal,true);
Act_SetParamsForm (ParamsStr,ActSeeCal,true);
fprintf (Gbl.F.Out,"'%s',",
Params);
Act_SetParamsForm (Params,ActSeeExaAnn,true);
ParamsStr);
Act_SetParamsForm (ParamsStr,ActSeeOneExaAnn,true);
fprintf (Gbl.F.Out,"'%s');"
"</script>",
Params);
ParamsStr);
/***** End frame *****/
Lay_EndRoundFrame ();

View File

@ -129,7 +129,6 @@
// TODO: FIX BUG: A teacher uploads a document in course documents zone, then he/she unregister from course, the he/she search for his/her documents, a document is shown in results but he/she can not view it
// TODO: FIX BUG: Txt_Save_file_properties does not have sense in briefcase, because nothing to save (license should be editable in briefcase?)
// TODO: In listing of courses, teachers column is before than students column. In edition of courses, students column is before teachers column.
// TODO: When clicking on an announcement, it will be shown alone, as now.
// TODO: Check value returned by setlocale in all calls
// TODO: Write "Tab > Action" in title of text in most frequent actions
// TODO: Fix bug in copy-paste from Briefcase to another file browser
@ -139,13 +138,17 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.215 (2016-06-01)"
#define Log_PLATFORM_VERSION "SWAD 15.216 (2016-06-01)"
#define CSS_FILE "swad15.210.css"
#define JS_FILE "swad15.213.js"
#define JS_FILE "swad15.216.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
Version 15.216: Jun 01, 2016 When clicking on an exam announcement, it will be shown alone. (201751 lines)
1 change necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1571','es','N','Ver convocatoria');
Version 15.215: Jun 01, 2016 List exam announcements as a list, like notices. (201670 lines)
Version 15.214: May 31, 2016 Fixed bug in renaming test tags. (201589 lines)
Version 15.213: May 31, 2016 Code refactoring related to renaming test tags.

View File

@ -45,16 +45,22 @@
struct Date
{
unsigned Day,Month,Year,Week;
unsigned Day;
unsigned Month;
unsigned Year;
unsigned Week;
char YYYYMMDD[4+2+2+1];
};
struct Time
{
unsigned Hour,Minute,Second;
unsigned Hour;
unsigned Minute;
unsigned Second;
};
struct Hour
{
unsigned Hour,Minute;
unsigned Hour;
unsigned Minute;
};
struct DateTime
{

View File

@ -82,7 +82,9 @@ static void Exa_ModifyExamAnnouncementInDB (long ExaCod);
static void Exa_GetDataExamAnnouncementFromDB (long ExaCod);
static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement);
static void Exa_PutIconsExamAnnouncement (void);
static void Exa_PutParamExaCod (void);
static void Exa_PutParamExaCodToEdit (void);
static void Exa_PutHiddenParamExaCod (long ExaCod);
static long Exa_GetParamExaCod (void);
static void Exa_GetNotifContentExamAnnouncement (char **ContentStr);
@ -118,13 +120,10 @@ void Exa_PutFrmEditAExamAnnouncement (void)
static long Exa_GetParamsExamAnnouncement (void)
{
char UnsignedStr[10+1];
char LongStr[1+10+1];
long ExaCod;
/***** Get the code of the exam announcement *****/
Par_GetParToText ("ExaCod",LongStr,1+10);
if (sscanf (LongStr,"%ld",&ExaCod) != 1)
ExaCod = -1;
ExaCod = Exa_GetParamExaCod ();
/***** Get the name of the course (it is allowed to be different from the official name of the course) *****/
Par_GetParToText ("CrsName",Gbl.ExamAnnouncements.ExaDat.CrsFullName,Cns_MAX_BYTES_STRING);
@ -143,7 +142,10 @@ static long Exa_GetParamsExamAnnouncement (void)
Par_GetParToText ("ExamSession",Gbl.ExamAnnouncements.ExaDat.Session,Cns_MAX_BYTES_STRING);
/***** Get the data of the exam *****/
Dat_GetDateFromForm ("ExamDay","ExamMonth","ExamYear",&Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,&Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,&Gbl.ExamAnnouncements.ExaDat.ExamDate.Year);
Dat_GetDateFromForm ("ExamDay","ExamMonth","ExamYear",
&Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,
&Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,
&Gbl.ExamAnnouncements.ExaDat.ExamDate.Year);
if (Gbl.ExamAnnouncements.ExaDat.ExamDate.Day == 0 ||
Gbl.ExamAnnouncements.ExaDat.ExamDate.Month == 0 ||
Gbl.ExamAnnouncements.ExaDat.ExamDate.Year == 0)
@ -341,15 +343,13 @@ static void Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (long ExaCod,u
void Exa_PrintExamAnnouncement (void)
{
char LongStr[1+10+1];
long ExaCod;
/***** Allocate memory for the exam announcement *****/
Exa_AllocMemExamAnnouncement ();
/***** Get the code of the exam announcement *****/
Par_GetParToText ("ExaCod",LongStr,1+10);
if (sscanf (LongStr,"%ld",&ExaCod) != 1)
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
/***** Read exam announcement from the database *****/
@ -370,12 +370,10 @@ void Exa_RemoveExamAnnouncement (void)
{
extern const char *Txt_Announcement_of_exam_removed;
char Query[1024];
char LongStr[1+10+1];
long ExaCod;
/***** Get the code of the exam announcement *****/
Par_GetParToText ("ExaCod",LongStr,1+10);
if (sscanf (LongStr,"%ld",&ExaCod) != 1)
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
/***** Mark the exam announcement as deleted in the database *****/
@ -406,22 +404,6 @@ void Exa_RemoveExamAnnouncement (void)
void Exa_ListExamAnnouncementsSee (void)
{
/***** Show highlighted exam announcement *****/
if (Gbl.ExamAnnouncements.HighlightExaCod > 0)
{
/***** Allocate memory for the exam announcement *****/
Exa_AllocMemExamAnnouncement ();
/***** Read exam announcement from the database *****/
Exa_GetDataExamAnnouncementFromDB (Gbl.ExamAnnouncements.HighlightExaCod);
/***** Show exam announcement *****/
Exa_ShowExamAnnouncement (Gbl.ExamAnnouncements.HighlightExaCod,Exa_NORMAL_VIEW);
/***** Free memory of the exam announcement *****/
Exa_FreeMemExamAnnouncement ();
}
/***** List all exam announcements *****/
Exa_ListExamAnnouncements (Exa_NORMAL_VIEW);
@ -440,6 +422,17 @@ static void Exa_ListExamAnnouncementsEdit (void)
Exa_ListExamAnnouncements (Exa_NORMAL_VIEW);
}
/*****************************************************************************/
/*************** Get exam announcement to show highlighted *******************/
/*****************************************************************************/
void Exa_GetExaToShowHighlighted (void)
{
/***** Get the date (in YYYY-MM-DD format)
of the exam announcements to highlight *****/
Par_GetParToText ("Date",Gbl.ExamAnnouncements.HighlightDate,4+1+2+1+2);
}
/*****************************************************************************/
/******************** List all the exam announcements ************************/
/*****************************************************************************/
@ -458,6 +451,46 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
bool ICanEdit = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
/***** Show highlighted exam announcement *****/
if (Gbl.ExamAnnouncements.HighlightDate[0])
{
/***** Get exam announcements (the most recent first)
in current course for a date from database *****/
sprintf (Query,"SELECT ExaCod,ExamDate"
" FROM exam_announcements"
" WHERE CrsCod='%ld' AND Status<>'%u'"
" AND DATE(ExamDate)='%s'"
" ORDER BY ExamDate DESC",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT,
Gbl.ExamAnnouncements.HighlightDate);
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course for listing");
/***** List the existing exam announcements *****/
for (NumExaAnn = 0;
NumExaAnn < NumExaAnns;
NumExaAnn++)
{
/***** Get the code of the exam announcement (row[0]) *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%ld",&ExaCod) != 1)
Lay_ShowErrorAndExit ("Wrong code of exam announcement.");
/***** Allocate memory for the exam announcement *****/
Exa_AllocMemExamAnnouncement ();
/***** Read the data of the exam announcement *****/
Exa_GetDataExamAnnouncementFromDB (ExaCod);
/***** Show exam announcement *****/
Exa_ShowExamAnnouncement (ExaCod,TypeViewExamAnnouncement);
/***** Free memory of the exam announcement *****/
Exa_FreeMemExamAnnouncement ();
}
}
/***** Get exam announcements (the most recent first)
in current course from database *****/
sprintf (Query,"SELECT ExaCod,ExamDate"
@ -470,8 +503,8 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
/***** Start frame *****/
Lay_StartRoundFrame (NULL,
Gbl.ExamAnnouncements.HighlightExaCod > 0 ? Txt_All_announcements_of_exam :
Txt_Announcements_of_exam,
Gbl.ExamAnnouncements.HighlightDate[0] ? Txt_All_announcements_of_exam :
Txt_Announcements_of_exam,
ICanEdit ? Exa_PutIconToCreateNewExamAnnouncement :
NULL);
@ -555,19 +588,32 @@ static long Exa_AddExamAnnouncementToDB (void)
/***** Add exam announcement *****/
if ((Query = malloc (512+2*Cns_MAX_BYTES_STRING+7*Cns_MAX_BYTES_TEXT)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to query database.");
sprintf (Query,"INSERT INTO exam_announcements (CrsCod,Status,NumNotif,"
"CrsFullName,Year,ExamSession,CallDate,ExamDate,Duration,Place,"
sprintf (Query,"INSERT INTO exam_announcements "
"(CrsCod,Status,NumNotif,CrsFullName,Year,ExamSession,"
"CallDate,ExamDate,Duration,Place,"
"ExamMode,Structure,DocRequired,MatRequired,MatAllowed,OtherInfo)"
" VALUES ('%ld','%u','0','%s','%u','%s',NOW(),'%04u-%02u-%02u %02u:%02u:00','%02u:%02u:00','%s','%s','%s','%s','%s','%s','%s')",
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Exa_ACTIVE_EXAM_ANNOUNCEMENT,
Gbl.ExamAnnouncements.ExaDat.CrsFullName,Gbl.ExamAnnouncements.ExaDat.Year,Gbl.ExamAnnouncements.ExaDat.Session,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Year,Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,
Gbl.ExamAnnouncements.ExaDat.StartTime.Hour,Gbl.ExamAnnouncements.ExaDat.StartTime.Minute,
Gbl.ExamAnnouncements.ExaDat.Duration.Hour,Gbl.ExamAnnouncements.ExaDat.Duration.Minute,
" VALUES "
"('%ld','%u','0','%s','%u','%s',"
"NOW(),'%04u-%02u-%02u %02u:%02u:00','%02u:%02u:00','%s',"
"'%s','%s','%s','%s','%s','%s')",
Gbl.CurrentCrs.Crs.CrsCod,
(unsigned) Exa_ACTIVE_EXAM_ANNOUNCEMENT,
Gbl.ExamAnnouncements.ExaDat.CrsFullName,
Gbl.ExamAnnouncements.ExaDat.Year,
Gbl.ExamAnnouncements.ExaDat.Session,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Year,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,
Gbl.ExamAnnouncements.ExaDat.StartTime.Hour,
Gbl.ExamAnnouncements.ExaDat.StartTime.Minute,
Gbl.ExamAnnouncements.ExaDat.Duration.Hour,
Gbl.ExamAnnouncements.ExaDat.Duration.Minute,
Gbl.ExamAnnouncements.ExaDat.Place,
Gbl.ExamAnnouncements.ExaDat.Mode,Gbl.ExamAnnouncements.ExaDat.Structure,
Gbl.ExamAnnouncements.ExaDat.Mode,
Gbl.ExamAnnouncements.ExaDat.Structure,
Gbl.ExamAnnouncements.ExaDat.DocRequired,
Gbl.ExamAnnouncements.ExaDat.MatRequired,Gbl.ExamAnnouncements.ExaDat.MatAllowed,
Gbl.ExamAnnouncements.ExaDat.MatRequired,
Gbl.ExamAnnouncements.ExaDat.MatAllowed,
Gbl.ExamAnnouncements.ExaDat.OtherInfo);
ExaCod = DB_QueryINSERTandReturnCode (Query,"can not create a new exam announcement");
free ((void *) Query);
@ -588,17 +634,27 @@ static void Exa_ModifyExamAnnouncementInDB (long ExaCod)
Lay_ShowErrorAndExit ("Not enough memory to query database.");
sprintf (Query,"UPDATE exam_announcements"
" SET CrsFullName='%s',Year='%u',ExamSession='%s',"
"ExamDate='%04u-%02u-%02u %02u:%02u:00',Duration='%02u:%02u:00',"
"Place='%s',ExamMode='%s',Structure='%s',DocRequired='%s',MatRequired='%s',MatAllowed='%s',OtherInfo='%s'" \
"ExamDate='%04u-%02u-%02u %02u:%02u:00',"
"Duration='%02u:%02u:00',"
"Place='%s',ExamMode='%s',Structure='%s',"
"DocRequired='%s',MatRequired='%s',MatAllowed='%s',OtherInfo='%s'" \
" WHERE ExaCod='%ld'",
Gbl.ExamAnnouncements.ExaDat.CrsFullName,Gbl.ExamAnnouncements.ExaDat.Year,Gbl.ExamAnnouncements.ExaDat.Session,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Year,Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,
Gbl.ExamAnnouncements.ExaDat.StartTime.Hour,Gbl.ExamAnnouncements.ExaDat.StartTime.Minute,
Gbl.ExamAnnouncements.ExaDat.Duration.Hour,Gbl.ExamAnnouncements.ExaDat.Duration.Minute,
Gbl.ExamAnnouncements.ExaDat.CrsFullName,
Gbl.ExamAnnouncements.ExaDat.Year,
Gbl.ExamAnnouncements.ExaDat.Session,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Year,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Month,
Gbl.ExamAnnouncements.ExaDat.ExamDate.Day,
Gbl.ExamAnnouncements.ExaDat.StartTime.Hour,
Gbl.ExamAnnouncements.ExaDat.StartTime.Minute,
Gbl.ExamAnnouncements.ExaDat.Duration.Hour,
Gbl.ExamAnnouncements.ExaDat.Duration.Minute,
Gbl.ExamAnnouncements.ExaDat.Place,
Gbl.ExamAnnouncements.ExaDat.Mode,Gbl.ExamAnnouncements.ExaDat.Structure,
Gbl.ExamAnnouncements.ExaDat.Mode,
Gbl.ExamAnnouncements.ExaDat.Structure,
Gbl.ExamAnnouncements.ExaDat.DocRequired,
Gbl.ExamAnnouncements.ExaDat.MatRequired,Gbl.ExamAnnouncements.ExaDat.MatAllowed,
Gbl.ExamAnnouncements.ExaDat.MatRequired,
Gbl.ExamAnnouncements.ExaDat.MatAllowed,
Gbl.ExamAnnouncements.ExaDat.OtherInfo,
ExaCod);
DB_QueryUPDATE (Query,"can not update an exam announcement");
@ -614,16 +670,14 @@ void Exa_CreateListOfExamAnnouncements (void)
char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumExaAnn,NumExaAnns;
long ExaCod;
struct Date ExamDate;
unsigned Hour,Minute,Second;
unsigned long NumExaAnn;
unsigned long NumExaAnns;
if (Gbl.DB.DatabaseIsOpen)
{
/***** Get exam announcements (no matter in what order)
/***** Get exam dates (no matter in what order)
in current course from database *****/
sprintf (Query,"SELECT ExaCod,ExamDate"
sprintf (Query,"SELECT DISTINCT(DATE(ExamDate))"
" FROM exam_announcements" \
" WHERE CrsCod='%ld' AND Status<>'%u'",
Gbl.CurrentCrs.Crs.CrsCod,
@ -644,22 +698,17 @@ void Exa_CreateListOfExamAnnouncements (void)
NumExaAnn < NumExaAnns;
NumExaAnn++)
{
/***** Get the code of the exam announcement (row[0]) *****/
/***** Get next exam announcement *****/
row = mysql_fetch_row (mysql_res);
if (sscanf (row[0],"%ld",&ExaCod) != 1)
Lay_ShowErrorAndExit ("Wrong code of exam announcement.");
/***** Read the date of the exam (row[1]) *****/
/* Date of exam (row[6]) */
if (sscanf (row[1],"%04u-%02u-%02u %02u:%02u:%02u",
&ExamDate.Year,&ExamDate.Month,&ExamDate.Day,&Hour,&Minute,&Second) != 6)
/* Read the date of the exam (row[0]) */
if (sscanf (row[0],"%04u-%02u-%02u",
&Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Year,
&Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Month,
&Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Day) != 3)
Lay_ShowErrorAndExit ("Wrong date of exam.");
/***** Add exam announcement the list *****/
Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Year = ExamDate.Year;
Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Month = ExamDate.Month;
Gbl.ExamAnnouncements.Lst[Gbl.ExamAnnouncements.NumExaAnns].Day = ExamDate.Day;
/***** Increment number of elements in list *****/
Gbl.ExamAnnouncements.NumExaAnns++;
}
}
@ -839,7 +888,7 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
/***** Start form *****/
Act_FormStart (ActRcvExaAnn);
if (ExaCod > 0)
Par_PutHiddenParamLong ("ExaCod",ExaCod);
Exa_PutHiddenParamExaCod (ExaCod);
}
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_2\""
@ -1264,16 +1313,16 @@ static void Exa_PutIconsExamAnnouncement (void)
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM)
{
/***** Link to remove this exam announcement *****/
Lay_PutContextualLink (ActRemExaAnn,Exa_PutParamExaCod,"remove-on64x64.png",
Lay_PutContextualLink (ActRemExaAnn,Exa_PutParamExaCodToEdit,"remove-on64x64.png",
Txt_Remove,NULL);
/***** Link to edit this exam announcement *****/
Lay_PutContextualLink (ActEdiExaAnn,Exa_PutParamExaCod,"edit64x64.png",
Lay_PutContextualLink (ActEdiExaAnn,Exa_PutParamExaCodToEdit,"edit64x64.png",
Txt_Edit,NULL);
}
/***** Link to print view *****/
Lay_PutContextualLink (ActPrnExaAnn,Exa_PutParamExaCod,"print64x64.png",
Lay_PutContextualLink (ActPrnExaAnn,Exa_PutParamExaCodToEdit,"print64x64.png",
Txt_Print,NULL);
}
@ -1281,9 +1330,31 @@ static void Exa_PutIconsExamAnnouncement (void)
/*************** Param with the code of an exam announcement *****************/
/*****************************************************************************/
static void Exa_PutParamExaCod (void)
static void Exa_PutParamExaCodToEdit (void)
{
Par_PutHiddenParamLong ("ExaCod",Gbl.ExamAnnouncements.ExaCodToEdit);
Exa_PutHiddenParamExaCod (Gbl.ExamAnnouncements.ExaCodToEdit);
}
static void Exa_PutHiddenParamExaCod (long ExaCod)
{
Par_PutHiddenParamLong ("ExaCod",ExaCod);
}
/*****************************************************************************/
/********** Get parameter with the code of an exam announcement **************/
/*****************************************************************************/
static long Exa_GetParamExaCod (void)
{
char LongStr[1+10+1]; // String that holds the exam announcement code
long ExaCod;
/* Get notice code */
Par_GetParToText ("ExaCod",LongStr,1+10);
if (sscanf (LongStr,"%ld",&ExaCod) != 1)
ExaCod = -1L;
return ExaCod;
}
/*****************************************************************************/

View File

@ -58,6 +58,9 @@ void Exa_RemoveExamAnnouncement (void);
void Exa_FreeMemExamAnnouncement (void);
void Exa_FreeListExamAnnouncements (void);
void Exa_ListExamAnnouncementsSee (void);
void Exa_GetExaToShowHighlighted (void);
void Exa_CreateListOfExamAnnouncements (void);
void Exa_GetSummaryAndContentExamAnnouncement (char *SummaryStr,char **ContentStr,
long ExaCod,unsigned MaxChars,bool GetContent);

View File

@ -196,7 +196,7 @@ void Gbl_InitializeGlobals (void)
Gbl.ExamAnnouncements.NumExaAnns = 0;
Gbl.ExamAnnouncements.Lst = NULL;
Gbl.ExamAnnouncements.HighlightExaCod = -1L; // No exam announcement highlighted
Gbl.ExamAnnouncements.HighlightDate[0] = '\0'; // No exam announcements highlighted
Gbl.Usrs.Select.All =
Gbl.Usrs.Select.Std =

View File

@ -479,10 +479,10 @@ struct Globals
} Syllabus;
struct
{
struct Date *Lst; // List of dates of announcements of exams
struct Date *Lst; // List of dates of exam announcements
unsigned NumExaAnns; // Number of announcements of exam in the list
long ExaCodToEdit; // Used as parameter in contextual links
long HighlightExaCod; // Exam code of an exam announcement to be highlighted
char HighlightDate[4+1+2+1+2+1]; // Date with exam announcements to be highlighted (in YYYY-MM-DD format)
struct
{
long CrsCod;

View File

@ -139,7 +139,7 @@ const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB
ActReqAsgWrkCrs,
ActReqTst,
ActSeeCal,
ActSeeExaAnn,
ActSeeAllExaAnn,
ActSeeAdmMrk,
},
// TabUsr **********
@ -164,7 +164,7 @@ const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB
{
ActSeeNtf,
ActSeeAnn,
ActSeeNot,
ActSeeAllNot,
ActReqMsgUsr,
ActSeeRcvMsg,
ActSeeSntMsg,

View File

@ -696,7 +696,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES)
{
/* Form to view full notice */
Act_FormStart (ActShoNot);
Act_FormStart (ActSeeOneNot);
Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_See_full_notice,DateClass[Status]);
}
@ -721,7 +721,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
/* Form to view full notice */
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
Act_FormStart (ActShoNot);
Act_FormStart (ActSeeOneNot);
Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_See_full_notice,The_ClassForm[Gbl.Prefs.Theme]);
fprintf (Gbl.F.Out,"<img src=\"%s/ellipsis32x32.gif\""

View File

@ -104,7 +104,7 @@ static const Act_Action_t Ntf_DefaultActions[Ntf_NUM_NOTIFY_EVENTS] =
/* Assessment tab */
ActSeeAsg, // Ntf_EVENT_ASSIGNMENT
ActSeeExaAnn, // Ntf_EVENT_EXAM_ANNOUNCEMENT
ActSeeAllExaAnn, // Ntf_EVENT_EXAM_ANNOUNCEMENT
ActSeeAdmMrk, // Ntf_EVENT_MARKS_FILE
/* Users tab */
@ -122,7 +122,7 @@ static const Act_Action_t Ntf_DefaultActions[Ntf_NUM_NOTIFY_EVENTS] =
ActSeeFor, // Ntf_EVENT_FORUM_REPLY
/* Messages tab */
ActShoNot, // Ntf_EVENT_NOTICE
ActSeeOneNot, // Ntf_EVENT_NOTICE
ActExpRcvMsg, // Ntf_EVENT_MESSAGE
/* Statistics tab */
@ -759,7 +759,7 @@ static bool Ntf_StartFormGoToAction (Ntf_NotifyEvent_t NotifyEvent,
For_PutAllHiddenParamsForum ();
break;
case Ntf_EVENT_NOTICE:
Act_FormStart (ActShoNot);
Act_FormStart (ActSeeOneNot);
Not_PutHiddenParamNotCod (Cod);
break;
case Ntf_EVENT_MESSAGE:

View File

@ -1528,7 +1528,7 @@ static void Soc_PutFormGoToAction (const struct SocialNote *SocNot)
ActReqDatShaCrs, // Soc_NOTE_CRS_SHA_PUB_FILE
/* Assessment tab */
ActSeeExaAnn, // Soc_NOTE_EXAM_ANNOUNCEMENT
ActSeeAllExaAnn, // Soc_NOTE_EXAM_ANNOUNCEMENT
/* Users tab */
@ -1537,7 +1537,7 @@ static void Soc_PutFormGoToAction (const struct SocialNote *SocNot)
ActSeeFor, // Soc_NOTE_FORUM_POST
/* Messages tab */
ActShoNot, // Soc_NOTE_NOTICE
ActSeeOneNot, // Soc_NOTE_NOTICE
/* Statistics tab */

View File

@ -109,7 +109,7 @@ action="https://localhost/swad/es" method="post">
void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScreen)
{
extern const char *Txt_STR_LANG_ID[1+Txt_NUM_LANGUAGES];
char Params[256+256+Ses_LENGTH_SESSION_ID+256];
char ParamsStr[256+256+Ses_LENGTH_SESSION_ID+256];
char Anchor1Nick[256+256+256+Ses_LENGTH_SESSION_ID+256+256];
char Anchor2Nick[256+Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64];
size_t TxtLength;
@ -303,7 +303,7 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
sprintf (Gbl.Form.Id,"form_%d",Gbl.Form.Num);
/* Store first part of anchor */
Act_SetParamsForm (Params,ActSeePubPrf,true);
Act_SetParamsForm (ParamsStr,ActSeePubPrf,true);
sprintf (Anchor1Nick,"<form method=\"post\" action=\"%s/%s\" id=\"%s\">"
"%s"
"<input type=\"hidden\" name=\"usr\" value=\"",
@ -311,7 +311,7 @@ void Str_InsertLinks (char *Txt,unsigned long MaxLength,size_t MaxCharsURLOnScre
Txt_STR_LANG_ID[Gbl.Prefs.Language],
Gbl.Usrs.Me.Logged ? Gbl.Form.UniqueId :
Gbl.Form.Id,
Params);
ParamsStr);
Anchor1NickLength = strlen (Anchor1Nick);
if ((Links[NumLinks].Anchor1Nick = (char *) malloc (Anchor1NickLength+1)) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to insert link.");

View File

@ -18273,7 +18273,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Calend&aacute;rio"
#endif
,
// ActSeeExaAnn
// ActSeeAllExaAnn
#if L==1
"Convocat&ograve;ries"
#elif L==2
@ -18658,7 +18658,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"An&uacute;ncios"
#endif
,
// ActSeeNot
// ActSeeAllNot
#if L==1
"Avisos"
#elif L==2
@ -20256,7 +20256,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Calend&aacute;rio"
#endif
,
// ActSeeExaAnn
// ActSeeAllExaAnn
#if L==1
"Llistat de convocat&ograve;ries d'exàmens d'aquesta assignatura"
#elif L==2
@ -20657,7 +20657,7 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"An&uacute;ncios globais vis&iacute;veis no in&iacute;cio da sess&atilde;o"
#endif
,
// ActSeeNot
// ActSeeAllNot
#if L==1
"Breus avisos relacionats amb aquesta assignatura,"
" visibles per qualsevol visitant, encara que no estigui identificat"