Version19.211

This commit is contained in:
acanas 2020-05-05 20:09:28 +02:00
parent 85c3748a08
commit 6be20ecad1
11 changed files with 436 additions and 292 deletions

View File

@ -472,6 +472,7 @@ CREATE TABLE IF NOT EXISTS exa_groups (
CREATE TABLE IF NOT EXISTS exa_events (
EvtCod INT NOT NULL AUTO_INCREMENT,
ExaCod INT NOT NULL,
Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',
UsrCod INT NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,

View File

@ -679,6 +679,8 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActReqRemExaEvt ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_RequestRemoveEvent ,NULL},
[ActRemExaEvt ] = {1851,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_RemoveEvent ,NULL},
[ActHidExaEvt ] = {1900,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_HideEvent ,NULL},
[ActShoExaEvt ] = {1901,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_UnhideEvent ,NULL},
[ActReqNewExaEvt ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_RequestNewEvent ,NULL},
[ActNewExaEvt ] = {1853,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaEvt_CreateNewEventTch ,NULL},
[ActResExaEvt ] = {1854,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ResumeEvent ,NULL},
@ -3710,6 +3712,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActChgTitExaSet, // #1897
ActNewExaSet, // #1898
ActChgNumQstExaSet, // #1899
ActHidExaEvt, // #1900
ActShoExaEvt, // #1901
};
/*****************************************************************************/

View File

