Version19.229

This commit is contained in:
acanas 2020-05-13 15:22:56 +02:00
parent 68a174d4d5
commit 2acc20731a
12 changed files with 178 additions and 3318 deletions

View File

@ -547,117 +547,6 @@ function readConnUsrsData () {
}
}
/*****************************************************************************/
/******* Automatic refresh of current exam event question using AJAX *********/
/*****************************************************************************/
// This function must be called from time to time
var objXMLHttpReqExaEvtStd = false;
function refreshExamEventStd () {
objXMLHttpReqExaEvtStd = AJAXCreateObject();
if (objXMLHttpReqExaEvtStd) {
var RefreshParams = RefreshParamNxtActExaEvt + '&' +
RefreshParamExaEvtCod + '&' +
RefreshParamIdSes;
objXMLHttpReqExaEvtStd.onreadystatechange = readExamEventStdData; // onreadystatechange must be lowercase
objXMLHttpReqExaEvtStd.open('POST',ActionAJAX,true);
objXMLHttpReqExaEvtStd.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
objXMLHttpReqExaEvtStd.send(RefreshParams);
}
}
function readExamEventStdData () {
if (objXMLHttpReqExaEvtStd.readyState == 4) { // Check if data have been received
if (objXMLHttpReqExaEvtStd.status == 200) {
var htmlExamEvent = objXMLHttpReqExaEvtStd.responseText; // Get HTML code
var div = document.getElementById('exam_event'); // Access to refreshable DIV
if (div)
div.innerHTML = htmlExamEvent; // Update DIV content
// Global delay variable is set initially in swad-core
setTimeout('refreshExamEventStd()',delayExamEvent);
}
}
}
/*****************************************************************************/
/** Automatic refresh of left part of current exam event question using AJAX **/
/*****************************************************************************/
//This function must be called from time to time
var objXMLHttpReqExaEvtTch = false;
function refreshExamEventTch () {
objXMLHttpReqExaEvtTch = AJAXCreateObject();
if (objXMLHttpReqExaEvtTch) {
var RefreshParams = RefreshParamNxtActExaEvt + '&' +
RefreshParamExaEvtCod + '&' +
RefreshParamIdSes;
objXMLHttpReqExaEvtTch.onreadystatechange = readExamEventTchData; // onreadystatechange must be lowercase
objXMLHttpReqExaEvtTch.open('POST',ActionAJAX,true);
objXMLHttpReqExaEvtTch.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
objXMLHttpReqExaEvtTch.send(RefreshParams);
}
}
function readExamEventTchData () {
if (objXMLHttpReqExaEvtTch.readyState == 4) { // Check if data have been received
if (objXMLHttpReqExaEvtTch.status == 200) {
var endOfId = objXMLHttpReqExaEvtTch.responseText.indexOf('|',0 ); // Get separator position
var endOfEv = objXMLHttpReqExaEvtTch.responseText.indexOf('|',endOfId + 1); // Get separator position
var id = objXMLHttpReqExaEvtTch.responseText.substring(0 ,endOfId); // Get id
var ev = objXMLHttpReqExaEvtTch.responseText.substring(endOfId + 1,endOfEv); // Get ev ('0' / '1')
var html = objXMLHttpReqExaEvtTch.responseText.substring(endOfEv + 1); // Get HTML code
var div = document.getElementById(id); // Access to refreshable DIV
if (div) {
div.innerHTML = html; // Update DIV content
if (parseInt(ev)) { // 0 / 1
// Scripts in div got via AJAX are not executed ==> execute them
evalScriptsInElem (div);
// Process mathematics; see http://docs.mathjax.org/en/latest/advanced/typeset.html
// MathJax.Hub.Queue(["Typeset",MathJax.Hub,div]); // old versions
MathJax.typeset();
}
}
// Global delay variable is set initially in swad-core
setTimeout('refreshExamEventTch()',delayExamEvent);
}
}
}
/*****************************************************************************/
/**************** Update exam event control area using AJAX ******************/
/*****************************************************************************/
// This function is called when user submit a form inside two parent divs
function updateExamEventTch (id,Params) {
var objXMLHttp = false;
objXMLHttp = AJAXCreateObject ();
if (objXMLHttp) {
/* Send request to server */
objXMLHttp.onreadystatechange = function() { // onreadystatechange must be lowercase
if (objXMLHttp.readyState == 4) { // Check if data have been received
if (objXMLHttp.status == 200)
if (id) {
var div = document.getElementById(id); // Access to DIV
if (div)
div.innerHTML = objXMLHttp.responseText; // Update DIV content
}
}
};
objXMLHttp.open('POST',ActionAJAX,true);
objXMLHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
objXMLHttp.send(Params);
}
}
/*****************************************************************************/
/***************** Update exam print main area using AJAX ********************/
/*****************************************************************************/

