Version19.148

This commit is contained in:
acanas 2020-03-17 00:35:11 +01:00
parent adbad19129
commit 5d14676c39
16 changed files with 945 additions and 576 deletions

View File

@ -635,9 +635,11 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActImpTstQst ] = {1008,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,TsI_ImportQstsFromXML ,NULL}, [ActImpTstQst ] = {1008,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,TsI_ImportQstsFromXML ,NULL},
[ActLstTstQst ] = { 132,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ListQuestionsToEdit ,NULL}, [ActLstTstQst ] = { 132,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ListQuestionsToEdit ,NULL},
[ActRcvTstQst ] = { 126,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Tst_ReceiveQst ,NULL}, [ActRcvTstQst ] = { 126,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Tst_ReceiveQst ,NULL},
[ActReqRemTstQst ] = {1523,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestRemoveQst ,NULL}, [ActReqRemSevTstQst ] = {1835,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestRemoveSelectedQsts ,NULL},
[ActRemTstQst ] = { 133,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RemoveQst ,NULL}, [ActRemSevTstQst ] = {1836,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RemoveSelectedQsts ,NULL},
[ActShfTstQst ] = { 455,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ChangeShuffleQst ,NULL}, [ActReqRemOneTstQst ] = {1523,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestRemoveOneQst ,NULL},
[ActRemOneTstQst ] = { 133,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RemoveOneQst ,NULL},
[ActChgShfTstQst ] = { 455,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ChangeShuffleQst ,NULL},
[ActCfgTst ] = { 451,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormConfig ,NULL}, [ActCfgTst ] = { 451,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ShowFormConfig ,NULL},
[ActEnableTag ] = { 453,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_EnableTag ,NULL}, [ActEnableTag ] = { 453,-1,TabUnk,ActReqTst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_EnableTag ,NULL},
@ -1862,7 +1864,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #130 (obsolete action) -1, // #130 (obsolete action)
-1, // #131 (obsolete action) -1, // #131 (obsolete action)
ActLstTstQst, // #132 ActLstTstQst, // #132
ActRemTstQst, // #133 ActRemOneTstQst, // #133
-1, // #134 (obsolete action) -1, // #134 (obsolete action)
-1, // #135 (obsolete action) -1, // #135 (obsolete action)
-1, // #136 (obsolete action) -1, // #136 (obsolete action)
@ -2184,7 +2186,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActDisableTag, // #452 ActDisableTag, // #452
ActEnableTag, // #453 ActEnableTag, // #453
ActRcvCfgTst, // #454 ActRcvCfgTst, // #454
ActShfTstQst, // #455 ActChgShfTstQst, // #455
-1, // #456 (obsolete action) -1, // #456 (obsolete action)
-1, // #457 (obsolete action) -1, // #457 (obsolete action)
-1, // #458 (obsolete action) -1, // #458 (obsolete action)
@ -3252,7 +3254,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActSeeSocPrf, // #1520 ActSeeSocPrf, // #1520
ActFrmLogIn, // #1521 ActFrmLogIn, // #1521
ActUpdSignUpReq, // #1522 ActUpdSignUpReq, // #1522
ActReqRemTstQst, // #1523 ActReqRemOneTstQst, // #1523
ActReqRemSvyQst, // #1524 ActReqRemSvyQst, // #1524
ActAdmTchCrsGrp, // #1525 ActAdmTchCrsGrp, // #1525
ActChgToAdmTch, // #1526 ActChgToAdmTch, // #1526
@ -3564,6 +3566,8 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActDwnPrgItm, // #1833 ActDwnPrgItm, // #1833
ActRgtPrgItm, // #1833 ActRgtPrgItm, // #1833
ActLftPrgItm, // #1834 ActLftPrgItm, // #1834
ActReqRemSevTstQst, // #1835
ActRemSevTstQst, // #1836
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -64,7 +64,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_MAX_ACTION_COD 1834 #define Act_MAX_ACTION_COD 1836
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -613,97 +613,99 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActImpTstQst (ActChgCrsTT1stDay + 102) #define ActImpTstQst (ActChgCrsTT1stDay + 102)
#define ActLstTstQst (ActChgCrsTT1stDay + 103) #define ActLstTstQst (ActChgCrsTT1stDay + 103)
#define ActRcvTstQst (ActChgCrsTT1stDay + 104) #define ActRcvTstQst (ActChgCrsTT1stDay + 104)
#define ActReqRemTstQst (ActChgCrsTT1stDay + 105) #define ActReqRemSevTstQst (ActChgCrsTT1stDay + 105)
#define ActRemTstQst (ActChgCrsTT1stDay + 106) #define ActRemSevTstQst (ActChgCrsTT1stDay + 106)
#define ActShfTstQst (ActChgCrsTT1stDay + 107) #define ActReqRemOneTstQst (ActChgCrsTT1stDay + 107)
#define ActCfgTst (ActChgCrsTT1stDay + 108) #define ActRemOneTstQst (ActChgCrsTT1stDay + 108)
#define ActEnableTag (ActChgCrsTT1stDay + 109) #define ActChgShfTstQst (ActChgCrsTT1stDay + 109)
#define ActDisableTag (ActChgCrsTT1stDay + 110) #define ActCfgTst (ActChgCrsTT1stDay + 110)
#define ActRenTag (ActChgCrsTT1stDay + 111) #define ActEnableTag (ActChgCrsTT1stDay + 111)
#define ActRcvCfgTst (ActChgCrsTT1stDay + 112) #define ActDisableTag (ActChgCrsTT1stDay + 112)
#define ActRenTag (ActChgCrsTT1stDay + 113)
#define ActRcvCfgTst (ActChgCrsTT1stDay + 114)
#define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 113) #define ActReqSeeMyTstRes (ActChgCrsTT1stDay + 115)
#define ActSeeMyTstRes (ActChgCrsTT1stDay + 114) #define ActSeeMyTstRes (ActChgCrsTT1stDay + 116)
#define ActSeeOneTstResMe (ActChgCrsTT1stDay + 115) #define ActSeeOneTstResMe (ActChgCrsTT1stDay + 117)
#define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 116) #define ActReqSeeUsrTstRes (ActChgCrsTT1stDay + 118)
#define ActSeeUsrTstRes (ActChgCrsTT1stDay + 117) #define ActSeeUsrTstRes (ActChgCrsTT1stDay + 119)
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 118) #define ActSeeOneTstResOth (ActChgCrsTT1stDay + 120)
#define ActSeeGam (ActChgCrsTT1stDay + 119) #define ActSeeGam (ActChgCrsTT1stDay + 121)
#define ActReqRemMch (ActChgCrsTT1stDay + 120) #define ActReqRemMch (ActChgCrsTT1stDay + 122)
#define ActRemMch (ActChgCrsTT1stDay + 121) #define ActRemMch (ActChgCrsTT1stDay + 123)
#define ActReqNewMch (ActChgCrsTT1stDay + 122) #define ActReqNewMch (ActChgCrsTT1stDay + 124)
#define ActNewMch (ActChgCrsTT1stDay + 123) #define ActNewMch (ActChgCrsTT1stDay + 125)
#define ActResMch (ActChgCrsTT1stDay + 124) #define ActResMch (ActChgCrsTT1stDay + 126)
#define ActBckMch (ActChgCrsTT1stDay + 125) #define ActBckMch (ActChgCrsTT1stDay + 127)
#define ActPlyPauMch (ActChgCrsTT1stDay + 126) #define ActPlyPauMch (ActChgCrsTT1stDay + 128)
#define ActFwdMch (ActChgCrsTT1stDay + 127) #define ActFwdMch (ActChgCrsTT1stDay + 129)
#define ActChgNumColMch (ActChgCrsTT1stDay + 128) #define ActChgNumColMch (ActChgCrsTT1stDay + 130)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 129) #define ActChgVisResMchQst (ActChgCrsTT1stDay + 131)
#define ActMchCntDwn (ActChgCrsTT1stDay + 130) #define ActMchCntDwn (ActChgCrsTT1stDay + 132)
#define ActRefMchTch (ActChgCrsTT1stDay + 131) #define ActRefMchTch (ActChgCrsTT1stDay + 133)
#define ActJoiMch (ActChgCrsTT1stDay + 132) #define ActJoiMch (ActChgCrsTT1stDay + 134)
#define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 133) #define ActSeeMchAnsQstStd (ActChgCrsTT1stDay + 135)
#define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 134) #define ActRemMchAnsQstStd (ActChgCrsTT1stDay + 136)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 135) #define ActAnsMchQstStd (ActChgCrsTT1stDay + 137)
#define ActRefMchStd (ActChgCrsTT1stDay + 136) #define ActRefMchStd (ActChgCrsTT1stDay + 138)
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 137) #define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 139)
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 138) #define ActSeeMyMchResGam (ActChgCrsTT1stDay + 140)
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 139) #define ActSeeMyMchResMch (ActChgCrsTT1stDay + 141)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 140) #define ActSeeOneMchResMe (ActChgCrsTT1stDay + 142)
#define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 141) #define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 143)
#define ActSeeAllMchResCrs (ActChgCrsTT1stDay + 142) #define ActSeeAllMchResCrs (ActChgCrsTT1stDay + 144)
#define ActSeeAllMchResGam (ActChgCrsTT1stDay + 143) #define ActSeeAllMchResGam (ActChgCrsTT1stDay + 145)
#define ActSeeAllMchResMch (ActChgCrsTT1stDay + 144) #define ActSeeAllMchResMch (ActChgCrsTT1stDay + 146)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 145) #define ActSeeOneMchResOth (ActChgCrsTT1stDay + 147)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 146) #define ActChgVisResMchUsr (ActChgCrsTT1stDay + 148)
#define ActFrmNewGam (ActChgCrsTT1stDay + 147) #define ActFrmNewGam (ActChgCrsTT1stDay + 149)
#define ActEdiOneGam (ActChgCrsTT1stDay + 148) #define ActEdiOneGam (ActChgCrsTT1stDay + 150)
#define ActNewGam (ActChgCrsTT1stDay + 149) #define ActNewGam (ActChgCrsTT1stDay + 151)
#define ActChgGam (ActChgCrsTT1stDay + 150) #define ActChgGam (ActChgCrsTT1stDay + 152)
#define ActReqRemGam (ActChgCrsTT1stDay + 151) #define ActReqRemGam (ActChgCrsTT1stDay + 153)
#define ActRemGam (ActChgCrsTT1stDay + 152) #define ActRemGam (ActChgCrsTT1stDay + 154)
#define ActHidGam (ActChgCrsTT1stDay + 153) #define ActHidGam (ActChgCrsTT1stDay + 155)
#define ActShoGam (ActChgCrsTT1stDay + 154) #define ActShoGam (ActChgCrsTT1stDay + 156)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 155) #define ActAddOneGamQst (ActChgCrsTT1stDay + 157)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 156) #define ActGamLstTstQst (ActChgCrsTT1stDay + 158)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 157) #define ActAddTstQstToGam (ActChgCrsTT1stDay + 159)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 158) #define ActReqRemGamQst (ActChgCrsTT1stDay + 160)
#define ActRemGamQst (ActChgCrsTT1stDay + 159) #define ActRemGamQst (ActChgCrsTT1stDay + 161)
#define ActUp_GamQst (ActChgCrsTT1stDay + 160) #define ActUp_GamQst (ActChgCrsTT1stDay + 162)
#define ActDwnGamQst (ActChgCrsTT1stDay + 161) #define ActDwnGamQst (ActChgCrsTT1stDay + 163)
#define ActSeeSvy (ActChgCrsTT1stDay + 162) #define ActSeeSvy (ActChgCrsTT1stDay + 164)
#define ActAnsSvy (ActChgCrsTT1stDay + 163) #define ActAnsSvy (ActChgCrsTT1stDay + 165)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 164) #define ActFrmNewSvy (ActChgCrsTT1stDay + 166)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 165) #define ActEdiOneSvy (ActChgCrsTT1stDay + 167)
#define ActNewSvy (ActChgCrsTT1stDay + 166) #define ActNewSvy (ActChgCrsTT1stDay + 168)
#define ActChgSvy (ActChgCrsTT1stDay + 167) #define ActChgSvy (ActChgCrsTT1stDay + 169)
#define ActReqRemSvy (ActChgCrsTT1stDay + 168) #define ActReqRemSvy (ActChgCrsTT1stDay + 170)
#define ActRemSvy (ActChgCrsTT1stDay + 169) #define ActRemSvy (ActChgCrsTT1stDay + 171)
#define ActReqRstSvy (ActChgCrsTT1stDay + 170) #define ActReqRstSvy (ActChgCrsTT1stDay + 172)
#define ActRstSvy (ActChgCrsTT1stDay + 171) #define ActRstSvy (ActChgCrsTT1stDay + 173)
#define ActHidSvy (ActChgCrsTT1stDay + 172) #define ActHidSvy (ActChgCrsTT1stDay + 174)
#define ActShoSvy (ActChgCrsTT1stDay + 173) #define ActShoSvy (ActChgCrsTT1stDay + 175)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 174) #define ActEdiOneSvyQst (ActChgCrsTT1stDay + 176)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 175) #define ActRcvSvyQst (ActChgCrsTT1stDay + 177)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 176) #define ActReqRemSvyQst (ActChgCrsTT1stDay + 178)
#define ActRemSvyQst (ActChgCrsTT1stDay + 177) #define ActRemSvyQst (ActChgCrsTT1stDay + 179)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 178) #define ActSeeOneExaAnn (ActChgCrsTT1stDay + 180)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 179) #define ActSeeDatExaAnn (ActChgCrsTT1stDay + 181)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 180) #define ActEdiExaAnn (ActChgCrsTT1stDay + 182)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 181) #define ActRcvExaAnn (ActChgCrsTT1stDay + 183)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 182) #define ActPrnExaAnn (ActChgCrsTT1stDay + 184)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 183) #define ActReqRemExaAnn (ActChgCrsTT1stDay + 185)
#define ActRemExaAnn (ActChgCrsTT1stDay + 184) #define ActRemExaAnn (ActChgCrsTT1stDay + 186)
#define ActHidExaAnn (ActChgCrsTT1stDay + 185) #define ActHidExaAnn (ActChgCrsTT1stDay + 187)
#define ActShoExaAnn (ActChgCrsTT1stDay + 186) #define ActShoExaAnn (ActChgCrsTT1stDay + 188)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Files tab **********************************/ /******************************** Files tab **********************************/

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.147 (2020-03-14)" #define Log_PLATFORM_VERSION "SWAD 19.148 (2020-03-17)"
#define CSS_FILE "swad19.146.css" #define CSS_FILE "swad19.146.css"
#define JS_FILE "swad19.91.1.js" #define JS_FILE "swad19.91.1.js"
/* /*
@ -521,10 +521,13 @@ Param
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué? // TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
// TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario // TODO: En la lista de conectados central, poner el logo de la institución a la que pertenece el usuario
// TODO: Miguel Damas: al principio de los exámenes tendría que poner cuánto resta cada pregunta // TODO: Miguel Damas: al principio de los exámenes tendría que poner cuánto resta cada pregunta
// TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo
// TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores // TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores
// TODO: Si el alumno ha marcado "Permitir que los profesores...", entonces pedir confirmación al pulsar el botón azul, para evitar que se envíe por error antes de tiempo
Version 19.148: Mar 17, 2020 Code refactoring in tests.
New actions to remove several test questions. (282868 lines)
Version 19.147: Mar 14, 2020 Change MathJax to version 3.0.1. (282550 lines) Version 19.147: Mar 14, 2020 Change MathJax to version 3.0.1. (282550 lines)
Install MathJax 3.0.1
Copy the following JavaScript file to public directory: Copy the following JavaScript file to public directory:
sudo cp js/mathjax-config.js /var/www/html/swad/ sudo cp js/mathjax-config.js /var/www/html/swad/

View File

@ -3906,7 +3906,7 @@ void For_ReceiveForumPost (void)
Media.Width = For_IMAGE_SAVED_MAX_WIDTH; Media.Width = For_IMAGE_SAVED_MAX_WIDTH;
Media.Height = For_IMAGE_SAVED_MAX_HEIGHT; Media.Height = For_IMAGE_SAVED_MAX_HEIGHT;
Media.Quality = For_IMAGE_SAVED_QUALITY; Media.Quality = For_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Media,NULL, Med_GetMediaFromForm (-1L,-1L,-1,&Media,NULL,
For_FORUM_POSTS_SECTION_ID); // Alerts will be shown later in posts section For_FORUM_POSTS_SECTION_ID); // Alerts will be shown later in posts section
/***** Create a new message *****/ /***** Create a new message *****/