@ -64,7 +64,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_MAX_ACTION_COD 1899
#define Act_MAX_ACTION_COD 1901
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -646,133 +646,135 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActSeeExa (ActChgCrsTT1stDay + 123)
#define ActReqRemExaEvt (ActChgCrsTT1stDay + 124)
#define ActRemExaEvt (ActChgCrsTT1stDay + 125)
#define ActReqNewExaEvt (ActChgCrsTT1stDay + 126)
#define ActNewExaEvt (ActChgCrsTT1stDay + 127)
#define ActResExaEvt (ActChgCrsTT1stDay + 128)
#define ActBckExaEvt (ActChgCrsTT1stDay + 129)
#define ActPlyPauExaEvt (ActChgCrsTT1stDay + 130)
#define ActFwdExaEvt (ActChgCrsTT1stDay + 131)
#define ActChgNumColExaEvt (ActChgCrsTT1stDay + 132)
#define ActChgVisResExaEvtQst (ActChgCrsTT1stDay + 133)
#define ActExaEvtCntDwn (ActChgCrsTT1stDay + 134)
#define ActRefExaEvtTch (ActChgCrsTT1stDay + 135)
#define ActJoiExaEvt (ActChgCrsTT1stDay + 136)
#define ActSeeExaEvtAnsQstStd (ActChgCrsTT1stDay + 137)
#define ActRemExaEvtAnsQstStd (ActChgCrsTT1stDay + 138)
#define ActAnsExaEvtQstStd (ActChgCrsTT1stDay + 139)
#define ActRefExaEvtStd (ActChgCrsTT1stDay + 140)
#define ActHidExaEvt (ActChgCrsTT1stDay + 126)
#define ActShoExaEvt (ActChgCrsTT1stDay + 127)
#define ActReqNewExaEvt (ActChgCrsTT1stDay + 128)
#define ActNewExaEvt (ActChgCrsTT1stDay + 129)
#define ActResExaEvt (ActChgCrsTT1stDay + 130)
#define ActBckExaEvt (ActChgCrsTT1stDay + 131)
#define ActPlyPauExaEvt (ActChgCrsTT1stDay + 132)
#define ActFwdExaEvt (ActChgCrsTT1stDay + 133)
#define ActChgNumColExaEvt (ActChgCrsTT1stDay + 134)
#define ActChgVisResExaEvtQst (ActChgCrsTT1stDay + 135)
#define ActExaEvtCntDwn (ActChgCrsTT1stDay + 136)
#define ActRefExaEvtTch (ActChgCrsTT1stDay + 137)
#define ActJoiExaEvt (ActChgCrsTT1stDay + 138)
#define ActSeeExaEvtAnsQstStd (ActChgCrsTT1stDay + 139)
#define ActRemExaEvtAnsQstStd (ActChgCrsTT1stDay + 140)
#define ActAnsExaEvtQstStd (ActChgCrsTT1stDay + 141)
#define ActRefExaEvtStd (ActChgCrsTT1stDay + 142)
#define ActSeeMyExaEvtResCrs (ActChgCrsTT1stDay + 141)
#define ActSeeMyExaEvtResExa (ActChgCrsTT1stDay + 142)
#define ActSeeMyExaEvtResEvt (ActChgCrsTT1stDay + 143)
#define ActSeeOneExaEvtResMe (ActChgCrsTT1stDay + 144)
#define ActSeeMyExaEvtResCrs (ActChgCrsTT1stDay + 143)
#define ActSeeMyExaEvtResExa (ActChgCrsTT1stDay + 144)
#define ActSeeMyExaEvtResEvt (ActChgCrsTT1stDay + 145)
#define ActSeeOneExaEvtResMe (ActChgCrsTT1stDay + 146)
#define ActReqSeeAllExaEvtRes (ActChgCrsTT1stDay + 145)
#define ActSeeAllExaEvtResCrs (ActChgCrsTT1stDay + 146)
#define ActSeeAllExaEvtResExa (ActChgCrsTT1stDay + 147)
#define ActSeeAllExaEvtResEvt (ActChgCrsTT1stDay + 148)
#define ActSeeOneExaEvtResOth (ActChgCrsTT1stDay + 149)
#define ActReqSeeAllExaEvtRes (ActChgCrsTT1stDay + 147)
#define ActSeeAllExaEvtResCrs (ActChgCrsTT1stDay + 148)
#define ActSeeAllExaEvtResExa (ActChgCrsTT1stDay + 149)
#define ActSeeAllExaEvtResEvt (ActChgCrsTT1stDay + 150)
#define ActSeeOneExaEvtResOth (ActChgCrsTT1stDay + 151)
#define ActChgVisResExaEvtUsr (ActChgCrsTT1stDay + 150)
#define ActChgVisResExaEvtUsr (ActChgCrsTT1stDay + 152)
#define ActFrmNewExa (ActChgCrsTT1stDay + 151)
#define ActEdiOneExa (ActChgCrsTT1stDay + 152)
#define ActNewExa (ActChgCrsTT1stDay + 153)
#define ActChgExa (ActChgCrsTT1stDay + 154)
#define ActReqRemExa (ActChgCrsTT1stDay + 155)
#define ActRemExa (ActChgCrsTT1stDay + 156)
#define ActHidExa (ActChgCrsTT1stDay + 157)
#define ActShoExa (ActChgCrsTT1stDay + 158)
#define ActFrmNewExaSet (ActChgCrsTT1stDay + 159)
#define ActNewExaSet (ActChgCrsTT1stDay + 160)
#define ActReqRemExaSet (ActChgCrsTT1stDay + 161)
#define ActRemExaSet (ActChgCrsTT1stDay + 162)
#define ActUp_ExaSet (ActChgCrsTT1stDay + 163)
#define ActDwnExaSet (ActChgCrsTT1stDay + 164)
#define ActChgTitExaSet (ActChgCrsTT1stDay + 165)
#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 166)
#define ActFrmNewExa (ActChgCrsTT1stDay + 153)
#define ActEdiOneExa (ActChgCrsTT1stDay + 154)
#define ActNewExa (ActChgCrsTT1stDay + 155)
#define ActChgExa (ActChgCrsTT1stDay + 156)
#define ActReqRemExa (ActChgCrsTT1stDay + 157)
#define ActRemExa (ActChgCrsTT1stDay + 158)
#define ActHidExa (ActChgCrsTT1stDay + 159)
#define ActShoExa (ActChgCrsTT1stDay + 160)
#define ActFrmNewExaSet (ActChgCrsTT1stDay + 161)
#define ActNewExaSet (ActChgCrsTT1stDay + 162)
#define ActReqRemExaSet (ActChgCrsTT1stDay + 163)
#define ActRemExaSet (ActChgCrsTT1stDay + 164)
#define ActUp_ExaSet (ActChgCrsTT1stDay + 165)
#define ActDwnExaSet (ActChgCrsTT1stDay + 166)
#define ActChgTitExaSet (ActChgCrsTT1stDay + 167)
#define ActChgNumQstExaSet (ActChgCrsTT1stDay + 168)
#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 167)
#define ActLstTstQstForSet (ActChgCrsTT1stDay + 168)
#define ActAddQstToExa (ActChgCrsTT1stDay + 169)
#define ActReqRemSetQst (ActChgCrsTT1stDay + 170)
#define ActRemExaQst (ActChgCrsTT1stDay + 171)
#define ActReqAddQstExaSet (ActChgCrsTT1stDay + 169)
#define ActLstTstQstForSet (ActChgCrsTT1stDay + 170)
#define ActAddQstToExa (ActChgCrsTT1stDay + 171)
#define ActReqRemSetQst (ActChgCrsTT1stDay + 172)
#define ActRemExaQst (ActChgCrsTT1stDay + 173)
#define ActSeeGam (ActChgCrsTT1stDay + 172)
#define ActReqRemMch (ActChgCrsTT1stDay + 173)
#define ActRemMch (ActChgCrsTT1stDay + 174)
#define ActReqNewMch (ActChgCrsTT1stDay + 175)
#define ActNewMch (ActChgCrsTT1stDay + 176)
#define ActResMch (ActChgCrsTT1stDay + 177)
#define ActBckMch (ActChgCrsTT1stDay + 178)
#define ActPlyPauMch (ActChgCrsTT1stDay + 179)
#define ActFwdMch (ActChgCrsTT1stDay + 180)
#define ActChgNumColMch (ActChgCrsTT1stDay + 181)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 182)
#define ActMchCntDwn (ActChgCrsTT1stDay + 183)
#define ActRefMchTch (ActChgCrsTT1stDay + 184)
#define ActSeeGam (ActChgCrsTT1stDay + 174)
#define ActReqRemMch (ActChgCrsTT1stDay + 175)
#define ActRemMch (ActChgCrsTT1stDay + 176)
#define ActReqNewMch (ActChgCrsTT1stDay + 177)
#define ActNewMch (ActChgCrsTT1stDay + 178)
#define ActResMch (ActChgCrsTT1stDay + 179)
#define ActBckMch (ActChgCrsTT1stDay + 180)
#define ActPlyPauMch (ActChgCrsTT1stDay + 181)
#define ActFwdMch (ActChgCrsTT1stDay + 182)
#define ActChgNumColMch (ActChgCrsTT1stDay + 183)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 184)
#define ActMchCntDwn (ActChgCrsTT1stDay + 185)
#define ActRefMchTch (ActChgCrsTT1stDay + 186)
#define ActJoiMch (ActChgCrsTT1stDay + 185)
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 186)
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 187)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 188)
#define ActRefMchStd (ActChgCrsTT1stDay + 189)
#define ActJoiMch (ActChgCrsTT1stDay + 187)
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 188)
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 189)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 190)
#define ActRefMchStd (ActChgCrsTT1stDay + 191)
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 190)
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 191)
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 192)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 193)
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 192)
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 193)
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 194)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 195)
#define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 194)
#define ActSeeAllMchResCrs (ActChgCrsTT1stDay + 195)
#define ActSeeAllMchResGam (ActChgCrsTT1stDay + 196)
#define ActSeeAllMchResMch (ActChgCrsTT1stDay + 197)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 198)
#define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 196)
#define ActSeeAllMchResCrs (ActChgCrsTT1stDay + 197)
#define ActSeeAllMchResGam (ActChgCrsTT1stDay + 198)
#define ActSeeAllMchResMch (ActChgCrsTT1stDay + 199)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 200)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 199)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 201)
#define ActFrmNewGam (ActChgCrsTT1stDay + 200)
#define ActEdiOneGam (ActChgCrsTT1stDay + 201)
#define ActNewGam (ActChgCrsTT1stDay + 202)
#define ActChgGam (ActChgCrsTT1stDay + 203)
#define ActReqRemGam (ActChgCrsTT1stDay + 204)
#define ActRemGam (ActChgCrsTT1stDay + 205)
#define ActHidGam (ActChgCrsTT1stDay + 206)
#define ActShoGam (ActChgCrsTT1stDay + 207)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 208)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 209)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 210)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 211)
#define ActRemGamQst (ActChgCrsTT1stDay + 212)
#define ActUp_GamQst (ActChgCrsTT1stDay + 213)
#define ActDwnGamQst (ActChgCrsTT1stDay + 214)
#define ActFrmNewGam (ActChgCrsTT1stDay + 202)
#define ActEdiOneGam (ActChgCrsTT1stDay + 203)
#define ActNewGam (ActChgCrsTT1stDay + 204)
#define ActChgGam (ActChgCrsTT1stDay + 205)
#define ActReqRemGam (ActChgCrsTT1stDay + 206)
#define ActRemGam (ActChgCrsTT1stDay + 207)
#define ActHidGam (ActChgCrsTT1stDay + 208)
#define ActShoGam (ActChgCrsTT1stDay + 209)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 210)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 211)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 212)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 213)
#define ActRemGamQst (ActChgCrsTT1stDay + 214)
#define ActUp_GamQst (ActChgCrsTT1stDay + 215)
#define ActDwnGamQst (ActChgCrsTT1stDay + 216)
#define ActSeeSvy (ActChgCrsTT1stDay + 215)
#define ActAnsSvy (ActChgCrsTT1stDay + 216)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 217)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 218)
#define ActNewSvy (ActChgCrsTT1stDay + 219)
#define ActChgSvy (ActChgCrsTT1stDay + 220)
#define ActReqRemSvy (ActChgCrsTT1stDay + 221)
#define ActRemSvy (ActChgCrsTT1stDay + 222)
#define ActReqRstSvy (ActChgCrsTT1stDay + 223)
#define ActRstSvy (ActChgCrsTT1stDay + 224)
#define ActHidSvy (ActChgCrsTT1stDay + 225)
#define ActShoSvy (ActChgCrsTT1stDay + 226)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 227)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 228)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 229)
#define ActRemSvyQst (ActChgCrsTT1stDay + 230)
#define ActSeeSvy (ActChgCrsTT1stDay + 217)
#define ActAnsSvy (ActChgCrsTT1stDay + 218)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 219)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 220)
#define ActNewSvy (ActChgCrsTT1stDay + 221)
#define ActChgSvy (ActChgCrsTT1stDay + 222)
#define ActReqRemSvy (ActChgCrsTT1stDay + 223)
#define ActRemSvy (ActChgCrsTT1stDay + 224)
#define ActReqRstSvy (ActChgCrsTT1stDay + 225)
#define ActRstSvy (ActChgCrsTT1stDay + 226)
#define ActHidSvy (ActChgCrsTT1stDay + 227)
#define ActShoSvy (ActChgCrsTT1stDay + 228)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 229)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 230)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 231)
#define ActRemSvyQst (ActChgCrsTT1stDay + 232)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 231)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 232)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 233)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 234)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 235)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 236)
#define ActRemExaAnn (ActChgCrsTT1stDay + 237)
#define ActHidExaAnn (ActChgCrsTT1stDay + 238)
#define ActShoExaAnn (ActChgCrsTT1stDay + 239)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 233)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 234)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 235)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 236)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 237)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 238)
#define ActRemExaAnn (ActChgCrsTT1stDay + 239)
#define ActHidExaAnn (ActChgCrsTT1stDay + 240)
#define ActShoExaAnn (ActChgCrsTT1stDay + 241)
/*****************************************************************************/
/******************************** Files tab **********************************/