View File

@ -477,13 +477,6 @@ CREATE TABLE IF NOT EXISTS exa_events (
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
Title VARCHAR(2047) NOT NULL,
QstInd INT NOT NULL DEFAULT 0,
QstCod INT NOT NULL DEFAULT -1,
Showing ENUM('start','stem','answers','results','end') NOT NULL DEFAULT 'start',
Countdown INT NOT NULL DEFAULT -1,
NumCols INT NOT NULL DEFAULT 1,
ShowQstResults ENUM('N','Y') NOT NULL DEFAULT 'N',
ShowUsrResults ENUM('N','Y') NOT NULL DEFAULT 'N',
UNIQUE INDEX(EvtCod),
INDEX(ExaCod));
--

View File

@ -688,21 +688,6 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[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},
[ActResExaEvt ] = {1854,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ResumeEvent ,NULL},
[ActBckExaEvt ] = {1855,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_BackEvent ,NULL},
[ActPlyPauExaEvt ] = {1856,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_PlayPauseEvent ,NULL},
[ActFwdExaEvt ] = {1857,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ForwardEvent ,NULL},
[ActChgNumColExaEvt ] = {1858,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ChangeNumColsEvt ,NULL},
[ActChgVisResExaEvtQst] = {1859,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ToggleVisibilResultsEvtQst,NULL},
[ActExaEvtCntDwn ] = {1860,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,ExaEvt_GetEventBeingPlayed ,ExaEvt_StartCountdown ,NULL},
[ActRefExaEvtTch ] = {1861,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,ExaEvt_GetEventBeingPlayed ,ExaEvt_RefreshEventTch ,NULL},
[ActJoiExaEvt ] = {1862,-1,TabUnk,ActSeeAllExa ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_JoinEventAsStd ,NULL},
[ActSeeExaEvtAnsQstStd] = {1863,-1,TabUnk,ActSeeAllExa ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_JoinEventAsStd ,NULL},
[ActRemExaEvtAnsQstStd] = {1864,-1,TabUnk,ActSeeAllExa ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_RemoveMyQuestionAnswer ,NULL},
[ActAnsExaEvtQstStd ] = {1865,-1,TabUnk,ActSeeAllExa ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,ExaEvt_GetEventBeingPlayed ,ExaEvt_ReceiveQuestionAnswer ,NULL},
[ActRefExaEvtStd ] = {1866,-1,TabUnk,ActSeeAllExa ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,ExaEvt_GetEventBeingPlayed ,ExaEvt_RefreshEventStd ,NULL},
[ActSeeMyExaEvtResCrs] = {1867,-1,TabUnk,ActSeeAllExa ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaRes_ShowMyExaResultsInCrs ,NULL},
[ActSeeMyExaEvtResExa] = {1868,-1,TabUnk,ActSeeAllExa ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaRes_ShowMyExaResultsInExa ,NULL},
[ActSeeMyExaEvtResEvt] = {1869,-1,TabUnk,ActSeeAllExa ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaRes_ShowMyExaResultsInEvt ,NULL},
@ -3675,19 +3660,19 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActRemExaEvt, // #1851
ActReqNewExaEvt, // #1852
ActNewExaEvt, // #1853
ActResExaEvt, // #1854
ActBckExaEvt, // #1855
ActPlyPauExaEvt, // #1856
ActFwdExaEvt, // #1857
ActChgNumColExaEvt, // #1858
ActChgVisResExaEvtQst, // #1859
ActExaEvtCntDwn, // #1860
ActRefExaEvtTch, // #1861
ActJoiExaEvt, // #1862
ActSeeExaEvtAnsQstStd, // #1863
ActRemExaEvtAnsQstStd, // #1864
ActAnsExaEvtQstStd, // #1865
ActRefExaEvtStd, // #1866
-1, // #1854 (obsolete action)
-1, // #1855 (obsolete action)
-1, // #1856 (obsolete action)
-1, // #1857 (obsolete action)
-1, // #1858 (obsolete action)
-1, // #1859 (obsolete action)
-1, // #1860 (obsolete action)
-1, // #1861 (obsolete action)
-1, // #1862 (obsolete action)
-1, // #1863 (obsolete action)
-1, // #1864 (obsolete action)
-1, // #1865 (obsolete action)
-1, // #1866 (obsolete action)
ActSeeMyExaEvtResCrs, // #1867
ActSeeMyExaEvtResExa, // #1868
ActSeeMyExaEvtResEvt, // #1869