View File

@ -156,7 +156,7 @@ static void Gam_ListGameQuestions (struct Game *Game);
static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts, static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
MYSQL_RES *mysql_res, MYSQL_RES *mysql_res,
bool ICanEditQuestions); bool ICanEditQuestions);
static void Gam_ListQuestionForEdition (const char *StrQstInd); static void Gam_ListQuestionForEdition (long QstCod,const char *StrQstInd);
static void Gam_PutIconToAddNewQuestions (void); static void Gam_PutIconToAddNewQuestions (void);
static void Gam_PutButtonToAddNewQuestions (void); static void Gam_PutButtonToAddNewQuestions (void);
@ -1873,6 +1873,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
extern const char *Txt_Movement_not_allowed; extern const char *Txt_Movement_not_allowed;
unsigned NumQst; unsigned NumQst;
MYSQL_ROW row; MYSQL_ROW row;
long QstCod;
unsigned QstInd; unsigned QstInd;
unsigned MaxQstInd; unsigned MaxQstInd;
char StrQstInd[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; char StrQstInd[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
@ -1915,7 +1916,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
QstInd); QstInd);
/* Get question code (row[1]) */ /* Get question code (row[1]) */
Gbl.Test.QstCod = Str_ConvertStrCodToLongCod (row[1]); QstCod = Str_ConvertStrCodToLongCod (row[1]);
/***** Icons *****/ /***** Icons *****/
Gam_SetCurrentGamCod (GamCod); // Used to pass parameter Gam_SetCurrentGamCod (GamCod); // Used to pass parameter
@ -1962,12 +1963,15 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
/* Put icon to edit the question */ /* Put icon to edit the question */
if (ICanEditQuestions) if (ICanEditQuestions)
Ico_PutContextualIconToEdit (ActEdiOneTstQst,NULL,Tst_PutParamQstCod); {
Tst_SetParamGblQstCod (QstCod);
Ico_PutContextualIconToEdit (ActEdiOneTstQst,NULL,Tst_PutParamGblQstCod);
}
HTM_TD_End (); HTM_TD_End ();
/***** Question *****/ /***** Question *****/
Gam_ListQuestionForEdition (StrQstInd); Gam_ListQuestionForEdition (QstCod,StrQstInd);
HTM_TR_End (); HTM_TR_End ();
@ -1983,7 +1987,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
/********************** List game question for edition ***********************/ /********************** List game question for edition ***********************/
/*****************************************************************************/ /*****************************************************************************/
static void Gam_ListQuestionForEdition (const char *StrQstInd) static void Gam_ListQuestionForEdition (long QstCod,const char *StrQstInd)
{ {
extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES]; extern const char *Txt_TST_STR_ANSWER_TYPES[Tst_NUM_ANS_TYPES];
extern const char *Txt_Question_removed; extern const char *Txt_Question_removed;
@ -1992,7 +1996,7 @@ static void Gam_ListQuestionForEdition (const char *StrQstInd)
bool QstExists; bool QstExists;
/***** Get question from database *****/ /***** Get question from database *****/
QstExists = Tst_GetOneQuestionByCod (Gbl.Test.QstCod,&mysql_res); // Question exists? QstExists = Tst_GetOneQuestionByCod (QstCod,&mysql_res); // Question exists?
if (QstExists) if (QstExists)
{ {
@ -2033,13 +2037,13 @@ static void Gam_ListQuestionForEdition (const char *StrQstInd)
/***** Write question code *****/ /***** Write question code *****/
HTM_TD_Begin ("class=\"DAT_SMALL CT COLOR%u\"",Gbl.RowEvenOdd); HTM_TD_Begin ("class=\"DAT_SMALL CT COLOR%u\"",Gbl.RowEvenOdd);
HTM_TxtF ("%ld ",Gbl.Test.QstCod); HTM_TxtF ("%ld ",QstCod);
HTM_TD_End (); HTM_TD_End ();
/***** Write the question tags *****/ /***** Write the question tags *****/
HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd); HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
if (QstExists) if (QstExists)
Tst_GetAndWriteTagsQst (Gbl.Test.QstCod); Tst_GetAndWriteTagsQst (QstCod);
HTM_TD_End (); HTM_TD_End ();
/***** Write stem and media (row[4]) *****/ /***** Write stem and media (row[4]) *****/
@ -2063,7 +2067,7 @@ static void Gam_ListQuestionForEdition (const char *StrQstInd)
Tst_WriteQstFeedback (row[5],"TEST_EDI_LIGHT"); Tst_WriteQstFeedback (row[5],"TEST_EDI_LIGHT");
/* Show answers */ /* Show answers */
Tst_WriteAnswersEdit (Gbl.Test.QstCod); Tst_WriteAnswersEdit (QstCod);
} }
else else
{ {

View File

@ -652,7 +652,6 @@ struct Globals
struct struct
{ {
struct Tst_Config Config; struct Tst_Config Config;
long QstCod;
struct struct
{ {
unsigned Num; unsigned Num;
@ -690,11 +689,6 @@ struct Globals
} Answer; } Answer;
char ListAnsTypes[Tst_MAX_BYTES_LIST_ANSWER_TYPES + 1]; char ListAnsTypes[Tst_MAX_BYTES_LIST_ANSWER_TYPES + 1];
Tst_QuestionsOrder_t SelectedOrder; Tst_QuestionsOrder_t SelectedOrder;
struct
{
bool CreateXML; // Create an XML file and Export questions into it?
FILE *FileXML;
} XML;
} Test; } Test;
struct struct
{ {

View File

@ -504,11 +504,11 @@ static void Med_PutHiddenFormTypeMediaUploader (const char UniqueId[Frm_MAX_BYTE
/******************** Get media (image/video) from form **********************/ /******************** Get media (image/video) from form **********************/
/*****************************************************************************/ /*****************************************************************************/
// Media constructor must be called before calling this function // Media constructor must be called before calling this function
// If NumMediaInForm < 0, params have no suffix // If NumMediaInForm < 0, params have no suffix
// If NumMediaInForm >= 0, the number is a suffix of the params // If NumMediaInForm >= 0, the number is a suffix of the params
void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media, void Med_GetMediaFromForm (long CrsCod,long QstCod,int NumMediaInForm,struct Media *Media,
void (*GetMediaFromDB) (int NumMediaInForm,struct Media *Media), void (*GetMediaFromDB) (long CrsCod,long QstCod,int NumMediaInForm,struct Media *Media),
const char *SectionForAlerts) const char *SectionForAlerts)
{ {
extern const char *Txt_Error_sending_or_processing_image_video; extern const char *Txt_Error_sending_or_processing_image_video;
@ -581,7 +581,7 @@ void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media,
/***** Get media name *****/ /***** Get media name *****/
if (GetMediaFromDB != NULL) if (GetMediaFromDB != NULL)
GetMediaFromDB (NumMediaInForm,Media); GetMediaFromDB (CrsCod,QstCod,NumMediaInForm,Media);
break; break;
default: // Unknown action default: // Unknown action
Media->Action = Med_ACTION_NO_MEDIA; Media->Action = Med_ACTION_NO_MEDIA;

View File

@ -141,8 +141,8 @@ void Med_ResetMedia (struct Media *Media);
void Med_GetMediaDataByCod (struct Media *Media); void Med_GetMediaDataByCod (struct Media *Media);
void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput); void Med_PutMediaUploader (int NumMediaInForm,const char *ClassInput);
void Med_GetMediaFromForm (int NumMediaInForm,struct Media *Media, void Med_GetMediaFromForm (long CrsCod,long QstCod,int NumMediaInForm,struct Media *Media,
void (*GetMediaFromDB) (int NumMediaInForm,struct Media *Media), void (*GetMediaFromDB) (long CrsCod,long QstCod,int NumMediaInForm,struct Media *Media),
const char *SectionForAlerts); const char *SectionForAlerts);
void Med_SetParamNames (struct ParamUploadMedia *ParamUploadMedia,int NumMediaInForm); void Med_SetParamNames (struct ParamUploadMedia *ParamUploadMedia,int NumMediaInForm);

View File

@ -755,7 +755,7 @@ void Msg_RecMsgFromUsr (void)
Media.Width = Msg_IMAGE_SAVED_MAX_WIDTH; Media.Width = Msg_IMAGE_SAVED_MAX_WIDTH;
Media.Height = Msg_IMAGE_SAVED_MAX_HEIGHT; Media.Height = Msg_IMAGE_SAVED_MAX_HEIGHT;
Media.Quality = Msg_IMAGE_SAVED_QUALITY; Media.Quality = Msg_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Media,NULL,NULL); Med_GetMediaFromForm (-1L,-1L,-1,&Media,NULL,NULL);
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
/***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK], that holds the list of the /***** Loop over the list Gbl.Usrs.Selected.List[Rol_UNK], that holds the list of the

File diff suppressed because it is too large Load Diff

View File

@ -193,13 +193,20 @@ bool Tst_CheckIfQstFormatIsCorrectAndCountNumOptions (void);
bool Tst_CheckIfQuestionExistsInDB (void); bool Tst_CheckIfQuestionExistsInDB (void);
long Tst_GetIntAnsFromStr (char *Str); long Tst_GetIntAnsFromStr (char *Str);
void Tst_RequestRemoveQst (void);
void Tst_RemoveQst (void); void Tst_RequestRemoveSelectedQsts (void);
void Tst_RemoveSelectedQsts (void);
void Tst_RequestRemoveOneQst (void);
void Tst_RemoveOneQst (void);
void Tst_ChangeShuffleQst (void); void Tst_ChangeShuffleQst (void);
void Tst_PutParamQstCod (void); void Tst_SetParamGblQstCod (long QstCod);
long Tst_GetParamGblQstCod (void);
void Tst_PutParamGblQstCod (void);
void Tst_PutParamQstCod (long QstCod);
void Tst_InsertOrUpdateQstTagsAnsIntoDB (void); long Tst_InsertOrUpdateQstTagsAnsIntoDB (long QstCod);
void Tst_RemoveCrsTests (long CrsCod); void Tst_RemoveCrsTests (long CrsCod);

View File

@ -66,9 +66,12 @@ extern struct Globals Gbl;
/*****************************************************************************/ /*****************************************************************************/
static void TsI_PutParamsExportQsts (void); static void TsI_PutParamsExportQsts (void);
static void TsI_PutCreateXMLParam (void);
static void TsI_GetAndWriteTagsXML (long QstCod); static void TsI_ExportQuestion (long QstCod,FILE *FileXML);
static void TsI_WriteAnswersOfAQstXML (long QstCod);
static void TsI_GetAndWriteTagsXML (long QstCod,FILE *FileXML);
static void TsI_WriteAnswersOfAQstXML (long QstCod,FILE *FileXML);
static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML); static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML);
static void TsI_ImportQuestionsFromXMLBuffer (const char *XMLBuffer); static void TsI_ImportQuestionsFromXMLBuffer (const char *XMLBuffer);
static Tst_AnswerType_t TsI_ConvertFromStrAnsTypXMLToAnsTyp (const char *StrAnsTypeXML); static Tst_AnswerType_t TsI_ConvertFromStrAnsTypXMLToAnsTyp (const char *StrAnsTypeXML);
@ -102,9 +105,23 @@ static void TsI_PutParamsExportQsts (void)
Tst_WriteParamEditQst (); Tst_WriteParamEditQst ();
Par_PutHiddenParamChar ("OnlyThisQst",'N'); Par_PutHiddenParamChar ("OnlyThisQst",'N');
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Gbl.Test.SelectedOrder); Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Gbl.Test.SelectedOrder);
TsI_PutCreateXMLParam ();
}
/*****************************************************************************/
/************************ Parameter to create XML file ***********************/
/*****************************************************************************/
static void TsI_PutCreateXMLParam (void)
{
Par_PutHiddenParamChar ("CreateXML",'Y'); Par_PutHiddenParamChar ("CreateXML",'Y');
} }
bool TsI_GetCreateXMLParamFromForm (void)
{
return Par_GetParToBool ("CreateXML");
}
/*****************************************************************************/ /*****************************************************************************/
/*************** Put a link (form) to import test questions ******************/ /*************** Put a link (form) to import test questions ******************/
/*****************************************************************************/ /*****************************************************************************/
@ -157,10 +174,10 @@ void TsI_ShowFormImportQstsFromXML (void)
void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res) void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res)
{ {
extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES]; extern const char *The_ClassFormOutBoxBold[The_NUM_THEMES];
extern const char *Tst_StrAnswerTypesXML[Tst_NUM_ANS_TYPES];
extern const char *Txt_NEW_LINE; extern const char *Txt_NEW_LINE;
extern const char *Txt_XML_file; extern const char *Txt_XML_file;
char PathPubFile[PATH_MAX + 1]; char PathPubFile[PATH_MAX + 1];
FILE *FileXML;
unsigned long NumRow; unsigned long NumRow;
MYSQL_ROW row; MYSQL_ROW row;
long QstCod; long QstCod;
@ -175,77 +192,31 @@ void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res)
Cfg_PATH_FILE_BROWSER_TMP_PUBLIC, Cfg_PATH_FILE_BROWSER_TMP_PUBLIC,
Gbl.FileBrowser.TmpPubDir.L, Gbl.FileBrowser.TmpPubDir.L,
Gbl.FileBrowser.TmpPubDir.R); Gbl.FileBrowser.TmpPubDir.R);
if ((Gbl.Test.XML.FileXML = fopen (PathPubFile,"wb")) == NULL) if ((FileXML = fopen (PathPubFile,"wb")) == NULL)
Lay_ShowErrorAndExit ("Can not open target file."); Lay_ShowErrorAndExit ("Can not open target file.");
/***** Start XML file *****/ /***** Start XML file *****/
XML_WriteStartFile (Gbl.Test.XML.FileXML,"test",false); XML_WriteStartFile (FileXML,"test",false);
fprintf (Gbl.Test.XML.FileXML,"%s",Txt_NEW_LINE); fprintf (FileXML,"%s",Txt_NEW_LINE);
/***** Write rows *****/ /***** Write rows *****/
for (NumRow = 0; for (NumRow = 0;
NumRow < NumRows; NumRow < NumRows;
NumRow++) NumRow++)
{ {
/* Get question code (row[0]) */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/*
row[0] QstCod
row[1] UNIX_TIMESTAMP(EditTime)
row[2] AnsType
row[3] Shuffle
row[4] Stem
row[5] Feedback
row[6] MedCod
row[7] NumHits
row[8] NumHitsNotBlank
row[9] Score
*/
/* row[0] holds the code of the question */
if ((QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0) if ((QstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of question."); Lay_ShowErrorAndExit ("Wrong code of question.");
/* Write the question type (row[2]) */ TsI_ExportQuestion (QstCod,FileXML);
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (Gbl.Test.XML.FileXML,"<question type=\"%s\">%s",
Tst_StrAnswerTypesXML[Gbl.Test.AnswerType],Txt_NEW_LINE);
/* Write the question tags */
fprintf (Gbl.Test.XML.FileXML,"<tags>%s",Txt_NEW_LINE);
TsI_GetAndWriteTagsXML (QstCod);
fprintf (Gbl.Test.XML.FileXML,"</tags>%s",Txt_NEW_LINE);
/* Write the stem (row[4]), that is in HTML format */
fprintf (Gbl.Test.XML.FileXML,"<stem>%s</stem>%s",
row[4],Txt_NEW_LINE);
/* Write the feedback (row[5]), that is in HTML format */
if (row[5])
if (row[5][0])
fprintf (Gbl.Test.XML.FileXML,"<feedback>%s</feedback>%s",
row[5],Txt_NEW_LINE);
/* Write the answers of this question.
Shuffle can be enabled or disabled (row[3]) */
fprintf (Gbl.Test.XML.FileXML,"<answer");
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE ||
Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE)
fprintf (Gbl.Test.XML.FileXML," shuffle=\"%s\"",
(row[3][0] == 'Y') ? "yes" :
"no");
fprintf (Gbl.Test.XML.FileXML,">");
TsI_WriteAnswersOfAQstXML (QstCod);
fprintf (Gbl.Test.XML.FileXML,"</answer>%s",Txt_NEW_LINE);
/* End question */
fprintf (Gbl.Test.XML.FileXML,"</question>%s%s",
Txt_NEW_LINE,Txt_NEW_LINE);
} }
/***** End XML file *****/ /***** End XML file *****/
XML_WriteEndFile (Gbl.Test.XML.FileXML,"test"); XML_WriteEndFile (FileXML,"test");
/***** Close the XML file *****/ /***** Close the XML file *****/
fclose (Gbl.Test.XML.FileXML); fclose (FileXML);
/***** Return to start of query result *****/ /***** Return to start of query result *****/
mysql_data_seek (mysql_res,0); mysql_data_seek (mysql_res,0);
@ -261,11 +232,77 @@ void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res)
HTM_A_End (); HTM_A_End ();
} }
/*****************************************************************************/
/****************** Write one question into the XML file *********************/
/*****************************************************************************/
static void TsI_ExportQuestion (long QstCod,FILE *FileXML)
{
extern const char *Tst_StrAnswerTypesXML[Tst_NUM_ANS_TYPES];
extern const char *Txt_NEW_LINE;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
if (Tst_GetOneQuestionByCod (QstCod,&mysql_res))
{
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
/*
row[0] QstCod
row[1] UNIX_TIMESTAMP(EditTime)
row[2] AnsType
row[3] Shuffle
row[4] Stem
row[5] Feedback
row[6] MedCod
row[7] NumHits
row[8] NumHitsNotBlank
row[9] Score
*/
/***** Write the question type (row[2]) *****/
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[2]);
fprintf (FileXML,"<question type=\"%s\">%s",
Tst_StrAnswerTypesXML[Gbl.Test.AnswerType],Txt_NEW_LINE);
/***** Write the question tags *****/
fprintf (FileXML,"<tags>%s",Txt_NEW_LINE);
TsI_GetAndWriteTagsXML (QstCod,FileXML);
fprintf (FileXML,"</tags>%s",Txt_NEW_LINE);
/***** Write the stem (row[4]), that is in HTML format *****/
fprintf (FileXML,"<stem>%s</stem>%s",
row[4],Txt_NEW_LINE);
/***** Write the feedback (row[5]), that is in HTML format *****/
if (row[5])
if (row[5][0])
fprintf (FileXML,"<feedback>%s</feedback>%s",
row[5],Txt_NEW_LINE);
/***** Write the answers of this question.
Shuffle can be enabled or disabled (row[3]) *****/
fprintf (FileXML,"<answer");
if (Gbl.Test.AnswerType == Tst_ANS_UNIQUE_CHOICE ||
Gbl.Test.AnswerType == Tst_ANS_MULTIPLE_CHOICE)
fprintf (FileXML," shuffle=\"%s\"",
(row[3][0] == 'Y') ? "yes" :
"no");
fprintf (FileXML,">");
TsI_WriteAnswersOfAQstXML (QstCod,FileXML);
fprintf (FileXML,"</answer>%s",Txt_NEW_LINE);
/***** End question *****/
fprintf (FileXML,"</question>%s%s",
Txt_NEW_LINE,Txt_NEW_LINE);
}
}
/*****************************************************************************/ /*****************************************************************************/
/************* Get and write tags of a question into the XML file ************/ /************* Get and write tags of a question into the XML file ************/
/*****************************************************************************/ /*****************************************************************************/
static void TsI_GetAndWriteTagsXML (long QstCod) static void TsI_GetAndWriteTagsXML (long QstCod,FILE *FileXML)
{ {
extern const char *Txt_NEW_LINE; extern const char *Txt_NEW_LINE;
unsigned long NumRow; unsigned long NumRow;
@ -280,7 +317,7 @@ static void TsI_GetAndWriteTagsXML (long QstCod)
NumRow++) NumRow++)
{ {
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
fprintf (Gbl.Test.XML.FileXML,"<tag>%s</tag>%s", fprintf (FileXML,"<tag>%s</tag>%s",
row[0],Txt_NEW_LINE); row[0],Txt_NEW_LINE);
} }
@ -292,7 +329,7 @@ static void TsI_GetAndWriteTagsXML (long QstCod)
/**************** Get and write the answers of a test question ***************/ /**************** Get and write the answers of a test question ***************/
/*****************************************************************************/ /*****************************************************************************/
static void TsI_WriteAnswersOfAQstXML (long QstCod) static void TsI_WriteAnswersOfAQstXML (long QstCod,FILE *FileXML)
{ {
extern const char *Txt_NEW_LINE; extern const char *Txt_NEW_LINE;
unsigned NumOpt; unsigned NumOpt;
@ -315,7 +352,7 @@ static void TsI_WriteAnswersOfAQstXML (long QstCod)
case Tst_ANS_INT: case Tst_ANS_INT:
Tst_CheckIfNumberOfAnswersIsOne (); Tst_CheckIfNumberOfAnswersIsOne ();
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
fprintf (Gbl.Test.XML.FileXML,"%ld", fprintf (FileXML,"%ld",
Tst_GetIntAnsFromStr (row[1])); Tst_GetIntAnsFromStr (row[1]));
break; break;
case Tst_ANS_FLOAT: case Tst_ANS_FLOAT:
@ -329,9 +366,9 @@ static void TsI_WriteAnswersOfAQstXML (long QstCod)
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
FloatNum[i] = Str_GetDoubleFromStr (row[1]); FloatNum[i] = Str_GetDoubleFromStr (row[1]);
} }
fprintf (Gbl.Test.XML.FileXML,"%s" fprintf (FileXML,"%s"
"<lower>%.15lg</lower>%s" "<lower>%.15lg</lower>%s"
"<upper>%.15lg</upper>%s", "<upper>%.15lg</upper>%s",
Txt_NEW_LINE, Txt_NEW_LINE,
FloatNum[0],Txt_NEW_LINE, FloatNum[0],Txt_NEW_LINE,
FloatNum[1],Txt_NEW_LINE); FloatNum[1],Txt_NEW_LINE);
@ -339,14 +376,14 @@ static void TsI_WriteAnswersOfAQstXML (long QstCod)
case Tst_ANS_TRUE_FALSE: case Tst_ANS_TRUE_FALSE:
Tst_CheckIfNumberOfAnswersIsOne (); Tst_CheckIfNumberOfAnswersIsOne ();
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
fprintf (Gbl.Test.XML.FileXML,"%s", fprintf (FileXML,"%s",
row[1][0] == 'T' ? "true" : row[1][0] == 'T' ? "true" :
"false"); "false");
break; break;
case Tst_ANS_UNIQUE_CHOICE: case Tst_ANS_UNIQUE_CHOICE:
case Tst_ANS_MULTIPLE_CHOICE: case Tst_ANS_MULTIPLE_CHOICE:
case Tst_ANS_TEXT: case Tst_ANS_TEXT:
fprintf (Gbl.Test.XML.FileXML,"%s",Txt_NEW_LINE); fprintf (FileXML,"%s",Txt_NEW_LINE);
for (NumOpt = 0; for (NumOpt = 0;
NumOpt < Gbl.Test.Answer.NumOptions; NumOpt < Gbl.Test.Answer.NumOptions;
NumOpt++) NumOpt++)
@ -354,28 +391,28 @@ static void TsI_WriteAnswersOfAQstXML (long QstCod)
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/* Start answer */ /* Start answer */
fprintf (Gbl.Test.XML.FileXML,"<option"); fprintf (FileXML,"<option");
/* Write whether the answer is correct or not (row[4]) */ /* Write whether the answer is correct or not (row[4]) */
if (Gbl.Test.AnswerType != Tst_ANS_TEXT) if (Gbl.Test.AnswerType != Tst_ANS_TEXT)
fprintf (Gbl.Test.XML.FileXML," correct=\"%s\"", fprintf (FileXML," correct=\"%s\"",
(row[4][0] == 'Y') ? "yes" : (row[4][0] == 'Y') ? "yes" :
"no"); "no");
fprintf (Gbl.Test.XML.FileXML,">%s",Txt_NEW_LINE); fprintf (FileXML,">%s",Txt_NEW_LINE);
/* Write the answer (row[1]), that is in HTML */ /* Write the answer (row[1]), that is in HTML */
fprintf (Gbl.Test.XML.FileXML,"<text>%s</text>%s", fprintf (FileXML,"<text>%s</text>%s",
row[1],Txt_NEW_LINE); row[1],Txt_NEW_LINE);
/* Write the feedback (row[2]) */ /* Write the feedback (row[2]) */
if (row[2]) if (row[2])
if (row[2][0]) if (row[2][0])
fprintf (Gbl.Test.XML.FileXML,"<feedback>%s</feedback>%s", fprintf (FileXML,"<feedback>%s</feedback>%s",
row[2],Txt_NEW_LINE); row[2],Txt_NEW_LINE);
/* End answer */ /* End answer */
fprintf (Gbl.Test.XML.FileXML,"</option>%s", fprintf (FileXML,"</option>%s",
Txt_NEW_LINE); Txt_NEW_LINE);
} }
break; break;
@ -438,17 +475,18 @@ void TsI_ImportQstsFromXML (void)
static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML) static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML)
{ {
FILE *FileXML;
char *XMLBuffer; char *XMLBuffer;
unsigned long FileSize; unsigned long FileSize;
/***** Open file *****/ /***** Open file *****/
if ((Gbl.Test.XML.FileXML = fopen (FileNameXML,"rb")) == NULL) if ((FileXML = fopen (FileNameXML,"rb")) == NULL)
Lay_ShowErrorAndExit ("Can not open XML file."); Lay_ShowErrorAndExit ("Can not open XML file.");
/***** Compute file size *****/ /***** Compute file size *****/
fseek (Gbl.Test.XML.FileXML,0L,SEEK_END); fseek (FileXML,0L,SEEK_END);
FileSize = (unsigned long) ftell (Gbl.Test.XML.FileXML); FileSize = (unsigned long) ftell (FileXML);
fseek (Gbl.Test.XML.FileXML,0L,SEEK_SET); fseek (FileXML,0L,SEEK_SET);
/***** Allocate memory for XML buffer *****/ /***** Allocate memory for XML buffer *****/
if ((XMLBuffer = (char *) malloc (FileSize + 1)) == NULL) if ((XMLBuffer = (char *) malloc (FileSize + 1)) == NULL)
@ -456,7 +494,7 @@ static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML)
else else
{ {
/***** Read file contents into XML buffer *****/ /***** Read file contents into XML buffer *****/
if (fread (XMLBuffer,sizeof (char),(size_t) FileSize,Gbl.Test.XML.FileXML)) if (fread (XMLBuffer,sizeof (char),(size_t) FileSize,FileXML))
XMLBuffer[FileSize] = '\0'; XMLBuffer[FileSize] = '\0';
else else
XMLBuffer[0] = '\0'; XMLBuffer[0] = '\0';
@ -468,7 +506,7 @@ static void TsI_ReadQuestionsFromXMLFileAndStoreInDB (const char *FileNameXML)
} }
/***** Close file *****/ /***** Close file *****/
fclose (Gbl.Test.XML.FileXML); fclose (FileXML);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -647,10 +685,8 @@ static void TsI_ImportQuestionsFromXMLBuffer (const char *XMLBuffer)
/***** If a new question ==> insert question, tags and answer in the database *****/ /***** If a new question ==> insert question, tags and answer in the database *****/
if (!QuestionExists) if (!QuestionExists)
{ if (Tst_InsertOrUpdateQstTagsAnsIntoDB (-1L) <= 0)
Gbl.Test.QstCod = -1L; Lay_ShowErrorAndExit ("Can not create question.");
Tst_InsertOrUpdateQstTagsAnsIntoDB ();
}
} }
/***** Destroy test question *****/ /***** Destroy test question *****/