View File

@ -544,10 +544,15 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.210.4 (2020-05-05)"
#define Log_PLATFORM_VERSION "SWAD 19.211 (2020-05-05)"
#define CSS_FILE "swad19.193.1.css"
#define JS_FILE "swad19.193.1.js"
/*
Version 19.211: May 05, 2020 Exam events can be hidden. (301215 lines)
1 change necessary in database:
ALTER TABLE exa_events ADD COLUMN Hidden ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER ExaCod;
Version 19.210.4: May 05, 2020 Fixed bug searching courses. (301103 lines)
Version 19.210.3: May 03, 2020 All figures cacheable are cached everytime they are calculated. (301089 lines)
Version 19.210.2: May 03, 2020 More figures cached. (301125 lines)

View File

@ -1045,6 +1045,7 @@ mysql> DESCRIBE exa_events;
+----------------+------------------------------------------------+------+-----+---------+----------------+
| EvtCod | int(11) | NO | PRI | NULL | auto_increment |
| ExaCod | int(11) | NO | MUL | NULL | |
| Hidden | enum('N','Y') | NO | | N | |
| UsrCod | int(11) | NO | | NULL | |
| StartTime | datetime | NO | | NULL | |
| EndTime | datetime | NO | | NULL | |
@ -1057,11 +1058,12 @@ mysql> DESCRIBE exa_events;
| ShowQstResults | enum('N','Y') | NO | | N | |
| ShowUsrResults | enum('N','Y') | NO | | N | |
+----------------+------------------------------------------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)
14 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_events ("
"EvtCod INT NOT NULL AUTO_INCREMENT,"
"ExaCod INT NOT NULL,"
"Hidden ENUM('N','Y') NOT NULL DEFAULT 'N',"
"UsrCod INT NOT NULL,"
"StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL,"

View File

@ -126,7 +126,7 @@ static void Exa_WriteAuthor (struct Exa_Exam *Exam);
static void Exa_PutHiddenParamExamOrder (Exa_Order_t SelectedOrder);
static void Exa_PutFormsToRemEditOneExam (struct Exa_Exams *Exams,
static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
const struct Exa_Exam *Exam,
const char *Anchor);
@ -252,11 +252,11 @@ void Exa_ResetExam (struct Exa_Exam *Exam)
Exam->TimeUTC[Dat_START_TIME] = (time_t) 0;
Exam->TimeUTC[Dat_END_TIME ] = (time_t) 0;
Exam->Title[0] = '\0';
Exam->Hidden = false;
Exam->NumSets = 0;
Exam->NumQsts = 0;
Exam->NumEvts = 0;
Exam->NumUnfinishedEvts = 0;
Exam->Hidden = false;
}
/*****************************************************************************/
@ -582,7 +582,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,
HTM_TD_Begin ("rowspan=\"2\" class=\"CONTEXT_COL COLOR%u\"",Gbl.RowEvenOdd);
/* Icons to remove/edit this exam */
Exa_PutFormsToRemEditOneExam (Exams,Exam,Anchor);
Exa_PutIconsToRemEditOneExam (Exams,Exam,Anchor);
HTM_TD_End ();
}
@ -758,7 +758,7 @@ static void Exa_PutHiddenParamExamOrder (Exa_Order_t SelectedOrder)
/******************** Put a link (form) to edit one exam *********************/
/*****************************************************************************/
static void Exa_PutFormsToRemEditOneExam (struct Exa_Exams *Exams,
static void Exa_PutIconsToRemEditOneExam (struct Exa_Exams *Exams,
const struct Exa_Exam *Exam,
const char *Anchor)
{
@ -1424,7 +1424,7 @@ void Exa_HideExam (void)
}
/*****************************************************************************/
/******************************** Show an exam ******************************/
/******************************* Unhide an exam ******************************/
/*****************************************************************************/
void Exa_UnhideExam (void)
@ -1452,8 +1452,8 @@ void Exa_UnhideExam (void)
Exa_GetDataOfExamByCod (&Exam);
Exams.ExaCod = Exam.ExaCod;
/***** Show exam *****/
DB_QueryUPDATE ("can not show exam",
/***** Unhide exam *****/
DB_QueryUPDATE ("can not unhide exam",
"UPDATE exa_exams SET Hidden='N' WHERE ExaCod=%ld",
Exam.ExaCod);

View File

@ -114,10 +114,12 @@ static void ExaEvt_ListOneOrMoreEventsHeading (bool ICanEditEvents);
static bool ExaEvt_CheckIfICanEditEvents (void);
static bool ExaEvt_CheckIfICanEditThisEvent (const struct ExaEvt_Event *Event);
static void ExaEvt_ListOneOrMoreEventsIcons (struct Exa_Exams *Exams,
const struct ExaEvt_Event *Event);
const struct ExaEvt_Event *Event,
const char *Anchor);
static void ExaEvt_ListOneOrMoreEventsAuthor (const struct ExaEvt_Event *Event);
static void ExaEvt_ListOneOrMoreEventsTimes (const struct ExaEvt_Event *Event,unsigned UniqueId);
static void ExaEvt_ListOneOrMoreEventsTitleGrps (const struct ExaEvt_Event *Event);
static void ExaEvt_ListOneOrMoreEventsTitleGrps (const struct ExaEvt_Event *Event,
const char *Anchor);
static void ExaEvt_GetAndWriteNamesOfGrpsAssociatedToEvent (const struct ExaEvt_Event *Event);
static void ExaEvt_ListOneOrMoreEventsNumParticipants (const struct ExaEvt_Event *Event);
static void ExaEvt_ListOneOrMoreEventsStatus (struct ExaEvt_Event *Event,unsigned NumQsts);
@ -253,13 +255,18 @@ long ExaEvt_GetEvtCodBeingPlayed (void)
void ExaEvt_ResetEvent (struct ExaEvt_Event *Event)
{
Dat_StartEndTime_t StartEndTime;
/***** Initialize to empty match *****/
Event->EvtCod = -1L;
Event->ExaCod = -1L;
Event->UsrCod = -1L;
Event->TimeUTC[Dat_START_TIME] = (time_t) 0;
Event->TimeUTC[Dat_END_TIME ] = (time_t) 0;
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
Event->TimeUTC[StartEndTime] = (time_t) 0;
Event->Title[0] = '\0';
Event->Hidden = false;
Event->Status.QstInd = 0;
Event->Status.QstCod = -1L;
Event->Status.QstStartTimeUTC = (time_t) 0;
@ -309,19 +316,20 @@ void ExaEvt_ListEvents (struct Exa_Exams *Exams,
/* Make query */
NumEvents = (unsigned) DB_QuerySELECT (&mysql_res,"can not get events",
"SELECT EvtCod," // row[ 0]
"ExaCod," // row[ 1]
"UsrCod," // row[ 2]
"UNIX_TIMESTAMP(StartTime)," // row[ 3]
"UNIX_TIMESTAMP(EndTime)," // row[ 4]
"Title," // row[ 5]
"QstInd," // row[ 6]
"QstCod," // row[ 7]
"Showing," // row[ 8]
"Countdown," // row[ 9]
"NumCols," // row[10]
"ShowQstResults," // row[11]
"ShowUsrResults" // row[12]
"SELECT EvtCod," // row[ 0]
"ExaCod," // row[ 1]
"Hidden," // row[ 2]
"UsrCod," // row[ 3]
"UNIX_TIMESTAMP(StartTime)," // row[ 4]
"UNIX_TIMESTAMP(EndTime)," // row[ 5]
"Title," // row[ 6]
"QstInd," // row[ 7]
"QstCod," // row[ 8]
"Showing," // row[ 9]
"Countdown," // row[10]
"NumCols," // row[11]
"ShowQstResults," // row[12]
"ShowUsrResults" // row[13]
" FROM exa_events"
" WHERE ExaCod=%ld%s"
" ORDER BY EvtCod",
@ -391,55 +399,37 @@ void ExaEvt_GetDataOfEventByCod (struct ExaEvt_Event *Event)
{
MYSQL_RES *mysql_res;
unsigned long NumRows;
Dat_StartEndTime_t StartEndTime;
/***** Get exam data event from database *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get events",
"SELECT EvtCod," // row[ 0]
"ExaCod," // row[ 1]
"UsrCod," // row[ 2]
"UNIX_TIMESTAMP(StartTime)," // row[ 3]
"UNIX_TIMESTAMP(EndTime)," // row[ 4]
"Title," // row[ 5]
"QstInd," // row[ 6]
"QstCod," // row[ 7]
"Showing," // row[ 8]
"Countdown," // row[ 9]
"NumCols," // row[10]
"ShowQstResults," // row[11]
"ShowUsrResults" // row[12]
" FROM exa_events"
" WHERE EvtCod=%ld"
" AND ExaCod IN" // Extra check
" (SELECT ExaCod FROM exa_exams"
" WHERE CrsCod='%ld')",
Event->EvtCod,
Gbl.Hierarchy.Crs.CrsCod);
NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get events",
"SELECT EvtCod," // row[ 0]
"ExaCod," // row[ 1]
"Hidden," // row[ 2]
"UsrCod," // row[ 3]
"UNIX_TIMESTAMP(StartTime),"// row[ 4]
"UNIX_TIMESTAMP(EndTime)," // row[ 5]
"Title," // row[ 6]
"QstInd," // row[ 7]
"QstCod," // row[ 8]
"Showing," // row[ 9]
"Countdown," // row[10]
"NumCols," // row[11]
"ShowQstResults," // row[12]
"ShowUsrResults" // row[13]
" FROM exa_events"
" WHERE EvtCod=%ld"
" AND ExaCod IN" // Extra check
" (SELECT ExaCod FROM exa_exams"
" WHERE CrsCod='%ld')",
Event->EvtCod,
Gbl.Hierarchy.Crs.CrsCod);
if (NumRows) // Event found...
/***** Get exam event data from row *****/
/* Get exam event data from row */
ExaEvt_GetEventDataFromRow (mysql_res,Event);
else
{
/* Initialize to empty exam event */
Event->EvtCod = -1L;
Event->ExaCod = -1L;
Event->UsrCod = -1L;
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
Event->TimeUTC[StartEndTime] = (time_t) 0;
Event->Title[0] = '\0';
Event->Status.QstInd = 0;
Event->Status.QstCod = -1L;
Event->Status.QstStartTimeUTC = (time_t) 0;
Event->Status.Showing = ExaEvt_START;
Event->Status.Countdown = -1L;
Event->Status.Happening = false;
Event->Status.NumParticipants = 0;
Event->Status.NumCols = ExaEvt_NUM_COLS_DEFAULT;
Event->Status.ShowQstResults = false;
Event->Status.ShowUsrResults = false;
}
ExaEvt_ResetEvent (Event);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -487,6 +477,7 @@ static void ExaEvt_ListOneOrMoreEvents (struct Exa_Exams *Exams,
{
unsigned NumEvent;
unsigned UniqueId;
char *Anchor;
struct ExaEvt_Event Event;
bool ICanEditEvents = ExaEvt_CheckIfICanEditEvents ();
@ -513,12 +504,17 @@ static void ExaEvt_ListOneOrMoreEvents (struct Exa_Exams *Exams,
if (ExaEvt_CheckIfICanPlayThisEventBasedOnGrps (&Event))
{
/***** Write row for this exam event ****/
/***** Build anchor string *****/
if (asprintf (&Anchor,"evt_%ld_%ld",Exam->ExaCod,Event.EvtCod) < 0)
Lay_NotEnoughMemoryExit ();
/***** Begin row for this exam event ****/
HTM_TR_Begin (NULL);
/* Icons */
if (ICanEditEvents)
ExaEvt_ListOneOrMoreEventsIcons (Exams,&Event);
if (ExaEvt_CheckIfICanEditThisEvent (&Event))
ExaEvt_ListOneOrMoreEventsIcons (Exams,&Event,Anchor);
/* Event participant */
ExaEvt_ListOneOrMoreEventsAuthor (&Event);
@ -527,7 +523,7 @@ static void ExaEvt_ListOneOrMoreEvents (struct Exa_Exams *Exams,
ExaEvt_ListOneOrMoreEventsTimes (&Event,UniqueId);
/* Title and groups */
ExaEvt_ListOneOrMoreEventsTitleGrps (&Event);
ExaEvt_ListOneOrMoreEventsTitleGrps (&Event,Anchor);
/* Number of participants who have answered any question in the exam event */
ExaEvt_ListOneOrMoreEventsNumParticipants (&Event);
@ -537,6 +533,12 @@ static void ExaEvt_ListOneOrMoreEvents (struct Exa_Exams *Exams,
/* Event result visible? */
ExaEvt_ListOneOrMoreEventsResult (Exams,&Event);
/***** End row for this exam event ****/
HTM_TR_End ();
/***** Free anchor string *****/
free (Anchor);
}
}
@ -617,22 +619,29 @@ static bool ExaEvt_CheckIfICanEditThisEvent (const struct ExaEvt_Event *Event)
/*****************************************************************************/
static void ExaEvt_ListOneOrMoreEventsIcons (struct Exa_Exams *Exams,
const struct ExaEvt_Event *Event)
const struct ExaEvt_Event *Event,
const char *Anchor)
{
HTM_TD_Begin ("class=\"BT%u\"",Gbl.RowEvenOdd);
/***** Put icon to remove the exam event *****/
if (ExaEvt_CheckIfICanEditThisEvent (Event))
{
Exams->ExaCod = Event->ExaCod;
Exams->EvtCod = Event->EvtCod;
Frm_StartForm (ActReqRemExaEvt);
ExaEvt_PutParamsEdit (Exams);
Ico_PutIconRemove ();
Frm_EndForm ();
}
Exams->ExaCod = Event->ExaCod;
Exams->EvtCod = Event->EvtCod;
/* Icon to remove the exam event */
Frm_StartForm (ActReqRemExaEvt);
ExaEvt_PutParamsEdit (Exams);
Ico_PutIconRemove ();
Frm_EndForm ();
/* Icon to hide/unhide the exam event */
if (Event->Hidden)
Ico_PutContextualIconToUnhide (ActShoExaEvt,Anchor,
ExaEvt_PutParamsEdit,Exams);
else
Ico_PutIconRemovalNotAllowed ();
Ico_PutContextualIconToHide (ActHidExaEvt,Anchor,
ExaEvt_PutParamsEdit,Exams);
/* Icon to edit the exam event */
HTM_TD_End ();
}
@ -645,7 +654,7 @@ static void ExaEvt_ListOneOrMoreEventsAuthor (const struct ExaEvt_Event *Event)
{
/***** Event author (teacher) *****/
HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
Usr_WriteAuthor1Line (Event->UsrCod,false);
Usr_WriteAuthor1Line (Event->UsrCod,Event->Hidden);
HTM_TD_End ();
}
@ -656,19 +665,24 @@ static void ExaEvt_ListOneOrMoreEventsAuthor (const struct ExaEvt_Event *Event)
static void ExaEvt_ListOneOrMoreEventsTimes (const struct ExaEvt_Event *Event,unsigned UniqueId)
{
Dat_StartEndTime_t StartEndTime;
const char *Color;
char *Id;
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
{
Color = Event->Status.Showing == ExaEvt_END ? (Event->Hidden ? "DATE_GREEN_LIGHT":
"DATE_GREEN") :
(Event->Hidden ? "DATE_RED_LIGHT":
"DATE_RED");
if (asprintf (&Id,"exa_time_%u_%u",(unsigned) StartEndTime,UniqueId) < 0)
Lay_NotEnoughMemoryExit ();
HTM_TD_Begin ("id=\"%s\" class=\"%s LT COLOR%u\"",
Id,
Event->Status.Showing == ExaEvt_END ? "DATE_RED" :
"DATE_GREEN",
Gbl.RowEvenOdd);
Id,Color,Gbl.RowEvenOdd);
Dat_WriteLocalDateHMSFromUTC (Id,Event->TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
true,true,true,0x7);
@ -681,7 +695,8 @@ static void ExaEvt_ListOneOrMoreEventsTimes (const struct ExaEvt_Event *Event,un
/*************** Put a column for exam event title and grous *****************/
/*****************************************************************************/
static void ExaEvt_ListOneOrMoreEventsTitleGrps (const struct ExaEvt_Event *Event)
static void ExaEvt_ListOneOrMoreEventsTitleGrps (const struct ExaEvt_Event *Event,
const char *Anchor)
{
extern const char *Txt_Play;
extern const char *Txt_Resume;
@ -689,15 +704,19 @@ static void ExaEvt_ListOneOrMoreEventsTitleGrps (const struct ExaEvt_Event *Even
HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
/***** Event title *****/
HTM_ARTICLE_Begin (Anchor);
Frm_StartForm (Gbl.Usrs.Me.Role.Logged == Rol_STD ? ActJoiExaEvt :
ActResExaEvt);
ExaEvt_PutParamEvtCod (Event->EvtCod);
HTM_BUTTON_SUBMIT_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play :
Txt_Resume,
"BT_LINK LT ASG_TITLE",NULL);
Event->Hidden ? "BT_LINK LT ASG_TITLE_LIGHT":
"BT_LINK LT ASG_TITLE",
NULL);
HTM_Txt (Event->Title);
HTM_BUTTON_End ();
Frm_EndForm ();
HTM_ARTICLE_End ();
/***** Groups whose students can answer this exam event *****/
if (Gbl.Crs.Grps.NumGrps)
@ -732,7 +751,8 @@ static void ExaEvt_GetAndWriteNamesOfGrpsAssociatedToEvent (const struct ExaEvt_
Event->EvtCod);
/***** Write heading *****/
HTM_DIV_Begin ("class=\"ASG_GRP\"");
HTM_DIV_Begin ("class=\"%s\"",Event->Hidden ? "ASG_GRP_LIGHT":
"ASG_GRP");
HTM_TxtColonNBSP (NumRows == 1 ? Txt_Group :
Txt_Groups);
@ -964,10 +984,11 @@ static void ExaEvt_GetEventDataFromRow (MYSQL_RES *mysql_res,
/*
row[ 0] EvtCod
row[ 1] ExaCod
row[ 2] UsrCod
row[ 3] UNIX_TIMESTAMP(StartTime)
row[ 4] UNIX_TIMESTAMP(EndTime)
row[ 5] Title
row[ 2] Hidden
row[ 3] UsrCod
row[ 4] UNIX_TIMESTAMP(StartTime)
row[ 5] UNIX_TIMESTAMP(EndTime)
row[ 6] Title
*/
/***** Get exam event data *****/
/* Code of the exam event (row[0]) */
@ -978,55 +999,58 @@ static void ExaEvt_GetEventDataFromRow (MYSQL_RES *mysql_res,
if ((Event->ExaCod = Str_ConvertStrCodToLongCod (row[1])) <= 0)
Lay_ShowErrorAndExit ("Wrong code of exam.");
/* Get exam event teacher (row[2]) */
Event->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get whether the exam is hidden (row[2]) */
Event->Hidden = (row[2][0] == 'Y');
/* Get start/end times (row[3], row[4] hold start/end UTC times) */
/* Get exam event teacher (row[3]) */
Event->UsrCod = Str_ConvertStrCodToLongCod (row[3]);
/* Get start/end times (row[4], row[5] hold start/end UTC times) */
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
Event->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[3 + StartEndTime]);
Event->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[4 + StartEndTime]);
/* Get the title of the exam (row[5]) */
if (row[5])
Str_Copy (Event->Title,row[5],
/* Get the title of the exam (row[6]) */
if (row[6])
Str_Copy (Event->Title,row[6],
Exa_MAX_BYTES_TITLE);
else
Event->Title[0] = '\0';
/***** Get current exam event status *****/
/*
row[ 6] QstInd
row[ 7] QstCod
row[ 8] Showing
row[ 9] Countdown
row[10] NumCols
row[11] ShowQstResults
row[12] ShowUsrResults
row[ 7] QstInd
row[ 8] QstCod
row[ 9] Showing
row[10] Countdown
row[11] NumCols
row[12] ShowQstResults
row[13] ShowUsrResults
*/
/* Current question index (row[6]) */
Event->Status.QstInd = Str_ConvertStrToUnsigned (row[6]);
/* Current question index (row[7]) */
Event->Status.QstInd = Str_ConvertStrToUnsigned (row[7]);
/* Current question code (row[7]) */
Event->Status.QstCod = Str_ConvertStrCodToLongCod (row[7]);
/* Current question code (row[8]) */
Event->Status.QstCod = Str_ConvertStrCodToLongCod (row[8]);
/* Get what to show (stem, answers, results) (row(8)) */
Event->Status.Showing = ExaEvt_GetShowingFromStr (row[8]);
/* Get what to show (stem, answers, results) (row(9)) */
Event->Status.Showing = ExaEvt_GetShowingFromStr (row[9]);
/* Get countdown (row[9]) */
Event->Status.Countdown = Str_ConvertStrCodToLongCod (row[9]);
/* Get countdown (row[10]) */
Event->Status.Countdown = Str_ConvertStrCodToLongCod (row[10]);
/* Get number of columns (row[10]) */
LongNum = Str_ConvertStrCodToLongCod (row[10]);
/* Get number of columns (row[11]) */
LongNum = Str_ConvertStrCodToLongCod (row[11]);
Event->Status.NumCols = (LongNum <= 1 ) ? 1 :
((LongNum >= ExaEvt_MAX_COLS) ? ExaEvt_MAX_COLS :
(unsigned) LongNum);
(unsigned) LongNum);
/* Get whether to show question results or not (row(11)) */
Event->Status.ShowQstResults = (row[11][0] == 'Y');
/* Get whether to show question results or not (row(12)) */
Event->Status.ShowQstResults = (row[12][0] == 'Y');
/* Get whether to show user results or not (row(12)) */
Event->Status.ShowUsrResults = (row[12][0] == 'Y');
/* Get whether to show user results or not (row(13)) */
Event->Status.ShowUsrResults = (row[13][0] == 'Y');
/***** Get whether the exam event is being played or not *****/
if (Event->Status.Showing == ExaEvt_END) // Event over
@ -1261,6 +1285,78 @@ static void ExaEvt_RemoveUsrEvtResultsInCrs (long UsrCod,long CrsCod,const char
UsrCod);
}
/*****************************************************************************/
/******************************** Hide an event ******************************/
/*****************************************************************************/
void ExaEvt_HideEvent (void)
{
struct Exa_Exams Exams;
struct Exa_Exam Exam;
struct ExaEvt_Event Event;
/***** Reset exams context *****/
Exa_ResetExams (&Exams);
/***** Reset exam and event *****/
Exa_ResetExam (&Exam);
ExaEvt_ResetEvent (&Event);
/***** Get and check parameters *****/
ExaEvt_GetAndCheckParameters (&Exams,&Exam,&Event);
/***** Check if I can remove this exam event *****/
if (!ExaEvt_CheckIfICanEditThisEvent (&Event))
Lay_NoPermissionExit ();
/***** Hide event *****/
DB_QueryUPDATE ("can not hide exam event",
"UPDATE exa_events SET Hidden='Y'"
" WHERE EvtCod=%ld"
" AND ExaCod=%ld", // Extra check
Event.EvtCod,Event.ExaCod);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam,
false); // Do not put form to start new exam event
}
/*****************************************************************************/
/****************************** Unhide an event ******************************/
/*****************************************************************************/
void ExaEvt_UnhideEvent (void)
{
struct Exa_Exams Exams;
struct Exa_Exam Exam;
struct ExaEvt_Event Event;
/***** Reset exams context *****/
Exa_ResetExams (&Exams);
/***** Reset exam and event *****/
Exa_ResetExam (&Exam);
ExaEvt_ResetEvent (&Event);
/***** Get and check parameters *****/
ExaEvt_GetAndCheckParameters (&Exams,&Exam,&Event);
/***** Check if I can remove this exam event *****/
if (!ExaEvt_CheckIfICanEditThisEvent (&Event))
Lay_NoPermissionExit ();
/***** Unhide event *****/
DB_QueryUPDATE ("can not unhide exam event",
"UPDATE exa_events SET Hidden='N'",
" WHERE EvtCod=%ld"
" AND ExaCod=%ld", // Extra check
Event.EvtCod,Event.ExaCod);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Exam,
false); // Do not put form to start new exam event
}
/*****************************************************************************/
/******************** Params used to edit an exam event **********************/
/*****************************************************************************/

View File

@ -56,6 +56,7 @@ struct ExaEvt_Event
long UsrCod;
time_t TimeUTC[Dat_NUM_START_END_TIME];
char Title[Exa_MAX_BYTES_TITLE + 1];
bool Hidden;
struct
{
unsigned QstInd; // 0 means that the exam has not started. First question has index 1.
@ -101,6 +102,9 @@ void ExaEvt_RemoveEventsInExamFromAllTables (long ExaCod);
void ExaEvt_RemoveEventInCourseFromAllTables (long CrsCod);
void ExaEvt_RemoveUsrFromEventTablesInCrs (long UsrCod,long CrsCod);
void ExaEvt_HideEvent (void);
void ExaEvt_UnhideEvent (void);
void ExaEvt_PutParamsEdit (void *Exams);
void ExaEvt_GetAndCheckParameters (struct Exa_Exams *Exams,
struct Exa_Exam *Exam,

View File

@ -104,12 +104,12 @@ bool FigCch_GetFigureFromCache (FigCch_FigureCached_t Figure,
time_t TimeCached[Hie_NUM_LEVELS] = // Time in seconds
{
[Hie_UNK] = (time_t) ( 0), // Unknown
[Hie_SYS] = (time_t) ( 1UL * 60UL * 60UL), // System
[Hie_CTY] = (time_t) ( 30UL * 60UL), // Country
[Hie_INS] = (time_t) ( 15UL * 60UL), // Institution
[Hie_CTR] = (time_t) ( 5UL * 60UL), // Centre
[Hie_DEG] = (time_t) ( 60UL), // Degree
[Hie_CRS] = (time_t) ( 10UL), // Course
[Hie_SYS] = (time_t) (24UL * 60UL * 60UL), // System
[Hie_CTY] = (time_t) (12UL * 60UL * 60UL), // Country
[Hie_INS] = (time_t) ( 6UL * 60UL * 60UL), // Institution
[Hie_CTR] = (time_t) ( 3UL * 60UL * 60UL), // Centre
[Hie_DEG] = (time_t) ( 1UL * 60UL * 60UL), // Degree
[Hie_CRS] = (time_t) ( 60UL), // Course
};
static const char *Field[FigCch_NUM_TYPES] =
{

View File

@ -253,12 +253,16 @@ long Mch_GetMchCodBeingPlayed (void)
void Mch_ResetMatch (struct Mch_Match *Match)
{
Dat_StartEndTime_t StartEndTime;
/***** Initialize to empty match *****/
Match->MchCod = -1L;
Match->GamCod = -1L;
Match->UsrCod = -1L;
Match->TimeUTC[Dat_START_TIME] = (time_t) 0;
Match->TimeUTC[Dat_END_TIME ] = (time_t) 0;
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
Match->TimeUTC[StartEndTime] = (time_t) 0;
Match->Title[0] = '\0';
Match->Status.QstInd = 0;
Match->Status.QstCod = -1L;
@ -379,55 +383,36 @@ void Mch_GetDataOfMatchByCod (struct Mch_Match *Match)
{
MYSQL_RES *mysql_res;
unsigned long NumRows;
Dat_StartEndTime_t StartEndTime;
/***** Get data of match from database *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get matches",
"SELECT MchCod," // row[ 0]
"GamCod," // row[ 1]
"UsrCod," // row[ 2]
"UNIX_TIMESTAMP(StartTime)," // row[ 3]
"UNIX_TIMESTAMP(EndTime)," // row[ 4]
"Title," // row[ 5]
"QstInd," // row[ 6]
"QstCod," // row[ 7]
"Showing," // row[ 8]
"Countdown," // row[ 9]
"NumCols," // row[10]
"ShowQstResults," // row[11]
"ShowUsrResults" // row[12]
" FROM mch_matches"
" WHERE MchCod=%ld"
" AND GamCod IN" // Extra check
" (SELECT GamCod FROM gam_games"
" WHERE CrsCod='%ld')",
Match->MchCod,
Gbl.Hierarchy.Crs.CrsCod);
NumRows = (unsigned)
DB_QuerySELECT (&mysql_res,"can not get matches",
"SELECT MchCod," // row[ 0]
"GamCod," // row[ 1]
"UsrCod," // row[ 2]
"UNIX_TIMESTAMP(StartTime),"// row[ 3]
"UNIX_TIMESTAMP(EndTime)," // row[ 4]
"Title," // row[ 5]
"QstInd," // row[ 6]
"QstCod," // row[ 7]
"Showing," // row[ 8]
"Countdown," // row[ 9]
"NumCols," // row[10]
"ShowQstResults," // row[11]
"ShowUsrResults" // row[12]
" FROM mch_matches"
" WHERE MchCod=%ld"
" AND GamCod IN" // Extra check
" (SELECT GamCod FROM gam_games"
" WHERE CrsCod='%ld')",
Match->MchCod,
Gbl.Hierarchy.Crs.CrsCod);
if (NumRows) // Match found...
/***** Get match data from row *****/
/* Get match data from row */
Mch_GetMatchDataFromRow (mysql_res,Match);
else
{
/* Initialize to empty match */
Match->MchCod = -1L;
Match->GamCod = -1L;
Match->UsrCod = -1L;
for (StartEndTime = (Dat_StartEndTime_t) 0;
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
StartEndTime++)
Match->TimeUTC[StartEndTime] = (time_t) 0;
Match->Title[0] = '\0';
Match->Status.QstInd = 0;
Match->Status.QstCod = -1L;
Match->Status.QstStartTimeUTC = (time_t) 0;
Match->Status.Showing = Mch_START;
Match->Status.Countdown = -1L;
Match->Status.Playing = false;
Match->Status.NumPlayers = 0;
Match->Status.NumCols = Mch_NUM_COLS_DEFAULT;
Match->Status.ShowQstResults = false;
Match->Status.ShowUsrResults = false;
}
Mch_ResetMatch (Match);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -501,7 +486,7 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
if (Mch_CheckIfICanPlayThisMatchBasedOnGrps (&Match))
{
/***** Write row for this match ****/
/***** Begin row for this match ****/
HTM_TR_Begin (NULL);
/* Icons */
@ -525,6 +510,9 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
/* Match result visible? */
Mch_ListOneOrMoreMatchesResult (Games,&Match);
/***** Begin row for this match ****/
HTM_TR_Begin (NULL);
}
}

View File

@ -10119,6 +10119,48 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif
,
[ActHidExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Hide exam event"
#elif L==4 // es
"Ocultar evento de examen"
#elif L==5 // fr
"" // Besoin de traduction
#elif L==6 // gn
"" // Okoteve traducción
#elif L==7 // it
"" // Bisogno di traduzione
#elif L==8 // pl
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif
,
[ActShoExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Unhide exam event"
#elif L==4 // es
"Mostrar evento de examen"
#elif L==5 // fr
"" // Besoin de traduction
#elif L==6 // gn
"" // Okoteve traducción
#elif L==7 // it
"" // Bisogno di traduzione
#elif L==8 // pl
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif
,
[ActReqNewExaEvt] =