mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-10 10:45:23 +02:00
Version 16.97
This commit is contained in:
parent
7954f4bd80
commit
08374d48a1
|
@ -369,8 +369,8 @@ a:hover /* Default ==> underlined */
|
|||
}
|
||||
}
|
||||
|
||||
.BC_SEMIOFF {opacity:0.67;}
|
||||
.BC_OFF {opacity:0.33;}
|
||||
.BC_SEMIOFF {opacity:0.67;}
|
||||
.BC_OFF {opacity:0.33;}
|
||||
|
||||
.BC_WHITE {color:#707070;}
|
||||
.BC_GREY {color:#FFB42E;}
|
||||
|
@ -2115,7 +2115,23 @@ a:hover img.CENTRE_PHOTO_SHOW
|
|||
.LOG {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:#606060; font-size:11pt;}
|
||||
.LOG_R {font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; color:red; font-size:11pt;}
|
||||
|
||||
/******************************** Image uploading ****************************/
|
||||
/***************************** Exam announcement *****************************/
|
||||
/* Bottom space is used for signatures */
|
||||
.EXA_ANN_VISIBLE
|
||||
{
|
||||
box-sizing:border-box;
|
||||
width:100%;
|
||||
padding:25px 25px 125px 25px;
|
||||
}
|
||||
.EXA_ANN_HIDDEN
|
||||
{
|
||||
box-sizing:border-box;
|
||||
width:100%;
|
||||
padding:25px 25px 125px 25px;
|
||||
opacity:0.33;
|
||||
}
|
||||
|
||||
/****************************** Image uploading ******************************/
|
||||
.IMG_UPLOAD_CONTAINER
|
||||
{
|
||||
vertical-align:top;
|
|
@ -257,8 +257,10 @@ static void RSS_WriteExamAnnouncements (FILE *FileRSS,struct Course *Crs)
|
|||
sprintf (Query,"SELECT ExaCod,UNIX_TIMESTAMP(CallDate) AS T,"
|
||||
"DATE_FORMAT(ExamDate,'%%d/%%m/%%Y %%H:%%i')"
|
||||
" FROM exam_announcements"
|
||||
" WHERE CrsCod='%ld' AND ExamDate>=NOW() AND Status<>'%u' ORDER BY T",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
" WHERE CrsCod='%ld' AND Status='%u' AND ExamDate>=NOW()"
|
||||
" ORDER BY T",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT);
|
||||
NumExamAnnouncements = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements");
|
||||
|
||||
/***** Write items with notices *****/
|
||||
|
|
|
@ -839,6 +839,8 @@ Assessment:
|
|||
688. ActPrnExaAnn Show an exam announcement ready to be printed
|
||||
NEW. ActReqRemExaAnn Request the removal of an exam announcement
|
||||
689. ActRemExaAnn Remove an exam announcement
|
||||
NEW. ActHidExaAnn Hide exam announcement
|
||||
NEW. ActShoExaAnn Show exam announcement
|
||||
|
||||
690. ActChgToSeeMrk Change to see marks in course/group
|
||||
|
||||
|
@ -2243,10 +2245,12 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* ActSeeOneExaAnn */{1572,-1,TabUnk,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_GetExaCodToHighlight ,Exa_ListExamAnnouncementsSee ,NULL},
|
||||
/* ActSeeDatExaAnn */{1571,-1,TabUnk,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_GetDateToHighlight ,Exa_ListExamAnnouncementsSee ,NULL},
|
||||
/* ActEdiExaAnn */{ 91,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL},
|
||||
/* ActRcvExaAnn */{ 110,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL},
|
||||
/* ActRcvExaAnn */{ 110,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_ReceiveExamAnnouncement1 ,Exa_ReceiveExamAnnouncement2 ,NULL},
|
||||
/* ActPrnExaAnn */{ 179,-1,TabUnk,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONT_NORM,Act_BLNK_WINDOW,NULL ,Exa_PrintExamAnnouncement ,NULL},
|
||||
/* ActReqRemExaAnn */{1619,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Exa_ReqRemoveExamAnnouncement ,NULL},
|
||||
/* ActRemExaAnn */{ 187,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Exa_RemoveExamAnnouncement ,NULL},
|
||||
/* ActRemExaAnn */{ 187,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_RemoveExamAnnouncement1 ,Exa_RemoveExamAnnouncement2 ,NULL},
|
||||
/* ActHidExaAnn */{1620,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_HideExamAnnouncement1 ,Exa_HideExamAnnouncement2 ,NULL},
|
||||
/* ActShoExaAnn */{1621,-1,TabUnk,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,Exa_UnhideExamAnnouncement1 ,Exa_UnhideExamAnnouncement2 ,NULL},
|
||||
|
||||
/* ActChgToSeeMrk */{1198,-1,TabUnk,ActSeeAdmMrk ,0x118,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
|
||||
|
||||
|
@ -4527,6 +4531,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
|||
ActSeeMyPubAgd, // #1617
|
||||
ActPrnAgdQR, // #1618
|
||||
ActReqRemExaAnn, // #1619
|
||||
ActHidExaAnn, // #1620
|
||||
ActShoExaAnn, // #1621
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
118
swad_action.h
118
swad_action.h
|
@ -55,9 +55,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+14+93+73+70+249+187+159+172+36+31+97)
|
||||
#define Act_NUM_ACTIONS (1+9+51+14+93+73+70+249+189+159+172+36+31+97)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1619
|
||||
#define Act_MAX_ACTION_COD 1621
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 11
|
||||
|
||||
|
@ -849,68 +849,70 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
|||
#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+129)
|
||||
#define ActReqRemExaAnn (ActRcvRchTxtCrsLnk+130)
|
||||
#define ActRemExaAnn (ActRcvRchTxtCrsLnk+131)
|
||||
#define ActHidExaAnn (ActRcvRchTxtCrsLnk+132)
|
||||
#define ActShoExaAnn (ActRcvRchTxtCrsLnk+133)
|
||||
|
||||
#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+132)
|
||||
#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+134)
|
||||
|
||||
#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+133)
|
||||
#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+134)
|
||||
#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+135)
|
||||
#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+136)
|
||||
#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+137)
|
||||
#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+135)
|
||||
#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+136)
|
||||
#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+137)
|
||||
#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+138)
|
||||
#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+139)
|
||||
|
||||
#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+138)
|
||||
#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+139)
|
||||
#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+140)
|
||||
#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+141)
|
||||
#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+142)
|
||||
#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+140)
|
||||
#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+141)
|
||||
#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+142)
|
||||
#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+143)
|
||||
#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+144)
|
||||
|
||||
#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+143)
|
||||
#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+145)
|
||||
|
||||
#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+144)
|
||||
#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+145)
|
||||
#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+146)
|
||||
#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+147)
|
||||
#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+148)
|
||||
#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+149)
|
||||
#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+150)
|
||||
#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+151)
|
||||
#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+152)
|
||||
#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+153)
|
||||
#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+154)
|
||||
#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+155)
|
||||
#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+156)
|
||||
#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+157)
|
||||
#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+158)
|
||||
#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+159)
|
||||
#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+160)
|
||||
#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+161)
|
||||
#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+162)
|
||||
#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+163)
|
||||
#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+164)
|
||||
#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+165)
|
||||
#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+146)
|
||||
#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+147)
|
||||
#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+148)
|
||||
#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+149)
|
||||
#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+150)
|
||||
#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+151)
|
||||
#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+152)
|
||||
#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+153)
|
||||
#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+154)
|
||||
#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+155)
|
||||
#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+156)
|
||||
#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+157)
|
||||
#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+158)
|
||||
#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+159)
|
||||
#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+160)
|
||||
#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+161)
|
||||
#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+162)
|
||||
#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+163)
|
||||
#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+164)
|
||||
#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+165)
|
||||
#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+166)
|
||||
#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+167)
|
||||
|
||||
#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+166)
|
||||
#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+167)
|
||||
#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+168)
|
||||
#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+169)
|
||||
#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+170)
|
||||
#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+171)
|
||||
#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+172)
|
||||
#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+173)
|
||||
#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+174)
|
||||
#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+175)
|
||||
#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+176)
|
||||
#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+177)
|
||||
#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+178)
|
||||
#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+179)
|
||||
#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+180)
|
||||
#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+181)
|
||||
#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+182)
|
||||
#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+183)
|
||||
#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+184)
|
||||
#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+185)
|
||||
#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+186)
|
||||
#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+187)
|
||||
#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+168)
|
||||
#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+169)
|
||||
#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+170)
|
||||
#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+171)
|
||||
#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+172)
|
||||
#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+173)
|
||||
#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+174)
|
||||
#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+175)
|
||||
#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+176)
|
||||
#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+177)
|
||||
#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+178)
|
||||
#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+179)
|
||||
#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+180)
|
||||
#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+181)
|
||||
#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+182)
|
||||
#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+183)
|
||||
#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+184)
|
||||
#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+185)
|
||||
#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+186)
|
||||
#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+187)
|
||||
#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+188)
|
||||
#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+189)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Users tab ***********************************/
|
||||
|
|
|
@ -185,13 +185,18 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.96 (2016-12-11)"
|
||||
#define CSS_FILE "swad16.94.1.css"
|
||||
#define Log_PLATFORM_VERSION "SWAD 16.97 (2016-12-12)"
|
||||
#define CSS_FILE "swad16.97.css"
|
||||
#define JS_FILE "swad16.90.2.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 16.97: Dec 12, 2016 Exam announcements can be hidden. (210739 lines)
|
||||
2 changes necessary in database:
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1620','es','N','Ocultar convocatoria de examen');
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1621','es','N','Mostrar convocatoria de examen');
|
||||
|
||||
Version 16.96: Dec 11, 2016 Now removing an announcement of exam requires confirmation. (210563 lines)
|
||||
1 change necessary in database:
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1619','es','N','Solicitar eliminación de convocatoria');
|
||||
|
|
347
swad_exam.c
347
swad_exam.c
|
@ -78,9 +78,9 @@ static void Exa_PutIconToCreateNewExamAnnouncement (void);
|
|||
static void Exa_PutButtonToCreateNewExamAnnouncement (void);
|
||||
|
||||
static long Exa_AddExamAnnouncementToDB (void);
|
||||
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_ModifyExamAnnouncementInDB (void);
|
||||
static void Exa_GetDataExamAnnouncementFromDB (void);
|
||||
static void Exa_ShowExamAnnouncement (Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement);
|
||||
static void Exa_PutIconsExamAnnouncement (void);
|
||||
static void Exa_PutParamExaCodToEdit (void);
|
||||
static long Exa_GetParamExaCod (void);
|
||||
|
@ -93,20 +93,18 @@ static void Exa_GetNotifContentExamAnnouncement (char **ContentStr);
|
|||
|
||||
void Exa_PutFrmEditAExamAnnouncement (void)
|
||||
{
|
||||
long ExaCod;
|
||||
|
||||
/***** Allocate memory for the exam announcement *****/
|
||||
Exa_AllocMemExamAnnouncement ();
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
ExaCod = Exa_GetParamsExamAnnouncement ();
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod = Exa_GetParamsExamAnnouncement ();
|
||||
|
||||
if (ExaCod > 0) // -1 indicates that this is a new exam announcement
|
||||
if (Gbl.ExamAnnouncements.ExaDat.ExaCod > 0) // -1 indicates that this is a new exam announcement
|
||||
/***** Read exam announcement from the database *****/
|
||||
Exa_GetDataExamAnnouncementFromDB (ExaCod);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ShowExamAnnouncement (ExaCod,Exa_FORM_VIEW);
|
||||
Exa_ShowExamAnnouncement (Exa_FORM_VIEW);
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
@ -277,48 +275,50 @@ void Exa_FreeMemExamAnnouncement (void)
|
|||
/************************ Receive an exam announcement ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_ReceiveExamAnnouncement (void)
|
||||
void Exa_ReceiveExamAnnouncement1 (void)
|
||||
{
|
||||
extern const char *Txt_Created_new_announcement_of_exam;
|
||||
extern const char *Txt_The_announcement_of_exam_has_been_successfully_updated;
|
||||
long ExaCod;
|
||||
bool NewExamAnnouncement;
|
||||
unsigned NumUsrsToBeNotifiedByEMail;
|
||||
struct SocialPublishing SocPub;
|
||||
|
||||
/***** Allocate memory for the exam announcement *****/
|
||||
Exa_AllocMemExamAnnouncement ();
|
||||
|
||||
/***** Get parameters of the exam announcement *****/
|
||||
ExaCod = Exa_GetParamsExamAnnouncement ();
|
||||
NewExamAnnouncement = (ExaCod == -1L); // -1 indicates that it is a new exam announcement
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod = Exa_GetParamsExamAnnouncement ();
|
||||
Gbl.ExamAnnouncements.NewExamAnnouncement = (Gbl.ExamAnnouncements.ExaDat.ExaCod < 0);
|
||||
|
||||
/***** Add the exam announcement to the database and read it again from the database *****/
|
||||
if (NewExamAnnouncement)
|
||||
ExaCod = Exa_AddExamAnnouncementToDB ();
|
||||
if (Gbl.ExamAnnouncements.NewExamAnnouncement)
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod = Exa_AddExamAnnouncementToDB ();
|
||||
else
|
||||
Exa_ModifyExamAnnouncementInDB (ExaCod);
|
||||
Exa_ModifyExamAnnouncementInDB ();
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
}
|
||||
|
||||
void Exa_ReceiveExamAnnouncement2 (void)
|
||||
{
|
||||
extern const char *Txt_Created_new_announcement_of_exam;
|
||||
extern const char *Txt_The_announcement_of_exam_has_been_successfully_updated;
|
||||
unsigned NumUsrsToBeNotifiedByEMail;
|
||||
struct SocialPublishing SocPub;
|
||||
|
||||
/***** Show message *****/
|
||||
Lay_ShowAlert (Lay_SUCCESS,NewExamAnnouncement ? Txt_Created_new_announcement_of_exam :
|
||||
Txt_The_announcement_of_exam_has_been_successfully_updated);
|
||||
Lay_ShowAlert (Lay_SUCCESS,
|
||||
Gbl.ExamAnnouncements.NewExamAnnouncement ? Txt_Created_new_announcement_of_exam :
|
||||
Txt_The_announcement_of_exam_has_been_successfully_updated);
|
||||
|
||||
/***** Notify by email about the new exam announcement *****/
|
||||
if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_EXAM_ANNOUNCEMENT,ExaCod)))
|
||||
Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (ExaCod,NumUsrsToBeNotifiedByEMail);
|
||||
if ((NumUsrsToBeNotifiedByEMail = Ntf_StoreNotifyEventsToAllUsrs (Ntf_EVENT_EXAM_ANNOUNCEMENT,Gbl.ExamAnnouncements.ExaDat.ExaCod)))
|
||||
Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (Gbl.ExamAnnouncements.ExaDat.ExaCod,NumUsrsToBeNotifiedByEMail);
|
||||
Ntf_ShowAlertNumUsrsToBeNotifiedByEMail (NumUsrsToBeNotifiedByEMail);
|
||||
|
||||
/***** Create a new social note about the new exam announcement *****/
|
||||
Soc_StoreAndPublishSocialNote (Soc_NOTE_EXAM_ANNOUNCEMENT,ExaCod,&SocPub);
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ListExamAnnouncementsEdit ();
|
||||
Soc_StoreAndPublishSocialNote (Soc_NOTE_EXAM_ANNOUNCEMENT,Gbl.ExamAnnouncements.ExaDat.ExaCod,&SocPub);
|
||||
|
||||
/***** Update RSS of current course *****/
|
||||
RSS_UpdateRSSFileForACrs (&Gbl.CurrentCrs.Crs);
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ListExamAnnouncementsEdit ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -327,7 +327,7 @@ void Exa_ReceiveExamAnnouncement (void)
|
|||
|
||||
static void Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (long ExaCod,unsigned NumUsrsToBeNotifiedByEMail)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
|
||||
/***** Update number of users notified *****/
|
||||
sprintf (Query,"UPDATE exam_announcements SET NumNotif=NumNotif+'%u'"
|
||||
|
@ -342,20 +342,18 @@ static void Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (long ExaCod,u
|
|||
|
||||
void Exa_PrintExamAnnouncement (void)
|
||||
{
|
||||
long ExaCod;
|
||||
|
||||
/***** Allocate memory for the exam announcement *****/
|
||||
Exa_AllocMemExamAnnouncement ();
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
if ((Gbl.ExamAnnouncements.ExaDat.ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
|
||||
|
||||
/***** Read exam announcement from the database *****/
|
||||
Exa_GetDataExamAnnouncementFromDB (ExaCod);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ShowExamAnnouncement (ExaCod,Exa_PRINT_VIEW);
|
||||
Exa_ShowExamAnnouncement (Exa_PRINT_VIEW);
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
@ -369,10 +367,9 @@ void Exa_ReqRemoveExamAnnouncement (void)
|
|||
{
|
||||
extern const char *Txt_Do_you_really_want_to_remove_the_following_announcement_of_exam;
|
||||
extern const char *Txt_Remove;
|
||||
long ExaCod;
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
if ((Gbl.ExamAnnouncements.ExaDat.ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
|
||||
|
||||
/***** Message *****/
|
||||
|
@ -380,13 +377,13 @@ void Exa_ReqRemoveExamAnnouncement (void)
|
|||
|
||||
/***** View announcement *****/
|
||||
Exa_AllocMemExamAnnouncement ();
|
||||
Exa_GetDataExamAnnouncementFromDB (ExaCod);
|
||||
Exa_ShowExamAnnouncement (ExaCod,Exa_NORMAL_VIEW);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
Exa_ShowExamAnnouncement (Exa_NORMAL_VIEW);
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
||||
/***** Button of confirmation of removing *****/
|
||||
Act_FormStart (ActRemExaAnn);
|
||||
Exa_PutHiddenParamExaCod (ExaCod);
|
||||
Exa_PutParamExaCodToEdit ();
|
||||
Lay_PutRemoveButton (Txt_Remove);
|
||||
Act_FormEnd ();
|
||||
}
|
||||
|
@ -395,10 +392,9 @@ void Exa_ReqRemoveExamAnnouncement (void)
|
|||
/************************ Remove an exam announcement ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_RemoveExamAnnouncement (void)
|
||||
void Exa_RemoveExamAnnouncement1 (void)
|
||||
{
|
||||
extern const char *Txt_Announcement_of_exam_removed;
|
||||
char Query[1024];
|
||||
char Query[256];
|
||||
long ExaCod;
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
|
@ -408,8 +404,9 @@ void Exa_RemoveExamAnnouncement (void)
|
|||
/***** Mark the exam announcement as deleted in the database *****/
|
||||
sprintf (Query,"UPDATE exam_announcements SET Status='%u'"
|
||||
" WHERE ExaCod='%ld' AND CrsCod='%ld'",
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT,ExaCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
DB_QueryUPDATE (Query,"can not remove an exam announcement");
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT,
|
||||
ExaCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
DB_QueryUPDATE (Query,"can not remove exam announcement");
|
||||
|
||||
/***** Mark possible notifications as removed *****/
|
||||
Ntf_MarkNotifAsRemoved (Ntf_EVENT_EXAM_ANNOUNCEMENT,ExaCod);
|
||||
|
@ -417,14 +414,83 @@ void Exa_RemoveExamAnnouncement (void)
|
|||
/***** Mark possible social note as unavailable *****/
|
||||
Soc_MarkSocialNoteAsUnavailableUsingNoteTypeAndCod (Soc_NOTE_EXAM_ANNOUNCEMENT,ExaCod);
|
||||
|
||||
/***** Update RSS of current course *****/
|
||||
RSS_UpdateRSSFileForACrs (&Gbl.CurrentCrs.Crs);
|
||||
}
|
||||
|
||||
void Exa_RemoveExamAnnouncement2 (void)
|
||||
{
|
||||
extern const char *Txt_Announcement_of_exam_removed;
|
||||
|
||||
/***** Write message *****/
|
||||
Lay_ShowAlert (Lay_SUCCESS,Txt_Announcement_of_exam_removed);
|
||||
|
||||
/***** List again all the remaining exam announcements *****/
|
||||
Exa_ListExamAnnouncementsEdit ();
|
||||
}
|
||||
|
||||
/***** Update RSS of current course *****/
|
||||
RSS_UpdateRSSFileForACrs (&Gbl.CurrentCrs.Crs);
|
||||
/*****************************************************************************/
|
||||
/************************ Hide an exam announcement **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_HideExamAnnouncement1 (void)
|
||||
{
|
||||
char Query[256];
|
||||
long ExaCod;
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
|
||||
|
||||
/***** Mark the exam announcement as hidden in the database *****/
|
||||
sprintf (Query,"UPDATE exam_announcements SET Status='%u'"
|
||||
" WHERE ExaCod='%ld' AND CrsCod='%ld'",
|
||||
(unsigned) Exa_HIDDEN_EXAM_ANNOUNCEMENT,
|
||||
ExaCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
DB_QueryUPDATE (Query,"can not hide exam announcement");
|
||||
}
|
||||
|
||||
void Exa_HideExamAnnouncement2 (void)
|
||||
{
|
||||
extern const char *Txt_Announcement_of_exam_is_now_hidden;
|
||||
|
||||
/***** Write message to show the change made *****/
|
||||
Lay_ShowAlert (Lay_SUCCESS,Txt_Announcement_of_exam_is_now_hidden);
|
||||
|
||||
/***** Show exam announcements again *****/
|
||||
Exa_ListExamAnnouncementsEdit ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ Unhide an exam announcement ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_UnhideExamAnnouncement1 (void)
|
||||
{
|
||||
char Query[256];
|
||||
long ExaCod;
|
||||
|
||||
/***** Get the code of the exam announcement *****/
|
||||
if ((ExaCod = Exa_GetParamExaCod ()) <= 0)
|
||||
Lay_ShowErrorAndExit ("Code of exam announcement is missing.");
|
||||
|
||||
/***** Mark the exam announcement as visible in the database *****/
|
||||
sprintf (Query,"UPDATE exam_announcements SET Status='%u'"
|
||||
" WHERE ExaCod='%ld' AND CrsCod='%ld'",
|
||||
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT,
|
||||
ExaCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
DB_QueryUPDATE (Query,"can not unhide exam announcement");
|
||||
}
|
||||
|
||||
void Exa_UnhideExamAnnouncement2 (void)
|
||||
{
|
||||
extern const char *Txt_Announcement_of_exam_is_now_visible;
|
||||
|
||||
/***** Write message to show the change made *****/
|
||||
Lay_ShowAlert (Lay_SUCCESS,Txt_Announcement_of_exam_is_now_visible);
|
||||
|
||||
/***** Show exam announcements again *****/
|
||||
Exa_ListExamAnnouncementsEdit ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -484,24 +550,32 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
extern const char *Txt_Announcements_of_exams;
|
||||
extern const char *Txt_No_announcements_of_exams_of_X;
|
||||
char Query[512];
|
||||
char SubQueryStatus[64];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumExaAnn;
|
||||
unsigned long NumExaAnns;
|
||||
long ExaCod;
|
||||
bool ICanEdit = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
|
||||
|
||||
/***** Build subquery about status depending on my role *****/
|
||||
if (ICanEdit)
|
||||
sprintf (SubQueryStatus,"Status<>'%u'",
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
else
|
||||
sprintf (SubQueryStatus,"Status='%u'",
|
||||
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT);
|
||||
|
||||
/***** Show one highlighted exam announcement *****/
|
||||
if (Gbl.ExamAnnouncements.HighlightExaCod > 0)
|
||||
{
|
||||
/***** Get one exam announcement from database *****/
|
||||
sprintf (Query,"SELECT ExaCod"
|
||||
" FROM exam_announcements"
|
||||
" WHERE ExaCod='%ld' AND CrsCod='%ld' AND Status<>'%u'",
|
||||
" WHERE ExaCod='%ld'"
|
||||
" AND CrsCod='%ld' AND %s",
|
||||
Gbl.ExamAnnouncements.HighlightExaCod,
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
Gbl.CurrentCrs.Crs.CrsCod,SubQueryStatus);
|
||||
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course for listing");
|
||||
|
||||
/***** List the existing exam announcements *****/
|
||||
|
@ -512,17 +586,17 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
/***** Get the code of the exam announcement (row[0]) *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
if (sscanf (row[0],"%ld",&ExaCod) != 1)
|
||||
if (sscanf (row[0],"%ld",&Gbl.ExamAnnouncements.ExaDat.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);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ShowExamAnnouncement (ExaCod,TypeViewExamAnnouncement);
|
||||
Exa_ShowExamAnnouncement (TypeViewExamAnnouncement);
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
@ -536,11 +610,10 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
in current course for a date from database *****/
|
||||
sprintf (Query,"SELECT ExaCod"
|
||||
" FROM exam_announcements"
|
||||
" WHERE CrsCod='%ld' AND Status<>'%u'"
|
||||
" WHERE CrsCod='%ld' AND %s"
|
||||
" AND DATE(ExamDate)='%s'"
|
||||
" ORDER BY ExamDate DESC",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT,
|
||||
Gbl.CurrentCrs.Crs.CrsCod,SubQueryStatus,
|
||||
Gbl.ExamAnnouncements.HighlightDate);
|
||||
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course for listing");
|
||||
|
||||
|
@ -552,17 +625,17 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
/***** Get the code of the exam announcement (row[0]) *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
if (sscanf (row[0],"%ld",&ExaCod) != 1)
|
||||
if (sscanf (row[0],"%ld",&Gbl.ExamAnnouncements.ExaDat.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);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ShowExamAnnouncement (ExaCod,TypeViewExamAnnouncement);
|
||||
Exa_ShowExamAnnouncement (TypeViewExamAnnouncement);
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
@ -573,10 +646,9 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
in current course from database *****/
|
||||
sprintf (Query,"SELECT ExaCod"
|
||||
" FROM exam_announcements"
|
||||
" WHERE CrsCod='%ld' AND Status<>'%u'"
|
||||
" WHERE CrsCod='%ld' AND %s"
|
||||
" ORDER BY ExamDate DESC",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
Gbl.CurrentCrs.Crs.CrsCod,SubQueryStatus);
|
||||
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course for listing");
|
||||
|
||||
/***** Start frame *****/
|
||||
|
@ -604,17 +676,17 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx
|
|||
/***** Get the code of the exam announcement (row[0]) *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
if (sscanf (row[0],"%ld",&ExaCod) != 1)
|
||||
if (sscanf (row[0],"%ld",&Gbl.ExamAnnouncements.ExaDat.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);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Show exam announcement *****/
|
||||
Exa_ShowExamAnnouncement (ExaCod,TypeViewExamAnnouncement);
|
||||
Exa_ShowExamAnnouncement (TypeViewExamAnnouncement);
|
||||
|
||||
/***** Free memory of the exam announcement *****/
|
||||
Exa_FreeMemExamAnnouncement ();
|
||||
|
@ -680,7 +752,7 @@ static long Exa_AddExamAnnouncementToDB (void)
|
|||
"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,
|
||||
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT,
|
||||
Gbl.ExamAnnouncements.ExaDat.CrsFullName,
|
||||
Gbl.ExamAnnouncements.ExaDat.Year,
|
||||
Gbl.ExamAnnouncements.ExaDat.Session,
|
||||
|
@ -708,7 +780,7 @@ static long Exa_AddExamAnnouncementToDB (void)
|
|||
/*************** Modify an exam announcement in the database *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Exa_ModifyExamAnnouncementInDB (long ExaCod)
|
||||
static void Exa_ModifyExamAnnouncementInDB (void)
|
||||
{
|
||||
char *Query;
|
||||
|
||||
|
@ -739,7 +811,7 @@ static void Exa_ModifyExamAnnouncementInDB (long ExaCod)
|
|||
Gbl.ExamAnnouncements.ExaDat.MatRequired,
|
||||
Gbl.ExamAnnouncements.ExaDat.MatAllowed,
|
||||
Gbl.ExamAnnouncements.ExaDat.OtherInfo,
|
||||
ExaCod);
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod);
|
||||
DB_QueryUPDATE (Query,"can not update an exam announcement");
|
||||
free ((void *) Query);
|
||||
}
|
||||
|
@ -748,9 +820,9 @@ static void Exa_ModifyExamAnnouncementInDB (long ExaCod)
|
|||
/******* Create a list with the dates of all the exam announcements **********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_CreateListOfExamAnnouncements (void)
|
||||
void Exa_CreateListDatesOfExamAnnouncements (void)
|
||||
{
|
||||
char Query[512];
|
||||
char Query[256];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumExaAnn;
|
||||
|
@ -759,12 +831,13 @@ void Exa_CreateListOfExamAnnouncements (void)
|
|||
if (Gbl.DB.DatabaseIsOpen)
|
||||
{
|
||||
/***** Get exam dates (no matter in what order)
|
||||
of visible exam announcements
|
||||
in current course from database *****/
|
||||
sprintf (Query,"SELECT DISTINCT(DATE(ExamDate))"
|
||||
" FROM exam_announcements" \
|
||||
" WHERE CrsCod='%ld' AND Status<>'%u'",
|
||||
" WHERE CrsCod='%ld' AND Status='%u'",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
(unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT);
|
||||
(unsigned) Exa_VISIBLE_EXAM_ANNOUNCEMENT);
|
||||
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course");
|
||||
|
||||
/***** The result of the query may be empty *****/
|
||||
|
@ -819,22 +892,23 @@ void Exa_FreeListExamAnnouncements (void)
|
|||
/******** Read the data of an exam announcement from the database ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Exa_GetDataExamAnnouncementFromDB (long ExaCod)
|
||||
static void Exa_GetDataExamAnnouncementFromDB (void)
|
||||
{
|
||||
char Query[512];
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumExaAnns;
|
||||
unsigned UnsignedNum;
|
||||
unsigned Hour;
|
||||
unsigned Minute;
|
||||
unsigned Second;
|
||||
|
||||
/***** Get data of an exam announcement from database *****/
|
||||
sprintf (Query,"SELECT CrsCod,CrsFullName,Year,ExamSession,"
|
||||
sprintf (Query,"SELECT CrsCod,Status,CrsFullName,Year,ExamSession,"
|
||||
"CallDate,ExamDate,Duration,Place,ExamMode,"
|
||||
"Structure,DocRequired,MatRequired,MatAllowed,OtherInfo"
|
||||
" FROM exam_announcements WHERE ExaCod='%ld'",
|
||||
ExaCod);
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod);
|
||||
NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get data of an exam announcement");
|
||||
|
||||
/***** The result of the query must have one row *****/
|
||||
|
@ -847,60 +921,67 @@ static void Exa_GetDataExamAnnouncementFromDB (long ExaCod)
|
|||
/* Code of the course in which the exam announcement is inserted (row[0]) */
|
||||
Gbl.ExamAnnouncements.ExaDat.CrsCod = Str_ConvertStrCodToLongCod (row[0]);
|
||||
|
||||
/* Name of the course (row[1]) */
|
||||
strcpy (Gbl.ExamAnnouncements.ExaDat.CrsFullName,row[1]);
|
||||
/* Status of the exam announcement (row[1]) */
|
||||
if (sscanf (row[1],"%u",&UnsignedNum) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong status.");
|
||||
if (UnsignedNum >= Exa_NUM_STATUS)
|
||||
Lay_ShowErrorAndExit ("Wrong status.");
|
||||
Gbl.ExamAnnouncements.ExaDat.Status = (Exa_ExamAnnouncementStatus_t) UnsignedNum;
|
||||
|
||||
/* Year (row[2]) */
|
||||
if (sscanf (row[2],"%u",&Gbl.ExamAnnouncements.ExaDat.Year) != 1)
|
||||
/* Name of the course (row[2]) */
|
||||
strcpy (Gbl.ExamAnnouncements.ExaDat.CrsFullName,row[2]);
|
||||
|
||||
/* Year (row[3]) */
|
||||
if (sscanf (row[3],"%u",&Gbl.ExamAnnouncements.ExaDat.Year) != 1)
|
||||
Lay_ShowErrorAndExit ("Wrong year.");
|
||||
|
||||
/* Exam session (row[3]) */
|
||||
strcpy (Gbl.ExamAnnouncements.ExaDat.Session,row[3]);
|
||||
/* Exam session (row[4]) */
|
||||
strcpy (Gbl.ExamAnnouncements.ExaDat.Session,row[4]);
|
||||
|
||||
/* Date of exam announcement (row[4]) */
|
||||
if (sscanf (row[4],"%04u-%02u-%02u %02u:%02u:%02u",
|
||||
/* Date of exam announcement (row[5]) */
|
||||
if (sscanf (row[5],"%04u-%02u-%02u %02u:%02u:%02u",
|
||||
&Gbl.ExamAnnouncements.ExaDat.CallDate.Year,
|
||||
&Gbl.ExamAnnouncements.ExaDat.CallDate.Month,
|
||||
&Gbl.ExamAnnouncements.ExaDat.CallDate.Day,
|
||||
&Hour,&Minute,&Second) != 6)
|
||||
Lay_ShowErrorAndExit ("Wrong date of exam announcement.");
|
||||
|
||||
/* Date of exam (row[5]) */
|
||||
if (sscanf (row[5],"%04u-%02u-%02u %02u:%02u:%02u",
|
||||
/* Date of exam (row[6]) */
|
||||
if (sscanf (row[6],"%04u-%02u-%02u %02u:%02u:%02u",
|
||||
&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,&Second) != 6)
|
||||
Lay_ShowErrorAndExit ("Wrong date of exam.");
|
||||
|
||||
/* Approximate duration (row[6]) */
|
||||
if (sscanf (row[6],"%02u:%02u:%02u",&Gbl.ExamAnnouncements.ExaDat.Duration.Hour,&Gbl.ExamAnnouncements.ExaDat.Duration.Minute,&Second) != 3)
|
||||
/* Approximate duration (row[7]) */
|
||||
if (sscanf (row[7],"%02u:%02u:%02u",&Gbl.ExamAnnouncements.ExaDat.Duration.Hour,&Gbl.ExamAnnouncements.ExaDat.Duration.Minute,&Second) != 3)
|
||||
Lay_ShowErrorAndExit ("Wrong duration of exam.");
|
||||
|
||||
/* Place (row[7]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Place,row[7],Cns_MAX_BYTES_TEXT);
|
||||
/* Place (row[8]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Place,row[8],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.Place[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Exam mode (row[8]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Mode,row[8],Cns_MAX_BYTES_TEXT);
|
||||
/* Exam mode (row[9]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Mode,row[9],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.Mode[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Structure (row[9]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Structure,row[9],Cns_MAX_BYTES_TEXT);
|
||||
/* Structure (row[10]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.Structure,row[10],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.Structure[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Documentation required (row[10]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.DocRequired,row[10],Cns_MAX_BYTES_TEXT);
|
||||
/* Documentation required (row[11]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.DocRequired,row[11],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.DocRequired[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Material required (row[11]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.MatRequired,row[11],Cns_MAX_BYTES_TEXT);
|
||||
/* Material required (row[12]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.MatRequired,row[12],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.MatRequired[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Material allowed (row[12]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.MatAllowed,row[12],Cns_MAX_BYTES_TEXT);
|
||||
/* Material allowed (row[13]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.MatAllowed,row[13],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.MatAllowed[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/* Other information for students (row[13]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.OtherInfo,row[13],Cns_MAX_BYTES_TEXT);
|
||||
/* Other information for students (row[14]) */
|
||||
strncpy (Gbl.ExamAnnouncements.ExaDat.OtherInfo,row[14],Cns_MAX_BYTES_TEXT);
|
||||
Gbl.ExamAnnouncements.ExaDat.OtherInfo[Cns_MAX_BYTES_TEXT] = '\0';
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
|
@ -911,7 +992,7 @@ static void Exa_GetDataExamAnnouncementFromDB (long ExaCod)
|
|||
/************ Show a form with the data of an exam announcement **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement)
|
||||
static void Exa_ShowExamAnnouncement (Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement)
|
||||
{
|
||||
extern const char *Hlp_ASSESSMENT_Announcements_new_announcement;
|
||||
extern const char *Hlp_ASSESSMENT_Announcements_edit_announcement;
|
||||
|
@ -943,6 +1024,12 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
|
|||
struct Instit Ins;
|
||||
char StrExamDate[Cns_MAX_LENGTH_DATE+1];
|
||||
unsigned Year,Hour,Minute;
|
||||
const char *ClassExaAnnouncement[Exa_NUM_STATUS] =
|
||||
{
|
||||
"EXA_ANN_VISIBLE", // Exa_VISIBLE_EXAM_ANNOUNCEMENT
|
||||
"EXA_ANN_HIDDEN", // Exa_HIDDEN_EXAM_ANNOUNCEMENT
|
||||
NULL, // Exa_DELETED_EXAM_ANNOUNCEMENT, Not applicable here
|
||||
};
|
||||
|
||||
/***** Get data of institution of this degree *****/
|
||||
Ins.InsCod = Gbl.CurrentIns.Ins.InsCod;
|
||||
|
@ -963,25 +1050,24 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
|
|||
}
|
||||
|
||||
/***** Start frame *****/
|
||||
Gbl.ExamAnnouncements.ExaCodToEdit = ExaCod; // Used as parameter in contextual links
|
||||
Lay_StartRoundFrame ("625px",NULL,
|
||||
TypeViewExamAnnouncement == Exa_NORMAL_VIEW ? Exa_PutIconsExamAnnouncement :
|
||||
NULL,
|
||||
TypeViewExamAnnouncement == Exa_FORM_VIEW ? ((ExaCod > 0) ? Hlp_ASSESSMENT_Announcements_edit_announcement :
|
||||
Hlp_ASSESSMENT_Announcements_new_announcement) :
|
||||
TypeViewExamAnnouncement == Exa_FORM_VIEW ? ((Gbl.ExamAnnouncements.ExaDat.ExaCod > 0) ? Hlp_ASSESSMENT_Announcements_edit_announcement :
|
||||
Hlp_ASSESSMENT_Announcements_new_announcement) :
|
||||
NULL);
|
||||
|
||||
if (TypeViewExamAnnouncement == Exa_FORM_VIEW)
|
||||
{
|
||||
/***** Start form *****/
|
||||
Act_FormStart (ActRcvExaAnn);
|
||||
if (ExaCod > 0)
|
||||
Exa_PutHiddenParamExaCod (ExaCod);
|
||||
if (Gbl.ExamAnnouncements.ExaDat.ExaCod > 0) // Existing announcement of exam
|
||||
Exa_PutParamExaCodToEdit ();
|
||||
}
|
||||
|
||||
fprintf (Gbl.F.Out,"<table class=\"CELLS_PAD_2\""
|
||||
" style=\"width:100%%;"
|
||||
" padding:25px 25px 125px 25px;\">"); // Bottom space used for signatures
|
||||
/***** Start table *****/
|
||||
fprintf (Gbl.F.Out,"<table class=\"%s CELLS_PAD_2\">",
|
||||
ClassExaAnnouncement[Gbl.ExamAnnouncements.ExaDat.Status]);
|
||||
|
||||
/***** Institution logo *****/
|
||||
fprintf (Gbl.F.Out,"<tr>" \
|
||||
|
@ -1372,13 +1458,15 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
|
|||
fprintf (Gbl.F.Out,"%s",Gbl.ExamAnnouncements.ExaDat.OtherInfo);
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</td>" \
|
||||
"</tr>" \
|
||||
"</table>");
|
||||
"</tr>");
|
||||
|
||||
/***** End table *****/
|
||||
fprintf (Gbl.F.Out,"</table>");
|
||||
|
||||
/***** End frame *****/
|
||||
if (TypeViewExamAnnouncement == Exa_FORM_VIEW)
|
||||
Lay_EndRoundFrameWithButton ((ExaCod > 0) ? Lay_CONFIRM_BUTTON :
|
||||
Lay_CREATE_BUTTON,
|
||||
Lay_EndRoundFrameWithButton ((Gbl.ExamAnnouncements.ExaDat.ExaCod > 0) ? Lay_CONFIRM_BUTTON :
|
||||
Lay_CREATE_BUTTON,
|
||||
Txt_Publish_announcement_OF_EXAM);
|
||||
else
|
||||
Lay_EndRoundFrame ();
|
||||
|
@ -1394,6 +1482,8 @@ static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t
|
|||
static void Exa_PutIconsExamAnnouncement (void)
|
||||
{
|
||||
extern const char *Txt_Remove;
|
||||
extern const char *Txt_Show;
|
||||
extern const char *Txt_Hide;
|
||||
extern const char *Txt_Edit;
|
||||
extern const char *Txt_Print;
|
||||
|
||||
|
@ -1406,6 +1496,25 @@ static void Exa_PutIconsExamAnnouncement (void)
|
|||
Txt_Remove,NULL,
|
||||
NULL);
|
||||
|
||||
/***** Put form to hide/show exam announement *****/
|
||||
switch (Gbl.ExamAnnouncements.ExaDat.Status)
|
||||
{
|
||||
case Exa_VISIBLE_EXAM_ANNOUNCEMENT:
|
||||
Lay_PutContextualLink (ActHidExaAnn,Exa_PutParamExaCodToEdit,
|
||||
"eye-on64x64.png",
|
||||
Txt_Hide,NULL,
|
||||
NULL);
|
||||
break;
|
||||
case Exa_HIDDEN_EXAM_ANNOUNCEMENT:
|
||||
Lay_PutContextualLink (ActShoExaAnn,Exa_PutParamExaCodToEdit,
|
||||
"eye-slash-on64x64.png",
|
||||
Txt_Show,NULL,
|
||||
NULL);
|
||||
break;
|
||||
case Exa_DELETED_EXAM_ANNOUNCEMENT: // Not applicable here
|
||||
break;
|
||||
}
|
||||
|
||||
/***** Link to edit this exam announcement *****/
|
||||
Lay_PutContextualLink (ActEdiExaAnn,Exa_PutParamExaCodToEdit,
|
||||
"edit64x64.png",
|
||||
|
@ -1426,7 +1535,7 @@ static void Exa_PutIconsExamAnnouncement (void)
|
|||
|
||||
static void Exa_PutParamExaCodToEdit (void)
|
||||
{
|
||||
Exa_PutHiddenParamExaCod (Gbl.ExamAnnouncements.ExaCodToEdit);
|
||||
Exa_PutHiddenParamExaCod (Gbl.ExamAnnouncements.ExaDat.ExaCod);
|
||||
}
|
||||
|
||||
void Exa_PutHiddenParamExaCod (long ExaCod)
|
||||
|
@ -1462,13 +1571,15 @@ void Exa_GetSummaryAndContentExamAnnouncement (char *SummaryStr,char **ContentSt
|
|||
{
|
||||
extern const char *Txt_hours_ABBREVIATION;
|
||||
|
||||
/***** Initializations *****/
|
||||
Gbl.ExamAnnouncements.ExaDat.ExaCod = ExaCod;
|
||||
SummaryStr[0] = '\0'; // Return nothing on error
|
||||
|
||||
/***** Allocate memory for the exam announcement *****/
|
||||
Exa_AllocMemExamAnnouncement ();
|
||||
|
||||
/***** Get data of an exam announcement from database *****/
|
||||
Exa_GetDataExamAnnouncementFromDB (ExaCod);
|
||||
Exa_GetDataExamAnnouncementFromDB ();
|
||||
|
||||
/***** Content *****/
|
||||
if (GetContent)
|
||||
|
|
44
swad_exam.h
44
swad_exam.h
|
@ -29,6 +29,9 @@
|
|||
|
||||
#include <stdbool.h> // For boolean type
|
||||
|
||||
#include "swad_constant.h"
|
||||
#include "swad_date.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Public types and constants ***********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -40,22 +43,51 @@ typedef enum
|
|||
Exa_FORM_VIEW,
|
||||
} Exa_TypeViewExamAnnouncement_t;
|
||||
|
||||
#define Exa_NUM_STATUS 3
|
||||
typedef enum
|
||||
{
|
||||
Exa_ACTIVE_EXAM_ANNOUNCEMENT = 0,
|
||||
Exa_OBSOLETE_EXAM_ANNOUNCEMENT = 1,
|
||||
Exa_DELETED_EXAM_ANNOUNCEMENT = 2,
|
||||
Exa_VISIBLE_EXAM_ANNOUNCEMENT = 0,
|
||||
Exa_HIDDEN_EXAM_ANNOUNCEMENT = 1,
|
||||
Exa_DELETED_EXAM_ANNOUNCEMENT = 2,
|
||||
} Exa_ExamAnnouncementStatus_t; // Don't change these numbers because they are used in database
|
||||
|
||||
struct ExamData
|
||||
{
|
||||
long ExaCod;
|
||||
long CrsCod;
|
||||
Exa_ExamAnnouncementStatus_t Status;
|
||||
char CrsFullName[Cns_MAX_BYTES_STRING+1];
|
||||
unsigned Year; // Number of year (0 (N.A.), 1, 2, 3, 4, 5, 6) in the degree
|
||||
char Session[Cns_MAX_BYTES_STRING+1]; // Exam session is june, september, etc.
|
||||
struct Date CallDate;
|
||||
struct Date ExamDate;
|
||||
struct Hour StartTime;
|
||||
struct Hour Duration;
|
||||
char *Place;
|
||||
char *Mode;
|
||||
char *Structure;
|
||||
char *DocRequired;
|
||||
char *MatRequired;
|
||||
char *MatAllowed;
|
||||
char *OtherInfo;
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Public prototypes *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Exa_PutFrmEditAExamAnnouncement (void);
|
||||
void Exa_ReceiveExamAnnouncement (void);
|
||||
void Exa_ReceiveExamAnnouncement1 (void);
|
||||
void Exa_ReceiveExamAnnouncement2 (void);
|
||||
void Exa_PrintExamAnnouncement (void);
|
||||
void Exa_ReqRemoveExamAnnouncement (void);
|
||||
void Exa_RemoveExamAnnouncement (void);
|
||||
void Exa_RemoveExamAnnouncement1 (void);
|
||||
void Exa_RemoveExamAnnouncement2 (void);
|
||||
void Exa_HideExamAnnouncement1 (void);
|
||||
void Exa_HideExamAnnouncement2 (void);
|
||||
void Exa_UnhideExamAnnouncement1 (void);
|
||||
void Exa_UnhideExamAnnouncement2 (void);
|
||||
|
||||
void Exa_FreeMemExamAnnouncement (void);
|
||||
void Exa_FreeListExamAnnouncements (void);
|
||||
void Exa_ListExamAnnouncementsSee (void);
|
||||
|
@ -63,7 +95,7 @@ void Exa_ListExamAnnouncementsSee (void);
|
|||
void Exa_GetExaCodToHighlight (void);
|
||||
void Exa_GetDateToHighlight (void);
|
||||
|
||||
void Exa_CreateListOfExamAnnouncements (void);
|
||||
void Exa_CreateListDatesOfExamAnnouncements (void);
|
||||
void Exa_PutHiddenParamExaCod (long ExaCod);
|
||||
void Exa_GetSummaryAndContentExamAnnouncement (char *SummaryStr,char **ContentStr,
|
||||
long ExaCod,unsigned MaxChars,bool GetContent);
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "swad_cryptography.h"
|
||||
#include "swad_department.h"
|
||||
#include "swad_degree_type.h"
|
||||
#include "swad_exam.h"
|
||||
#include "swad_file.h"
|
||||
#include "swad_file_browser.h"
|
||||
#include "swad_forum.h"
|
||||
|
@ -486,27 +487,10 @@ struct Globals
|
|||
{
|
||||
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 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;
|
||||
char CrsFullName[Cns_MAX_BYTES_STRING+1];
|
||||
unsigned Year; // Number of year (0 (N.A.), 1, 2, 3, 4, 5, 6) in the degree
|
||||
char Session[Cns_MAX_BYTES_STRING+1]; // Exam session is june, september, etc.
|
||||
struct Date CallDate;
|
||||
struct Date ExamDate;
|
||||
struct Hour StartTime;
|
||||
struct Hour Duration;
|
||||
char *Place;
|
||||
char *Mode;
|
||||
char *Structure;
|
||||
char *DocRequired;
|
||||
char *MatRequired;
|
||||
char *MatAllowed;
|
||||
char *OtherInfo;
|
||||
} ExaDat;
|
||||
struct ExamData ExaDat;
|
||||
bool NewExamAnnouncement;
|
||||
} ExamAnnouncements;
|
||||
struct
|
||||
{
|
||||
|
|
|
@ -498,7 +498,7 @@ static void Lay_WriteScripts (void)
|
|||
}
|
||||
|
||||
/***** Create list of calls for examination *****/
|
||||
Exa_CreateListOfExamAnnouncements ();
|
||||
Exa_CreateListDatesOfExamAnnouncements ();
|
||||
|
||||
/***** Write script to initialize variables used to draw months *****/
|
||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n"
|
||||
|
|
42
swad_text.c
42
swad_text.c
|
@ -2489,6 +2489,48 @@ const char *Txt_Announcement_of_exam_removed =
|
|||
"Chamada para exame removida.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Announcement_of_exam_is_now_hidden =
|
||||
#if L==1
|
||||
"Convocatoria d'examen ara està oculta.";
|
||||
#elif L==2
|
||||
"Aufruf zur Prüfung ist jetzt ausgeblendet.";
|
||||
#elif L==3
|
||||
"Announcement of exam is now hidden.";
|
||||
#elif L==4
|
||||
"Convocatoria de examen ahora está oculta.";
|
||||
#elif L==5
|
||||
"Convocation pour l'examen est maintenant caché.";
|
||||
#elif L==6
|
||||
"Convocatoria de examen ahora está oculta."; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Appello d'esame è ora nascosto.";
|
||||
#elif L==8
|
||||
"Ogloszenie egzamin jest teraz ukryte.";
|
||||
#elif L==9
|
||||
"Chamada para exame é agora oculta.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Announcement_of_exam_is_now_visible =
|
||||
#if L==1
|
||||
"Convocatoria d'examen ara està visible.";
|
||||
#elif L==2
|
||||
"Aufruf zur Prüfung ist jetzt sichtbar.";
|
||||
#elif L==3
|
||||
"Announcement of exam is now visible.";
|
||||
#elif L==4
|
||||
"Convocatoria de examen ahora está visible.";
|
||||
#elif L==5
|
||||
"Convocation pour l'examen est maintenant visible.";
|
||||
#elif L==6
|
||||
"Convocatoria de examen ahora está visible."; // Okoteve traducción
|
||||
#elif L==7
|
||||
"Appello d'esame è ora visibile.";
|
||||
#elif L==8
|
||||
"Ogloszenie egzamin jest teraz widoczny.";
|
||||
#elif L==9
|
||||
"Chamada para exame é agora visível.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Announcements_of_exams =
|
||||
#if L==1
|
||||
"Convocatòries d'exàmens";
|
||||
|
|
Loading…
Reference in New Issue
Block a user