View File

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

View File

@ -548,10 +548,14 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.228.2 (2020-05-13)"
#define Log_PLATFORM_VERSION "SWAD 19.229 (2020-05-13)"
#define CSS_FILE "swad19.217.css"
#define JS_FILE "swad19.223.js"
/*
Version 19.229: May 13, 2020 Removed unused code in exam events. (301163 lines)
1 change necessary in database:
ALTER TABLE exa_events DROP COLUMN QstInd,DROP COLUMN QstCod,DROP COLUMN Showing,DROP COLUMN Countdown,DROP COLUMN NumCols,DROP COLUMN ShowQstResults;
Version 19.228.2: May 13, 2020 Code refactoring in exam prints. (303829 lines)
Version 19.228.1: May 13, 2020 Code refactoring in exam prints. (303828 lines)
Version 19.228: May 13, 2020 Code refactoring and bug fixing in exam prints. (303837 lines)

View File

@ -1040,25 +1040,19 @@ mysql> DESCRIBE exa_groups;
/***** Table exa_events *****/
/*
mysql> DESCRIBE exa_events;
+----------------+------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------------------------------+------+-----+---------+----------------+
| 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 | |
| Title | varchar(2047) | NO | | NULL | |
| QstInd | int(11) | NO | | 0 | |
| QstCod | int(11) | NO | | -1 | |
| Showing | enum('start','stem','answers','results','end') | NO | | start | |
| Countdown | int(11) | NO | | -1 | |
| NumCols | int(11) | NO | | 1 | |
| ShowQstResults | enum('N','Y') | NO | | N | |
| ShowUsrResults | enum('N','Y') | NO | | N | |
+----------------+------------------------------------------------+------+-----+---------+----------------+
14 rows in set (0.00 sec)
+----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+----------------+
| 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 | |
| Title | varchar(2047) | NO | | NULL | |
| ShowUsrResults | enum('N','Y') | NO | | N | |
+----------------+---------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS exa_events ("
"EvtCod INT NOT NULL AUTO_INCREMENT,"
@ -1068,12 +1062,6 @@ mysql> DESCRIBE exa_events;
"StartTime DATETIME NOT NULL,"
"EndTime DATETIME NOT NULL,"
"Title VARCHAR(2047) NOT NULL," // ExaEvt_MAX_BYTES_TITLE
"QstInd INT NOT NULL DEFAULT 0,"
"QstCod INT NOT NULL DEFAULT -1,"
"Showing ENUM('start','stem','answers','results','end') NOT NULL DEFAULT 'start',"
"Countdown INT NOT NULL DEFAULT -1,"
"NumCols INT NOT NULL DEFAULT 1,"
"ShowQstResults ENUM('N','Y') NOT NULL DEFAULT 'N',"
"ShowUsrResults ENUM('N','Y') NOT NULL DEFAULT 'N',"
"UNIQUE INDEX(EvtCod),"
"INDEX(ExaCod))");

File diff suppressed because it is too large Load Diff

View File

@ -48,8 +48,6 @@ struct ExaEvt_UsrAnswer
/***************************** Public prototypes *****************************/
/*****************************************************************************/
long ExaEvt_GetEvtCodBeingPlayed (void);
void ExaEvt_ResetEvent (struct ExaEvt_Event *Event);
void ExaEvt_ListEvents (struct Exa_Exams *Exams,
@ -79,44 +77,16 @@ long ExaEvt_GetParamEvtCod (void);
void ExaEvt_PutButtonNewEvent (struct Exa_Exams *Exams,long ExaCod);
void ExaEvt_RequestCreatOrEditEvent (void);
void ExaEvt_ReceiveFormEvent (void);
void ExaEvt_ResumeEvent (void);
void ExaEvt_GetIndexes (long EvtCod,unsigned QstInd,
unsigned Indexes[Tst_MAX_OPTIONS_PER_QUESTION]);
void ExaEvt_RemoveGroup (long GrpCod);
void ExaEvt_RemoveGroupsOfType (long GrpTypCod);
void ExaEvt_PlayPauseEvent (void);
void ExaEvt_ChangeNumColsEvt (void);
void ExaEvt_ToggleVisibilResultsEvtQst (void);
void ExaEvt_BackEvent (void);
void ExaEvt_ForwardEvent (void);
unsigned ExaEvt_GetNumEventsInExam (long ExaCod);
unsigned ExaEvt_GetNumOpenEventsInExam (long ExaCod);
bool ExaEvt_CheckIfICanPlayThisEventBasedOnGrps (const struct ExaEvt_Event *Event);
void ExaEvt_WriteChoiceAnsViewEvent (const struct ExaEvt_Event *Event,
const struct Tst_Question *Question,
const char *Class,bool ShowResult);
bool ExaEvt_RegisterMeAsParticipantInEvent (struct ExaEvt_Event *Event);
void ExaEvt_GetEventBeingPlayed (void);
void ExaEvt_JoinEventAsStd (void);
void ExaEvt_RemoveMyQuestionAnswer (void);
void ExaEvt_StartCountdown (void);
void ExaEvt_RefreshEventTch (void);
void ExaEvt_RefreshEventStd (void);
void ExaEvt_GetQstAnsFromDB (long EvtCod,long UsrCod,unsigned QstInd,
struct ExaEvt_UsrAnswer *UsrAnswer);
void ExaEvt_ReceiveQuestionAnswer (void);
unsigned ExaEvt_GetNumUsrsWhoAnsweredQst (long EvtCod,unsigned QstInd);
unsigned ExaEvt_GetNumUsrsWhoHaveChosenAns (long EvtCod,unsigned QstInd,unsigned AnsInd);
void ExaEvt_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct);
#endif