View File

@ -40,6 +40,7 @@
/*****************************************************************************/ /*****************************************************************************/
void TsI_PutFormToExportQuestions (void); void TsI_PutFormToExportQuestions (void);
bool TsI_GetCreateXMLParamFromForm (void);
void TsI_PutFormToImportQuestions (void); void TsI_PutFormToImportQuestions (void);
void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res); void TsI_CreateXML (unsigned long NumRows,MYSQL_RES *mysql_res);
void TsI_ShowFormImportQstsFromXML (void); void TsI_ShowFormImportQstsFromXML (void);

View File

@ -1818,7 +1818,7 @@ const char *Txt_Add_questions =
#elif L==8 // pl #elif L==8 // pl
"Dodaj pytania"; "Dodaj pytania";
#elif L==9 // pt #elif L==9 // pt
"Adicionar quest&otilde;es"; "Adicionar perguntas";
#endif #endif
const char *Txt_Add_this_ID = const char *Txt_Add_this_ID =
@ -2496,7 +2496,7 @@ const char *Txt_Average_number_BR_of_questions_BR_per_survey =
#elif L==8 // pl #elif L==8 // pl
"&Sacute;rednia liczba<br />pyta&nacute;<br />na ankiety"; "&Sacute;rednia liczba<br />pyta&nacute;<br />na ankiety";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; medio<br />de quest&otilde;es<br />por inqu&eacute;rito"; "N&ordm; medio<br />de perguntas<br />por inqu&eacute;rito";
#endif #endif
const char *Txt_Average_BR_number_BR_of_test_BR_questions_BR_per_course = const char *Txt_Average_BR_number_BR_of_test_BR_questions_BR_per_course =
@ -2517,7 +2517,7 @@ const char *Txt_Average_BR_number_BR_of_test_BR_questions_BR_per_course =
#elif L==8 // pl #elif L==8 // pl
"&Sacute;rednia liczba<br />pyta&nacute;<br />testowych<br />na kurs"; "&Sacute;rednia liczba<br />pyta&nacute;<br />testowych<br />na kurs";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; medio<br />de quest&otilde;es<br />de test por<br />disciplina"; "N&ordm; medio<br />de perguntas<br />de test por<br />disciplina";
#endif #endif
const char *Txt_Average_number_BR_of_surveys_BR_per_course = const char *Txt_Average_number_BR_of_surveys_BR_per_course =
@ -6169,7 +6169,7 @@ const char *Txt_Create_question =
#elif L==8 // pl #elif L==8 // pl
"Utw&oacute;rz pytanie"; "Utw&oacute;rz pytanie";
#elif L==9 // pt #elif L==9 // pt
"Criar quest&atilde;o"; "Criar pergunta";
#endif #endif
const char *Txt_Create_record_field = const char *Txt_Create_record_field =
@ -9245,7 +9245,28 @@ const char *Txt_Do_you_really_want_to_remove_the_question_X = // Warning: it is
#elif L==8 // pl #elif L==8 // pl
"Czy na pewno chcesz usunac pytanie <strong>%ld</strong>?"; "Czy na pewno chcesz usunac pytanie <strong>%ld</strong>?";
#elif L==9 // pt #elif L==9 // pt
"Voc&ecirc; realmente deseja remover a quest&atilde;o <strong>%ld</strong>?"; "Voc&ecirc; realmente deseja remover a pergunta <strong>%ld</strong>?";
#endif
const char *Txt_Do_you_really_want_to_remove_the_selected_questions =
#if L==1 // ca
"Realment voleu eliminar les preguntes seleccionades?";
#elif L==2 // de
"Wollen Sie die ausgew&auml;hlten Fragen wirklich entfernen?";
#elif L==3 // en
"Do you really want to remove the selected questions?";
#elif L==4 // es
"&iquest;Realmente desea eliminar las preguntas seleccionadas?";
#elif L==5 // fr
"Voulez-vous vraiment supprimer les questions s&eacute;lectionn&eacute;es?";
#elif L==6 // gn
"&iquest;Realmente desea eliminar las preguntas seleccionadas?"; // Okoteve traducción
#elif L==7 // it
"Vuoi realmente rimuovere le domande selezionate?";
#elif L==8 // pl
"Czy na pewno chcesz usun&aogon;&cacute; wybrane pytania?";
#elif L==9 // pt
"Voc&ecirc; realmente deseja remover as perguntas selecionadas?";
#endif #endif
const char *Txt_Do_you_really_want_to_remove_the_survey_X = // Warning: it is very important to include %s in the following sentences const char *Txt_Do_you_really_want_to_remove_the_survey_X = // Warning: it is very important to include %s in the following sentences
@ -11578,7 +11599,7 @@ const char *Txt_Existing_question =
#elif L==8 // pl #elif L==8 // pl
"Istniej&aogon;ca pytanie"; "Istniej&aogon;ca pytanie";
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o existente"; "Pergunta existente";
#endif #endif
const char *Txt_Expand = const char *Txt_Expand =
@ -11604,9 +11625,9 @@ const char *Txt_Expand =
const char *Txt_Export_questions = const char *Txt_Export_questions =
#if L==1 // ca #if L==1 // ca
"Exportar preguntas"; // Necessita traduccio "Exporta preguntes";
#elif L==2 // de #elif L==2 // de
"Export questions"; // Need Übersetzung "Fragen exportieren";
#elif L==3 // en #elif L==3 // en
"Export questions"; "Export questions";
#elif L==4 // es #elif L==4 // es
@ -11616,9 +11637,9 @@ const char *Txt_Export_questions =
#elif L==6 // gn #elif L==6 // gn
"Exportar preguntas"; // Okoteve traducción "Exportar preguntas"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Export questions"; // Bisogno di traduzione "Esportare domande";
#elif L==8 // pl #elif L==8 // pl
"Export questions"; // Potrzebujesz tlumaczenie "Eksportuj pytania";
#elif L==9 // pt #elif L==9 // pt
"Exportar perguntas"; "Exportar perguntas";
#endif #endif
@ -17775,7 +17796,7 @@ const char *Txt_List_edit_questions =
#elif L==8 // pl #elif L==8 // pl
"Wy&sacute;wietli&cacute; / edytowa&cacute; pytania"; "Wy&sacute;wietli&cacute; / edytowa&cacute; pytania";
#elif L==9 // pt #elif L==9 // pt
"Listar / editar quest&otilde;es"; "Listar / editar perguntas";
#endif #endif
const char *Txt_List_of_detailed_clicks = const char *Txt_List_of_detailed_clicks =
@ -22903,7 +22924,7 @@ const char *Txt_Minimum_time_seconds_per_question_between_two_tests =
#elif L==8 // pl #elif L==8 // pl
"Minimalny czas (w sekundach)<br />na pytanie miedzy<br />dwoma badaniami"; "Minimalny czas (w sekundach)<br />na pytanie miedzy<br />dwoma badaniami";
#elif L==9 // pt #elif L==9 // pt
"Tempo m&iacute;nimo (segundos)<br />por quest&atilde;o<br />entre dois testes"; "Tempo m&iacute;nimo (segundos)<br />por pergunta<br />entre dois testes";
#endif #endif
const char *Txt_minute = const char *Txt_minute =
@ -24880,7 +24901,7 @@ const char *Txt_New_question =
#elif L==8 // pl #elif L==8 // pl
"Nowe pytanie"; "Nowe pytanie";
#elif L==9 // pt #elif L==9 // pt
"Nova quest&atilde;o"; "Nova pergunta";
#endif #endif
const char *Txt_New_record_field = const char *Txt_New_record_field =
@ -26053,7 +26074,7 @@ const char *Txt_No_of_questions =
#elif L==8 // pl #elif L==8 // pl
"Liczba pyta&nacute;"; "Liczba pyta&nacute;";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; de quest&otilde;es"; "N&ordm; de perguntas";
#endif #endif
const char *Txt_No_of_threads = const char *Txt_No_of_threads =
@ -26200,7 +26221,7 @@ const char *Txt_No_questions_found_matching_your_search_criteria =
#elif L==8 // pl #elif L==8 // pl
"Brak pyta&nacute; spelniajacych zadane kryteria wyszukiwania."; "Brak pyta&nacute; spelniajacych zadane kryteria wyszukiwania.";
#elif L==9 // pt #elif L==9 // pt
"N&atilde;o quest&otilde;es com os seus crit&eacute;rios de pesquisa selecionados."; "N&atilde;o perguntas com os seus crit&eacute;rios de pesquisa selecionados.";
#endif #endif
const char *Txt_No_questions_have_been_added = const char *Txt_No_questions_have_been_added =
@ -26347,7 +26368,7 @@ const char *Txt_No_test_questions =
#elif L==8 // pl #elif L==8 // pl
"Brak pyta&nacute; testowych."; "Brak pyta&nacute; testowych.";
#elif L==9 // pt #elif L==9 // pt
"N&atilde;o existem quest&otilde;es de test."; "N&atilde;o existem perguntas de test.";
#endif #endif
const char *Txt_No_user_has_been_eliminated = const char *Txt_No_user_has_been_eliminated =
@ -26716,7 +26737,7 @@ const char *Txt_Non_blank_BR_questions =
#elif L==8 // pl #elif L==8 // pl
"Niepustych<br />pytania"; "Niepustych<br />pytania";
#elif L==9 // pt #elif L==9 // pt
"Quest&otilde;es<br />respondidas"; "Perguntas<br />respondidas";
#endif #endif
const char *Txt_Not_applicable = const char *Txt_Not_applicable =
@ -28183,7 +28204,7 @@ const char *Txt_Number_of_BR_courses_with_BR_exportable_BR_test_BR_questions =
#elif L==8 // pl #elif L==8 // pl
"Liczba<br />kurs&oacute;w<br />z eksportowane<br />pyta&nacute;<br />testowych"; "Liczba<br />kurs&oacute;w<br />z eksportowane<br />pyta&nacute;<br />testowych";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; de<br />disciplinas<br />com<br />quest&otilde;es<br />de test<br />export&aacute;veis"; "N&ordm; de<br />disciplinas<br />com<br />perguntas<br />de test<br />export&aacute;veis";
#endif #endif
const char *Txt_Number_of_BR_courses_with_BR_games = const char *Txt_Number_of_BR_courses_with_BR_games =
@ -28267,7 +28288,7 @@ const char *Txt_Number_of_BR_courses_BR_with_test_BR_questions =
#elif L==8 // pl #elif L==8 // pl
"Liczba<br />kurs&oacute;w<br />z pyta&nacute;<br />testowych"; "Liczba<br />kurs&oacute;w<br />z pyta&nacute;<br />testowych";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; de<br />disciplinas<br />com<br />quest&otilde;es<br />de test"; "N&ordm; de<br />disciplinas<br />com<br />perguntas<br />de test";
#endif #endif
const char *Txt_Number_of_BR_courses_with_BR_surveys = const char *Txt_Number_of_BR_courses_with_BR_surveys =
@ -28456,7 +28477,7 @@ const char *Txt_Number_BR_of_test_BR_questions =
#elif L==8 // pl #elif L==8 // pl
"Liczba<br />pyta&nacute;<br />testowych"; "Liczba<br />pyta&nacute;<br />testowych";
#elif L==9 // pt #elif L==9 // pt
"N&ordm; de<br />quest&otilde;es<br />de test"; "N&ordm; de<br />perguntas<br />de test";
#endif #endif
const char *Txt_Number_of_users = const char *Txt_Number_of_users =
@ -31944,7 +31965,7 @@ const char *Txt_Question =
#elif L==8 // pl #elif L==8 // pl
"Pytanie"; "Pytanie";
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o"; "Pergunta";
#endif #endif
const char *Txt_Question_code_X = // Warning: it is very important to include %ld in the following sentences const char *Txt_Question_code_X = // Warning: it is very important to include %ld in the following sentences
@ -31965,7 +31986,7 @@ const char *Txt_Question_code_X = // Warning: it is very important to include %l
#elif L==8 // pl #elif L==8 // pl
"Kodeks pytanie %ld"; "Kodeks pytanie %ld";
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o com c&oacute;digo %ld"; "Pergunta com c&oacute;digo %ld";
#endif #endif
const char *Txt_Question_modified = const char *Txt_Question_modified =
@ -31986,7 +32007,7 @@ const char *Txt_Question_modified =
#elif L==8 // pl #elif L==8 // pl
"Pytanie zmodyfikowane."; "Pytanie zmodyfikowane.";
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o modificada."; "Pergunta modificada.";
#endif #endif
const char *Txt_Question_removed = const char *Txt_Question_removed =
@ -32007,7 +32028,7 @@ const char *Txt_Question_removed =
#elif L==8 // pl #elif L==8 // pl
"Pytanie usuniete."; "Pytanie usuniete.";
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o removioda."; "Pergunta removida.";
#endif #endif
const char *Txt_Questions = const char *Txt_Questions =
@ -32028,7 +32049,7 @@ const char *Txt_Questions =
#elif L==8 // pl #elif L==8 // pl
"Pyta&nacute;"; "Pyta&nacute;";
#elif L==9 // pt #elif L==9 // pt
"Quest&otilde;es"; "Perguntas";
#endif #endif
const char *Txt_Questions_and_problems = const char *Txt_Questions_and_problems =
@ -32049,7 +32070,28 @@ const char *Txt_Questions_and_problems =
#elif L==8 // pl #elif L==8 // pl
"Pytania i problemy"; "Pytania i problemy";
#elif L==9 // pt #elif L==9 // pt
"Quest&otilde;es e problemas"; "Perguntas e problemas";
#endif
const char *Txt_Questions_removed_X = // Warning: it is very important to include %u in the following sentences
#if L==1 // ca
"Preguntas eliminadas: %u.";
#elif L==2 // de
"Fragen entfernt: %u.";
#elif L==3 // en
"Questions removed: %u.";
#elif L==4 // es
"Preguntas eliminadas: %u.";
#elif L==5 // fr
"Questions supprim&eacute;es: %u.";
#elif L==6 // gn
"Preguntas eliminadas: %u."; // Okoteve traducción
#elif L==7 // it
"Domande rimosse: %u.";
#elif L==8 // pl
"Pytania usuniete: %u.";
#elif L==9 // pt
"Perguntas removidas: %u.";
#endif #endif
const char *Txt_Quota_exceeded = const char *Txt_Quota_exceeded =
@ -33394,7 +33436,7 @@ const char *Txt_Remove_question =
#if L==1 // ca #if L==1 // ca
"Eliminar pregunta"; "Eliminar pregunta";
#elif L==2 // de #elif L==2 // de
"Entfernen Frage"; "Frage entfernen";
#elif L==3 // en #elif L==3 // en
"Remove question"; "Remove question";
#elif L==4 // es #elif L==4 // es
@ -33408,7 +33450,28 @@ const char *Txt_Remove_question =
#elif L==8 // pl #elif L==8 // pl
"Usu&nacute; pytanie"; "Usu&nacute; pytanie";
#elif L==9 // pt #elif L==9 // pt
"Remover quest&atilde;o"; "Remover pergunta";
#endif
const char *Txt_Remove_questions =
#if L==1 // ca
"Eliminar preguntas";
#elif L==2 // de
"Fragen entfernen";
#elif L==3 // en
"Remove questions";
#elif L==4 // es
"Eliminar preguntas";
#elif L==5 // fr
"Supprimer questions";
#elif L==6 // gn
"Eliminar preguntas"; // Okoteve traducción
#elif L==7 // it
"Rimuovere domande";
#elif L==8 // pl
"Usu&nacute; pytania";
#elif L==9 // pt
"Remover perguntas";
#endif #endif
const char *Txt_Remove_record_field = const char *Txt_Remove_record_field =
@ -39158,7 +39221,7 @@ const char *Txt_Select_questions =
#elif L==8 // pl #elif L==8 // pl
"Wybierz pytania"; "Wybierz pytania";
#elif L==9 // pt #elif L==9 // pt
"Selecionar quest&otilde;es"; "Selecionar perguntas";
#endif #endif
const char *Txt_Select_the_groups_in_from_which_you_want_to_register_remove_users_ = const char *Txt_Select_the_groups_in_from_which_you_want_to_register_remove_users_ =
@ -40313,7 +40376,7 @@ const char *Txt_Show_questions =
#elif L==8 // pl #elif L==8 // pl
"Show questions"; // Potrzebujesz tlumaczenie "Show questions"; // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Mostrar quest&otilde;es"; "Mostrar perguntas";
#endif #endif
const char *Txt_Show_statistic = const char *Txt_Show_statistic =
@ -47712,7 +47775,7 @@ const char *Txt_The_question_has_been_moved_down =
#elif L==8 // pl #elif L==8 // pl
"Pytanie zosta&lstrok;o przeniesione."; "Pytanie zosta&lstrok;o przeniesione.";
#elif L==9 // pt #elif L==9 // pt
"A quest&atilde;o foi movida para baixo."; "A pergunta foi movida para baixo.";
#endif #endif
const char *Txt_The_question_has_been_moved_up = const char *Txt_The_question_has_been_moved_up =
@ -47733,7 +47796,7 @@ const char *Txt_The_question_has_been_moved_up =
#elif L==8 // pl #elif L==8 // pl
"Pytanie zosta&lstrok;o poruszone."; "Pytanie zosta&lstrok;o poruszone.";
#elif L==9 // pt #elif L==9 // pt
"A quest&atilde;o foi movida para cima."; "A pergunta foi movida para cima.";
#endif #endif
const char *Txt_The_record_field_X_already_exists = // Warning: it is very important to include %s in the following sentences const char *Txt_The_record_field_X_already_exists = // Warning: it is very important to include %s in the following sentences
@ -51578,7 +51641,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
#elif L==8 // pl #elif L==8 // pl
"Sort by stem of the question" // Potrzebujesz tlumaczenie "Sort by stem of the question" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Classificar por formula&ccedil;&atilde;o da quest&atilde;o" "Classificar por formula&ccedil;&atilde;o da pergunta"
#endif #endif
, ,
[Tst_ORDER_NUM_HITS] = [Tst_ORDER_NUM_HITS] =
@ -51599,7 +51662,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
#elif L==8 // pl #elif L==8 // pl
"Sort by number of times the question has been answered" // Potrzebujesz tlumaczenie "Sort by number of times the question has been answered" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Classificar por n&ordm; de vezes que a quest&atilde;o foi respondida" "Classificar por n&ordm; de vezes que a pergunta foi respondida"
#endif #endif
, ,
[Tst_ORDER_AVERAGE_SCORE] = [Tst_ORDER_AVERAGE_SCORE] =
@ -51650,7 +51713,7 @@ const char *Txt_TST_STR_ORDER_FULL[Tst_NUM_TYPES_ORDER_QST] =
" has been answered (excluding blank answers)" // Potrzebujesz tlumaczenie " has been answered (excluding blank answers)" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"Classificar por n&ordm; de vezes" "Classificar por n&ordm; de vezes"
" que a quest&atilde;o foi respondida (n&atilde;o em branco)" " que a pergunta foi respondida (n&atilde;o em branco)"
#endif #endif
, ,
[Tst_ORDER_AVERAGE_SCORE_NOT_BLANK] = [Tst_ORDER_AVERAGE_SCORE_NOT_BLANK] =
@ -51695,7 +51758,7 @@ const char *Txt_TST_STR_ORDER_SHORT[Tst_NUM_TYPES_ORDER_QST] =
#elif L==8 // pl #elif L==8 // pl
"Pytanie" "Pytanie"
#elif L==9 // pt #elif L==9 // pt
"Quest&atilde;o" "Pergunta"
#endif #endif
, ,
[Tst_ORDER_NUM_HITS] = [Tst_ORDER_NUM_HITS] =