View File

@ -1444,7 +1444,7 @@ static bool ExaRes_CheckIfICanSeeEventResult (struct ExaEvt_Event *Event,long Us
{
case Rol_STD:
ItsMe = Usr_ItsMe (UsrCod);
if (ItsMe && Event->Status.ShowUsrResults)
if (ItsMe && Event->ShowUsrResults)
return ExaEvt_CheckIfICanPlayThisEventBasedOnGrps (Event);
return false;
case Rol_NET:

View File

@ -127,17 +127,6 @@ struct ExaSet_Set
char Title[ExaSet_MAX_BYTES_TITLE + 1]; // Title of the set
};
#define ExaEvt_NUM_SHOWING 5
typedef enum
{
ExaEvt_START, // Start: don't show anything
ExaEvt_STEM, // Showing only the question stem
ExaEvt_ANSWERS, // Showing the question stem and the answers
ExaEvt_RESULTS, // Showing the results
ExaEvt_END, // End: don't show anything
} ExaEvt_Showing_t;
#define ExaEvt_SHOWING_DEFAULT ExaEvt_START
struct ExaEvt_Event
{
long EvtCod;
@ -147,21 +136,7 @@ struct ExaEvt_Event
char Title[ExaEvt_MAX_BYTES_TITLE + 1];
bool Hidden;
bool Open; // If now is between start and end dates
struct
{
unsigned QstInd; // 0 means that the exam has not started. First question has index 1.
long QstCod;
time_t QstStartTimeUTC;
ExaEvt_Showing_t Showing; // What is shown on teacher's screen
long Countdown; // > 0 ==> countdown in progress
// = 0 ==> countdown over ==> go to next step
// < 0 ==> no countdown at this time
unsigned NumCols; // Number of columns for answers on teacher's screen
bool ShowQstResults; // Show global results of current question while playing
bool ShowUsrResults; // Show exam with results of all questions for the student
bool Happening; // Is being played now?
unsigned NumParticipants;
} Status; // Status related to event playing
bool ShowUsrResults; // Show exam with results of all questions for the student
};
#endif

View File

@ -282,16 +282,6 @@ void Lay_WriteStartOfPage (void)
HTM_Txt ("<body onload=\"init();\"");
switch (Gbl.Action.Act)
{
case ActNewExaEvt:
case ActResExaEvt:
case ActBckExaEvt:
case ActPlyPauExaEvt:
case ActFwdExaEvt:
case ActChgNumColExaEvt:
case ActChgVisResExaEvtQst:
case ActExaEvtCntDwn:
HTM_Txt (" class=\"EXA_BG\"");
break;
case ActNewMch:
case ActResMch:
case ActBckMch:
@ -764,8 +754,6 @@ static void Lay_WriteScriptInit (void)
bool RefreshConnected;
bool RefreshLastClicks = false;
bool RefreshNewTimeline = false;
bool RefreshExamEventStd = false;
bool RefreshExamEventTch = false;
bool RefreshMatchStd = false;
bool RefreshMatchTch = false;
@ -790,24 +778,6 @@ static void Lay_WriteScriptInit (void)
RefreshNewTimeline = true;
break;
/* Exam event */
case ActJoiExaEvt:
case ActSeeExaEvtAnsQstStd:
case ActRemExaEvtAnsQstStd:
case ActAnsExaEvtQstStd:
RefreshExamEventStd = true;
break;
case ActNewExaEvt:
case ActResExaEvt:
case ActBckExaEvt:
case ActPlyPauExaEvt:
case ActFwdExaEvt:
case ActChgNumColExaEvt:
case ActChgVisResExaEvtQst:
case ActExaEvtCntDwn:
RefreshExamEventTch = true;
break;
/* Match */
case ActJoiMch:
case ActSeeMchAnsQstStd:
@ -836,10 +806,6 @@ static void Lay_WriteScriptInit (void)
if (RefreshNewTimeline) // Refresh new timeline via AJAX
HTM_TxtF ("\tvar delayNewTL = %lu;\n",Cfg_TIME_TO_REFRESH_TIMELINE);
else if (RefreshExamEventStd) // Refresh exam event via AJAX
HTM_TxtF ("\tvar delayExamEvent = %lu;\n",Cfg_TIME_TO_REFRESH_MATCH_STD);
else if (RefreshExamEventTch) // Refresh exam event via AJAX
HTM_TxtF ("\tvar delayExamEvent = %lu;\n",Cfg_TIME_TO_REFRESH_MATCH_TCH);
else if (RefreshMatchStd) // Refresh match via AJAX
HTM_TxtF ("\tvar delayMatch = %lu;\n",Cfg_TIME_TO_REFRESH_MATCH_STD);
else if (RefreshMatchTch) // Refresh match via AJAX
@ -862,10 +828,6 @@ static void Lay_WriteScriptInit (void)
Cfg_TIME_TO_REFRESH_LAST_CLICKS);
else if (RefreshNewTimeline) // Refresh timeline via AJAX
HTM_Txt ("\tsetTimeout(\"refreshNewTL()\",delayNewTL);\n");
else if (RefreshExamEventStd) // Refresh exam event for a student via AJAX
HTM_Txt ("\tsetTimeout(\"refreshExamEventStd()\",delayExamEvent);\n");
else if (RefreshExamEventTch) // Refresh exam event for a teacher via AJAX
HTM_Txt ("\tsetTimeout(\"refreshExamEventTch()\",delayExamEvent);\n");
else if (RefreshMatchStd) // Refresh match for a student via AJAX
HTM_Txt ("\tsetTimeout(\"refreshMatchStd()\",delayMatch);\n");
else if (RefreshMatchTch) // Refresh match for a teacher via AJAX
@ -947,34 +909,6 @@ static void Lay_WriteScriptParamsAJAX (void)
Act_GetActCod (ActRefOldSocPubUsr),
Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break;
/* Parameters related with exam event refreshing (for students) */
case ActJoiExaEvt:
case ActSeeExaEvtAnsQstStd:
case ActRemExaEvtAnsQstStd:
case ActAnsExaEvtQstStd:
// Refresh parameters
HTM_TxtF ("var RefreshParamNxtActExaEvt = \"act=%ld\";\n"
"var RefreshParamExaEvtCod = \"EvtCod=%ld\";\n",
Act_GetActCod (ActRefExaEvtStd),
ExaEvt_GetEvtCodBeingPlayed ());
break;
/* Parameters related with exam event refreshing (for teachers) */
case ActNewExaEvt:
case ActResExaEvt:
case ActBckExaEvt:
case ActPlyPauExaEvt:
case ActFwdExaEvt:
case ActChgNumColExaEvt:
case ActChgVisResExaEvtQst:
case ActExaEvtCntDwn:
// Handle keys in keyboard/presenter
HTM_Txt ("document.addEventListener(\"keydown\",handleMatchKeys);\n");
// Refresh parameters
HTM_TxtF ("var RefreshParamNxtActExaEvt = \"act=%ld\";\n"
"var RefreshParamExaEvtCod = \"EvtCod=%ld\";\n",
Act_GetActCod (ActRefExaEvtTch),
ExaEvt_GetEvtCodBeingPlayed ());
break;
/* Parameters related with match refreshing (for students) */
case ActJoiMch:
case ActSeeMchAnsQstStd:

View File

@ -10245,279 +10245,6 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif
,
[ActResExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActBckExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActPlyPauExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActFwdExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActChgNumColExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActChgVisResExaEvtQst] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActExaEvtCntDwn] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActRefExaEvtTch] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActJoiExaEvt] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActSeeExaEvtAnsQstStd] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActRemExaEvtAnsQstStd] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActAnsExaEvtQstStd] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActRefExaEvtStd] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
""
#elif L==4 // es
""
#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
,
[ActSeeMyExaEvtResCrs] =