View File

@ -9512,15 +9512,15 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActReqRemTstQst] = [ActReqRemSevTstQst] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
"" // Need Übersetzung "" // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Request removing a self-assesment test question" "Request removing several test questions"
#elif L==4 // es #elif L==4 // es
"" "Solicitar eliminaci&oacute;n de varias preguntas de test"
#elif L==5 // fr #elif L==5 // fr
"" // Besoin de traduction "" // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
@ -9533,15 +9533,15 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActRemTstQst] = [ActRemSevTstQst] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de
"" // Need Übersetzung "" // Need Übersetzung
#elif L==3 // en #elif L==3 // en
"Remove a self-assesment test question" "Remove several test questions"
#elif L==4 // es #elif L==4 // es
"" "Eliminar varias preguntas de test"
#elif L==5 // fr #elif L==5 // fr
"" // Besoin de traduction "" // Besoin de traduction
#elif L==6 // gn #elif L==6 // gn
@ -9554,7 +9554,49 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Precisa de tradução "" // Precisa de tradução
#endif #endif
, ,
[ActShfTstQst] = [ActReqRemOneTstQst] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Request removing one test question"
#elif L==4 // es
"Solicitar eliminaci&oacute;n de una pregunta de test"
#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
,
[ActRemOneTstQst] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Remove a test question"
#elif L==4 // es
"Eliminar una pregunta de test"
#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
,
[ActChgShfTstQst] =
#if L==1 // ca #if L==1 // ca
"" // Necessita traducció "" // Necessita traducció
#elif L==2 // de #elif L==2 // de

View File

@ -2474,7 +2474,7 @@ static long TL_ReceivePost (void)
Content.Media.Width = TL_IMAGE_SAVED_MAX_WIDTH; Content.Media.Width = TL_IMAGE_SAVED_MAX_WIDTH;
Content.Media.Height = TL_IMAGE_SAVED_MAX_HEIGHT; Content.Media.Height = TL_IMAGE_SAVED_MAX_HEIGHT;
Content.Media.Quality = TL_IMAGE_SAVED_QUALITY; Content.Media.Quality = TL_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Content.Media,NULL,NULL); Med_GetMediaFromForm (-1L,-1L,-1,&Content.Media,NULL,NULL);
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
if (Content.Txt[0] || // Text not empty if (Content.Txt[0] || // Text not empty
@ -3405,7 +3405,7 @@ static long TL_ReceiveComment (void)
Content.Media.Width = TL_IMAGE_SAVED_MAX_WIDTH; Content.Media.Width = TL_IMAGE_SAVED_MAX_WIDTH;
Content.Media.Height = TL_IMAGE_SAVED_MAX_HEIGHT; Content.Media.Height = TL_IMAGE_SAVED_MAX_HEIGHT;
Content.Media.Quality = TL_IMAGE_SAVED_QUALITY; Content.Media.Quality = TL_IMAGE_SAVED_QUALITY;
Med_GetMediaFromForm (-1,&Content.Media,NULL,NULL); Med_GetMediaFromForm (-1L,-1L,-1,&Content.Media,NULL,NULL);
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
if (Content.Txt[0] || // Text not empty if (Content.Txt[0] || // Text not empty