mirror of
https://github.com/acanas/swad-core.git
synced 2024-06-12 11:44:13 +02:00
Version18.134
This commit is contained in:
parent
665cbada44
commit
7c1b62b584
|
@ -605,14 +605,16 @@ Assessment:
|
||||||
453. ActRemSvyQst Confirm the removal of a question of a survey
|
453. ActRemSvyQst Confirm the removal of a question of a survey
|
||||||
|
|
||||||
454. ActSeeGam Show one game
|
454. ActSeeGam Show one game
|
||||||
455. ActFrmNewMchTch Put form to create a new match (by a teacher)
|
|
||||||
NEW. ActReqRemMchTch Request the removal of a match (by a teacher)
|
NEW. ActReqRemMchTch Request the removal of a match (by a teacher)
|
||||||
NEW. ActRemMchTch Confirm the removal of a match (by a teacher)
|
NEW. ActRemMchTch Confirm the removal of a match (by a teacher)
|
||||||
456. ActNewMchTch Create a new match showing first question in a new browser tab (by a teacher)
|
455. ActReqNewMchTch Put form to create a new match (by a teacher)
|
||||||
NEW. ActResMchTch Resume an unfinished match showing current question in a new browser tab (by a teacher)
|
456. ActNewMchTch Create a new match showing first question in a new browser tab (by a teacher)
|
||||||
457. ActNxtMchTch Show next question when playing a game (by a teacher)
|
NEW. ActResMchTch Resume an unfinished match showing current question in a new browser tab (by a teacher)
|
||||||
NEW. ActRefMchTch Refresh current question when playing a game (as teacher)
|
NEW. ActCurMchTch Show current question when playing a match (by a teacher)
|
||||||
NEW. ActShoMchTch Show finished match results
|
457. ActNxtMchTch Show next question when playing a match (by a teacher)
|
||||||
|
NEW. ActRefMchTch Refresh current question when playing a match (as teacher)
|
||||||
|
NEW. ActShoMchTch Show finished match results
|
||||||
|
|
||||||
NEW. ActPlyMchStd Show current question when playing a game (as student)
|
NEW. ActPlyMchStd Show current question when playing a game (as student)
|
||||||
NEW. ActRefMchStd Refresh current question when playing a game (as student)
|
NEW. ActRefMchStd Refresh current question when playing a game (as student)
|
||||||
|
@ -2145,13 +2147,14 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
|
|
||||||
/* ActSeeGam */{1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL},
|
/* ActSeeGam */{1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL},
|
||||||
|
|
||||||
/* ActFrmNewMchTch */{1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestNewMatchTch ,NULL},
|
|
||||||
/* ActReqRemMchTch */{1783,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestRemoveMatchTch ,NULL},
|
/* ActReqRemMchTch */{1783,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestRemoveMatchTch ,NULL},
|
||||||
/* ActRemMchTch */{1784,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RemoveMatchTch ,NULL},
|
/* ActRemMchTch */{1784,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RemoveMatchTch ,NULL},
|
||||||
/* ActNewMchTch */{1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_CreateNewMatchTch1 ,Gam_CreateNewMatchTch2 ,NULL},
|
/* ActReqNewMchTch */{1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestNewMatchTch ,NULL},
|
||||||
/* ActResMchTch */{1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_ResumeUnfinishedMatchTch ,NULL},
|
/* ActNewMchTch */{1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_CreateNewMatchTch ,Gam_RequestStartResumeMatchTch ,NULL},
|
||||||
|
/* ActResMchTch */{1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_RequestStartResumeMatchTch ,NULL},
|
||||||
|
/* ActCurMchTch */{1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Gam_GetMatchBeingPlayed ,Gam_CurrentStatusMatchTch ,NULL},
|
||||||
/* ActNxtMchTch */{1672,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Gam_GetMatchBeingPlayed ,Gam_NextStatusMatchTch ,NULL},
|
/* ActNxtMchTch */{1672,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Gam_GetMatchBeingPlayed ,Gam_NextStatusMatchTch ,NULL},
|
||||||
/* ActRefMchTch */{1788,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Gam_GetMatchBeingPlayed ,Gam_RefreshCurrentMatchTch ,NULL},
|
/* ActRefMchTch */{1788,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Gam_GetMatchBeingPlayed ,Gam_RefreshNumPlayersMatchTch ,NULL},
|
||||||
/* ActShoMchTch */{1786,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ShowFinishedMatchResults ,NULL},
|
/* ActShoMchTch */{1786,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ShowFinishedMatchResults ,NULL},
|
||||||
|
|
||||||
/* ActPlyMchStd */{1780,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_ShowMatchToMeAsStd ,NULL},
|
/* ActPlyMchStd */{1780,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_ShowMatchToMeAsStd ,NULL},
|
||||||
|
@ -4878,7 +4881,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
|
||||||
ActAddTstQstToGam, // #1667
|
ActAddTstQstToGam, // #1667
|
||||||
ActUp_GamQst, // #1668
|
ActUp_GamQst, // #1668
|
||||||
ActDwnGamQst, // #1669
|
ActDwnGamQst, // #1669
|
||||||
ActFrmNewMchTch, // #1670
|
ActReqNewMchTch, // #1670
|
||||||
ActNewMchTch, // #1671
|
ActNewMchTch, // #1671
|
||||||
ActNxtMchTch, // #1672
|
ActNxtMchTch, // #1672
|
||||||
-1, // #1673 (obsolete action)
|
-1, // #1673 (obsolete action)
|
||||||
|
@ -4991,12 +4994,13 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
|
||||||
ActPlyMchStd, // #1780
|
ActPlyMchStd, // #1780
|
||||||
-1, // #1781 (obsolete action)
|
-1, // #1781 (obsolete action)
|
||||||
ActRefMchStd, // #1782
|
ActRefMchStd, // #1782
|
||||||
ActReqRemMchTch, // #1783
|
ActReqRemMchTch, // #1783
|
||||||
ActRemMchTch, // #1784
|
ActRemMchTch, // #1784
|
||||||
ActResMchTch, // #1785
|
ActResMchTch, // #1785
|
||||||
ActShoMchTch, // #1786
|
ActShoMchTch, // #1786
|
||||||
ActCreMyAcc, // #1787
|
ActCreMyAcc, // #1787
|
||||||
ActRefMchTch, // #1788
|
ActRefMchTch, // #1788
|
||||||
|
ActCurMchTch, // #1789
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
107
swad_action.h
107
swad_action.h
|
@ -64,9 +64,9 @@ 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_NUM_ACTIONS (1 + 4 + 64 + 38 + 12 + 42 + 36 + 19 + 110 + 169 + 437 + 176 + 169 + 16 + 68)
|
#define Act_NUM_ACTIONS (1 + 4 + 64 + 38 + 12 + 42 + 36 + 19 + 110 + 170 + 437 + 176 + 169 + 16 + 68)
|
||||||
|
|
||||||
#define Act_MAX_ACTION_COD 1788
|
#define Act_MAX_ACTION_COD 1789
|
||||||
|
|
||||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
|
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
|
||||||
|
|
||||||
|
@ -607,61 +607,62 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
|
||||||
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 115)
|
#define ActSeeOneTstResOth (ActChgCrsTT1stDay + 115)
|
||||||
|
|
||||||
#define ActSeeGam (ActChgCrsTT1stDay + 116)
|
#define ActSeeGam (ActChgCrsTT1stDay + 116)
|
||||||
#define ActFrmNewMchTch (ActChgCrsTT1stDay + 117)
|
#define ActReqRemMchTch (ActChgCrsTT1stDay + 117)
|
||||||
#define ActReqRemMchTch (ActChgCrsTT1stDay + 118)
|
#define ActRemMchTch (ActChgCrsTT1stDay + 118)
|
||||||
#define ActRemMchTch (ActChgCrsTT1stDay + 119)
|
#define ActReqNewMchTch (ActChgCrsTT1stDay + 119)
|
||||||
#define ActNewMchTch (ActChgCrsTT1stDay + 120)
|
#define ActNewMchTch (ActChgCrsTT1stDay + 120)
|
||||||
#define ActResMchTch (ActChgCrsTT1stDay + 121)
|
#define ActResMchTch (ActChgCrsTT1stDay + 121)
|
||||||
#define ActNxtMchTch (ActChgCrsTT1stDay + 122)
|
#define ActCurMchTch (ActChgCrsTT1stDay + 122)
|
||||||
#define ActRefMchTch (ActChgCrsTT1stDay + 123)
|
#define ActNxtMchTch (ActChgCrsTT1stDay + 123)
|
||||||
#define ActShoMchTch (ActChgCrsTT1stDay + 124)
|
#define ActRefMchTch (ActChgCrsTT1stDay + 124)
|
||||||
#define ActPlyMchStd (ActChgCrsTT1stDay + 125)
|
#define ActShoMchTch (ActChgCrsTT1stDay + 125)
|
||||||
#define ActRefMchStd (ActChgCrsTT1stDay + 126)
|
#define ActPlyMchStd (ActChgCrsTT1stDay + 126)
|
||||||
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 127)
|
#define ActRefMchStd (ActChgCrsTT1stDay + 127)
|
||||||
#define ActFrmNewGam (ActChgCrsTT1stDay + 128)
|
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 128)
|
||||||
#define ActEdiOneGam (ActChgCrsTT1stDay + 129)
|
#define ActFrmNewGam (ActChgCrsTT1stDay + 129)
|
||||||
#define ActNewGam (ActChgCrsTT1stDay + 130)
|
#define ActEdiOneGam (ActChgCrsTT1stDay + 130)
|
||||||
#define ActChgGam (ActChgCrsTT1stDay + 131)
|
#define ActNewGam (ActChgCrsTT1stDay + 131)
|
||||||
#define ActReqRemGam (ActChgCrsTT1stDay + 132)
|
#define ActChgGam (ActChgCrsTT1stDay + 132)
|
||||||
#define ActRemGam (ActChgCrsTT1stDay + 133)
|
#define ActReqRemGam (ActChgCrsTT1stDay + 133)
|
||||||
#define ActReqRstGam (ActChgCrsTT1stDay + 134)
|
#define ActRemGam (ActChgCrsTT1stDay + 134)
|
||||||
#define ActRstGam (ActChgCrsTT1stDay + 135)
|
#define ActReqRstGam (ActChgCrsTT1stDay + 135)
|
||||||
#define ActHidGam (ActChgCrsTT1stDay + 136)
|
#define ActRstGam (ActChgCrsTT1stDay + 136)
|
||||||
#define ActShoGam (ActChgCrsTT1stDay + 137)
|
#define ActHidGam (ActChgCrsTT1stDay + 137)
|
||||||
#define ActAddOneGamQst (ActChgCrsTT1stDay + 138)
|
#define ActShoGam (ActChgCrsTT1stDay + 138)
|
||||||
#define ActGamLstTstQst (ActChgCrsTT1stDay + 139)
|
#define ActAddOneGamQst (ActChgCrsTT1stDay + 139)
|
||||||
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 140)
|
#define ActGamLstTstQst (ActChgCrsTT1stDay + 140)
|
||||||
#define ActReqRemGamQst (ActChgCrsTT1stDay + 141)
|
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 141)
|
||||||
#define ActRemGamQst (ActChgCrsTT1stDay + 142)
|
#define ActReqRemGamQst (ActChgCrsTT1stDay + 142)
|
||||||
#define ActUp_GamQst (ActChgCrsTT1stDay + 143)
|
#define ActRemGamQst (ActChgCrsTT1stDay + 143)
|
||||||
#define ActDwnGamQst (ActChgCrsTT1stDay + 144)
|
#define ActUp_GamQst (ActChgCrsTT1stDay + 144)
|
||||||
|
#define ActDwnGamQst (ActChgCrsTT1stDay + 145)
|
||||||
|
|
||||||
#define ActSeeSvy (ActChgCrsTT1stDay + 145)
|
#define ActSeeSvy (ActChgCrsTT1stDay + 146)
|
||||||
#define ActAnsSvy (ActChgCrsTT1stDay + 146)
|
#define ActAnsSvy (ActChgCrsTT1stDay + 147)
|
||||||
#define ActFrmNewSvy (ActChgCrsTT1stDay + 147)
|
#define ActFrmNewSvy (ActChgCrsTT1stDay + 148)
|
||||||
#define ActEdiOneSvy (ActChgCrsTT1stDay + 148)
|
#define ActEdiOneSvy (ActChgCrsTT1stDay + 149)
|
||||||
#define ActNewSvy (ActChgCrsTT1stDay + 149)
|
#define ActNewSvy (ActChgCrsTT1stDay + 150)
|
||||||
#define ActChgSvy (ActChgCrsTT1stDay + 150)
|
#define ActChgSvy (ActChgCrsTT1stDay + 151)
|
||||||
#define ActReqRemSvy (ActChgCrsTT1stDay + 151)
|
#define ActReqRemSvy (ActChgCrsTT1stDay + 152)
|
||||||
#define ActRemSvy (ActChgCrsTT1stDay + 152)
|
#define ActRemSvy (ActChgCrsTT1stDay + 153)
|
||||||
#define ActReqRstSvy (ActChgCrsTT1stDay + 153)
|
#define ActReqRstSvy (ActChgCrsTT1stDay + 154)
|
||||||
#define ActRstSvy (ActChgCrsTT1stDay + 154)
|
#define ActRstSvy (ActChgCrsTT1stDay + 155)
|
||||||
#define ActHidSvy (ActChgCrsTT1stDay + 155)
|
#define ActHidSvy (ActChgCrsTT1stDay + 156)
|
||||||
#define ActShoSvy (ActChgCrsTT1stDay + 156)
|
#define ActShoSvy (ActChgCrsTT1stDay + 157)
|
||||||
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 157)
|
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 158)
|
||||||
#define ActRcvSvyQst (ActChgCrsTT1stDay + 158)
|
#define ActRcvSvyQst (ActChgCrsTT1stDay + 159)
|
||||||
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 159)
|
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 160)
|
||||||
#define ActRemSvyQst (ActChgCrsTT1stDay + 160)
|
#define ActRemSvyQst (ActChgCrsTT1stDay + 161)
|
||||||
|
|
||||||
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 161)
|
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 162)
|
||||||
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 162)
|
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 163)
|
||||||
#define ActEdiExaAnn (ActChgCrsTT1stDay + 163)
|
#define ActEdiExaAnn (ActChgCrsTT1stDay + 164)
|
||||||
#define ActRcvExaAnn (ActChgCrsTT1stDay + 164)
|
#define ActRcvExaAnn (ActChgCrsTT1stDay + 165)
|
||||||
#define ActPrnExaAnn (ActChgCrsTT1stDay + 165)
|
#define ActPrnExaAnn (ActChgCrsTT1stDay + 166)
|
||||||
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 166)
|
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 167)
|
||||||
#define ActRemExaAnn (ActChgCrsTT1stDay + 167)
|
#define ActRemExaAnn (ActChgCrsTT1stDay + 168)
|
||||||
#define ActHidExaAnn (ActChgCrsTT1stDay + 168)
|
#define ActHidExaAnn (ActChgCrsTT1stDay + 169)
|
||||||
#define ActShoExaAnn (ActChgCrsTT1stDay + 169)
|
#define ActShoExaAnn (ActChgCrsTT1stDay + 170)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************** Files tab **********************************/
|
/******************************** Files tab **********************************/
|
||||||
|
|
|
@ -458,10 +458,15 @@ En OpenSWAD:
|
||||||
ps2pdf source.ps destination.pdf
|
ps2pdf source.ps destination.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 18.133 (2019-07-16)"
|
#define Log_PLATFORM_VERSION "SWAD 18.134 (2019-07-16)"
|
||||||
#define CSS_FILE "swad18.132.2.css"
|
#define CSS_FILE "swad18.132.2.css"
|
||||||
#define JS_FILE "swad18.130.2.js"
|
#define JS_FILE "swad18.130.2.js"
|
||||||
/*
|
/*
|
||||||
|
Version 18.134: Jul 17, 2019 Changes resuming a match. (243641 lines)
|
||||||
|
2 changes necessary in database:
|
||||||
|
UPDATE actions SET Txt='Mostrar pregunta siguiente en partida (como profesor)' WHERE ActCod='1672' AND Language='es';
|
||||||
|
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1789','es','N','Mostrar pregunta actual en partida (como profesor)');
|
||||||
|
|
||||||
Version 18.133: Jul 16, 2019 Display number of players in a game. (243604 lines)
|
Version 18.133: Jul 16, 2019 Display number of players in a game. (243604 lines)
|
||||||
3 changes necessary in database:
|
3 changes necessary in database:
|
||||||
DROP TABLE IF EXISTS gam_players;
|
DROP TABLE IF EXISTS gam_players;
|
||||||
|
|
297
swad_game.c
297
swad_game.c
|
@ -132,7 +132,7 @@ static void Gam_PutParamMatchCod (long MchCod);
|
||||||
static long Gam_GetParamMatchCod (void);
|
static long Gam_GetParamMatchCod (void);
|
||||||
|
|
||||||
static bool Gam_CheckIfSimilarGameExists (struct Game *Game);
|
static bool Gam_CheckIfSimilarGameExists (struct Game *Game);
|
||||||
static void Gam_ShowLstGrpsToEditMatch (void);
|
static void Gam_ShowLstGrpsToCreateMatch (void);
|
||||||
|
|
||||||
static void Gam_CreateGame (struct Game *Game,const char *Txt);
|
static void Gam_CreateGame (struct Game *Game,const char *Txt);
|
||||||
static void Gam_UpdateGame (struct Game *Game,const char *Txt);
|
static void Gam_UpdateGame (struct Game *Game,const char *Txt);
|
||||||
|
@ -188,7 +188,8 @@ static void Gam_UpdateMatchBeingPlayed (struct Match *Match);
|
||||||
static void Gam_ShowMatchStatusForTch (struct Match *Match);
|
static void Gam_ShowMatchStatusForTch (struct Match *Match);
|
||||||
static void Gam_ShowAlertFinishedMatch (void);
|
static void Gam_ShowAlertFinishedMatch (void);
|
||||||
static void Gam_PlayGameShowQuestionAndAnswers (struct Match *Match);
|
static void Gam_PlayGameShowQuestionAndAnswers (struct Match *Match);
|
||||||
static void Gam_PutBigButton (long MchCod,const char *Txt,const char *Icon);
|
static void Gam_PutBigButton (Act_Action_t NextAction,long MchCod,
|
||||||
|
const char *Icon,const char *Txt);
|
||||||
|
|
||||||
static void Gam_RemoveOldPlayers (void);
|
static void Gam_RemoveOldPlayers (void);
|
||||||
static void Gam_RemoveAllPlayersInMatch (long MchCod);
|
static void Gam_RemoveAllPlayersInMatch (long MchCod);
|
||||||
|
@ -466,7 +467,7 @@ static void Gam_ShowOneGame (long GamCod,
|
||||||
|
|
||||||
if (ShowOnlyThisGame)
|
if (ShowOnlyThisGame)
|
||||||
/* Icon to start a new match */
|
/* Icon to start a new match */
|
||||||
Lay_PutContextualLinkOnlyIcon (ActFrmNewMchTch,Gam_NEW_MATCH_SECTION_ID,
|
Lay_PutContextualLinkOnlyIcon (ActReqNewMchTch,Gam_NEW_MATCH_SECTION_ID,
|
||||||
Gam_PutParams,
|
Gam_PutParams,
|
||||||
"play.svg",
|
"play.svg",
|
||||||
Txt_New_match);
|
Txt_New_match);
|
||||||
|
@ -1312,10 +1313,10 @@ void Gam_RequestCreatOrEditGame (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************** Show list of groups to edit a game *******************/
|
/***************** Show list of groups to create a new match *****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Gam_ShowLstGrpsToEditMatch (void)
|
static void Gam_ShowLstGrpsToCreateMatch (void)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassFormInBox[The_NUM_THEMES];
|
extern const char *The_ClassFormInBox[The_NUM_THEMES];
|
||||||
extern const char *Txt_Groups;
|
extern const char *Txt_Groups;
|
||||||
|
@ -1423,16 +1424,10 @@ void Gam_RecFormGame (void)
|
||||||
/***** Create a new game or update an existing one *****/
|
/***** Create a new game or update an existing one *****/
|
||||||
if (NewGameIsCorrect)
|
if (NewGameIsCorrect)
|
||||||
{
|
{
|
||||||
/* Get groups for this games */
|
|
||||||
Grp_GetParCodsSeveralGrps ();
|
|
||||||
|
|
||||||
if (ItsANewGame)
|
if (ItsANewGame)
|
||||||
Gam_CreateGame (&NewGame,Txt); // Add new game to database
|
Gam_CreateGame (&NewGame,Txt); // Add new game to database
|
||||||
else
|
else
|
||||||
Gam_UpdateGame (&NewGame,Txt);
|
Gam_UpdateGame (&NewGame,Txt);
|
||||||
|
|
||||||
/* Free memory for list of selected groups */
|
|
||||||
Grp_FreeListCodSelectedGrps ();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Gam_RequestCreatOrEditGame ();
|
Gam_RequestCreatOrEditGame ();
|
||||||
|
@ -2799,7 +2794,7 @@ static void Gam_PutIconToPlayNewMatch (void)
|
||||||
extern const char *Txt_New_match;
|
extern const char *Txt_New_match;
|
||||||
|
|
||||||
/***** Put form to create a new question *****/
|
/***** Put form to create a new question *****/
|
||||||
Ico_PutContextualIconToAdd (ActFrmNewMchTch,Gam_NEW_MATCH_SECTION_ID,Gam_PutParams,
|
Ico_PutContextualIconToAdd (ActReqNewMchTch,Gam_NEW_MATCH_SECTION_ID,Gam_PutParams,
|
||||||
Txt_New_match);
|
Txt_New_match);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2817,7 +2812,7 @@ static void Gam_ListOneOrMoreMatches (struct Game *Game,
|
||||||
extern const char *Txt_Match;
|
extern const char *Txt_Match;
|
||||||
extern const char *Txt_Status;
|
extern const char *Txt_Status;
|
||||||
extern const char *Txt_Play;
|
extern const char *Txt_Play;
|
||||||
extern const char *Txt_Resume;
|
extern const char *Txt_Resume_match;
|
||||||
extern const char *Txt_Today;
|
extern const char *Txt_Today;
|
||||||
extern const char *Txt_View_game_results;
|
extern const char *Txt_View_game_results;
|
||||||
unsigned NumMatch;
|
unsigned NumMatch;
|
||||||
|
@ -2965,7 +2960,7 @@ static void Gam_ListOneOrMoreMatches (struct Game *Game,
|
||||||
Lay_PutContextualLinkOnlyIcon (ActResMchTch,NULL,
|
Lay_PutContextualLinkOnlyIcon (ActResMchTch,NULL,
|
||||||
Gam_PutParamCurrentMchCod,
|
Gam_PutParamCurrentMchCod,
|
||||||
"play.svg",
|
"play.svg",
|
||||||
Txt_Resume);
|
Txt_Resume_match);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -3046,13 +3041,6 @@ static void Gam_GetMatchDataFromRow (MYSQL_RES *mysql_res,
|
||||||
|
|
||||||
/* Get whether the match is finished or not (row(10)) */
|
/* Get whether the match is finished or not (row(10)) */
|
||||||
Match->Status.Finished = (row[10][0] == 'Y');
|
Match->Status.Finished = (row[10][0] == 'Y');
|
||||||
|
|
||||||
// /* If question index is 0 ==> the game is finished */
|
|
||||||
// if (Match->Status.QstInd == 0)
|
|
||||||
// {
|
|
||||||
// Match->Status.QstCod = -1L;
|
|
||||||
// Match->Status.Finished = true;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3142,7 +3130,7 @@ static void Gam_PutButtonNewMatch (long GamCod)
|
||||||
{
|
{
|
||||||
extern const char *Txt_New_match;
|
extern const char *Txt_New_match;
|
||||||
|
|
||||||
Frm_StartFormAnchor (ActFrmNewMchTch,Gam_NEW_MATCH_SECTION_ID);
|
Frm_StartFormAnchor (ActReqNewMchTch,Gam_NEW_MATCH_SECTION_ID);
|
||||||
Gam_PutParamGameCod (GamCod);
|
Gam_PutParamGameCod (GamCod);
|
||||||
Btn_PutConfirmButton (Txt_New_match);
|
Btn_PutConfirmButton (Txt_New_match);
|
||||||
Frm_EndForm ();
|
Frm_EndForm ();
|
||||||
|
@ -3212,7 +3200,7 @@ static void Gam_PutFormNewMatch (struct Game *Game)
|
||||||
Gam_MAX_CHARS_TITLE,Game->Title);
|
Gam_MAX_CHARS_TITLE,Game->Title);
|
||||||
|
|
||||||
/***** Groups *****/
|
/***** Groups *****/
|
||||||
Gam_ShowLstGrpsToEditMatch ();
|
Gam_ShowLstGrpsToCreateMatch ();
|
||||||
|
|
||||||
/***** End table *****/
|
/***** End table *****/
|
||||||
Tbl_EndTable ();
|
Tbl_EndTable ();
|
||||||
|
@ -3236,10 +3224,10 @@ static void Gam_PutFormNewMatch (struct Game *Game)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********* Create a new match and show first question (by a teacher) *********/
|
/********************* Create a new match (by a teacher) *********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Gam_CreateNewMatchTch1 (void)
|
void Gam_CreateNewMatchTch (void)
|
||||||
{
|
{
|
||||||
long GamCod;
|
long GamCod;
|
||||||
char Title[Gam_MAX_BYTES_TITLE + 1];
|
char Title[Gam_MAX_BYTES_TITLE + 1];
|
||||||
|
@ -3262,8 +3250,14 @@ void Gam_CreateNewMatchTch1 (void)
|
||||||
Grp_FreeListCodSelectedGrps ();
|
Grp_FreeListCodSelectedGrps ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Gam_CreateNewMatchTch2 (void)
|
/*****************************************************************************/
|
||||||
|
/******* Show button to actually start / resume a match (by a teacher) *******/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Gam_RequestStartResumeMatchTch (void)
|
||||||
{
|
{
|
||||||
|
extern const char *Txt_Start_match;
|
||||||
|
extern const char *Txt_Resume_match;
|
||||||
struct Match Match;
|
struct Match Match;
|
||||||
|
|
||||||
/***** Get data of the match from database *****/
|
/***** Get data of the match from database *****/
|
||||||
|
@ -3277,7 +3271,15 @@ void Gam_CreateNewMatchTch2 (void)
|
||||||
Gam_GetAndShowNumPlayersInMatch (Match.MchCod);
|
Gam_GetAndShowNumPlayersInMatch (Match.MchCod);
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
|
|
||||||
Gam_ShowMatchStatusForTch (&Match);
|
if (Match.Status.Finished)
|
||||||
|
Gam_ShowAlertFinishedMatch ();
|
||||||
|
else // Unfinished match
|
||||||
|
/***** Put button to start / resume match *****/
|
||||||
|
Gam_PutBigButton (ActCurMchTch,
|
||||||
|
Match.MchCod,
|
||||||
|
"play.svg",
|
||||||
|
Match.Status.QstInd == 0 ? Txt_Start_match :
|
||||||
|
Txt_Resume_match);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
|
@ -3317,30 +3319,6 @@ static long Gam_CreateMatch (long GamCod,char Title[Gam_MAX_BYTES_TITLE + 1])
|
||||||
return MchCod;
|
return MchCod;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**** Resume an unfinished match and show current question (by a teacher) ****/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Gam_ResumeUnfinishedMatchTch (void)
|
|
||||||
{
|
|
||||||
struct Match Match;
|
|
||||||
|
|
||||||
/***** Get data of the match from database *****/
|
|
||||||
Match.MchCod = Gbl.Games.MchCodBeingPlayed;
|
|
||||||
Gam_GetDataOfMatchByCod (&Match);
|
|
||||||
|
|
||||||
/***** Show current match status *****/
|
|
||||||
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_CONTAINER\">");
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"game\" class=\"GAM_PLAY_CONTAINER_TOP\">");
|
|
||||||
Gam_GetAndShowNumPlayersInMatch (Match.MchCod);
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
|
|
||||||
Gam_ShowMatchStatusForTch (&Match);
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************** Insert/update a game match being played *******************/
|
/***************** Insert/update a game match being played *******************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -3368,7 +3346,63 @@ static void Gam_UpdateMatchBeingPlayed (struct Match *Match)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*** Show next match status (show next question, answers...) (by a teacher) **/
|
/** Show current match status (current question, answers...) (by a teacher) **/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Gam_CurrentStatusMatchTch (void)
|
||||||
|
{
|
||||||
|
struct Match Match;
|
||||||
|
long NxtQstInd;
|
||||||
|
|
||||||
|
/***** Get data of the match from database *****/
|
||||||
|
Match.MchCod = Gbl.Games.MchCodBeingPlayed;
|
||||||
|
Gam_GetDataOfMatchByCod (&Match);
|
||||||
|
|
||||||
|
/***** If not yet finished, update status *****/
|
||||||
|
if (!Match.Status.Finished)
|
||||||
|
{
|
||||||
|
if (Match.Status.QstInd == 0) // Match has been created, but it has not started
|
||||||
|
{
|
||||||
|
/* Get index of the first question */
|
||||||
|
NxtQstInd = Gam_GetFirstQuestionIndexInGame (Match.GamCod);
|
||||||
|
if (NxtQstInd) // Not last question
|
||||||
|
{
|
||||||
|
Match.Status.QstInd = NxtQstInd; // Go to the next question
|
||||||
|
Match.Status.QstCod = Gam_GetQstCodFromQstInd (Match.GamCod,
|
||||||
|
Match.Status.QstInd);
|
||||||
|
Match.Status.Finished = false; // Match is not finished
|
||||||
|
}
|
||||||
|
else // No more questions
|
||||||
|
{
|
||||||
|
Match.Status.QstInd = 0; // No more questions
|
||||||
|
Match.Status.QstCod = -1L; // No more questions
|
||||||
|
Match.Status.Finished = true; // Match is finished
|
||||||
|
}
|
||||||
|
Match.Status.ShowingAnswers = false; // Don't show answers
|
||||||
|
|
||||||
|
/* Update match status in database */
|
||||||
|
Gam_UpdateMatchBeingPlayed (&Match);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove all players in this match */
|
||||||
|
if (Match.Status.Finished)
|
||||||
|
Gam_RemoveAllPlayersInMatch (Match.MchCod);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Show current match status *****/
|
||||||
|
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_CONTAINER\">");
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"<div id=\"game\" class=\"GAM_PLAY_CONTAINER_TOP\">");
|
||||||
|
Gam_GetAndShowNumPlayersInMatch (Match.MchCod);
|
||||||
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
|
|
||||||
|
Gam_ShowMatchStatusForTch (&Match);
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***** Show next match status (next question, answers...) (by a teacher) *****/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Gam_NextStatusMatchTch (void)
|
void Gam_NextStatusMatchTch (void)
|
||||||
|
@ -3383,51 +3417,51 @@ void Gam_NextStatusMatchTch (void)
|
||||||
/***** If not yet finished, update status *****/
|
/***** If not yet finished, update status *****/
|
||||||
if (!Match.Status.Finished)
|
if (!Match.Status.Finished)
|
||||||
{
|
{
|
||||||
if (Match.Status.QstInd == 0) // Game has been created, but it has not started
|
if (Match.Status.QstInd == 0) // Match has been created, but it has not started
|
||||||
{
|
{
|
||||||
/* Get index of the first question */
|
/* Get index of the first question */
|
||||||
NxtQstInd = Gam_GetFirstQuestionIndexInGame (Match.GamCod);
|
NxtQstInd = Gam_GetFirstQuestionIndexInGame (Match.GamCod);
|
||||||
if (NxtQstInd) // Not last question
|
if (NxtQstInd) // Not last question
|
||||||
{
|
{
|
||||||
Match.Status.QstInd = NxtQstInd; // Go to the next question
|
Match.Status.QstInd = NxtQstInd; // Go to the next question
|
||||||
Match.Status.QstCod = Gam_GetQstCodFromQstInd (Match.GamCod,
|
Match.Status.QstCod = Gam_GetQstCodFromQstInd (Match.GamCod,
|
||||||
Match.Status.QstInd);
|
Match.Status.QstInd);
|
||||||
Match.Status.Finished = false; // Game is not finished
|
Match.Status.Finished = false; // Match is not finished
|
||||||
}
|
}
|
||||||
else // No more questions
|
else // No more questions
|
||||||
{
|
{
|
||||||
Match.Status.QstInd = 0; // No more questions
|
Match.Status.QstInd = 0; // No more questions
|
||||||
Match.Status.QstCod = -1L; // No more questions
|
Match.Status.QstCod = -1L; // No more questions
|
||||||
Match.Status.Finished = true; // Game is finished
|
Match.Status.Finished = true; // Match is finished
|
||||||
}
|
}
|
||||||
Match.Status.ShowingAnswers = false; // Don't show answers
|
Match.Status.ShowingAnswers = false; // Don't show answers
|
||||||
}
|
}
|
||||||
else // Game has started
|
else // Match has started
|
||||||
{
|
{
|
||||||
if (Match.Status.ShowingAnswers) // Showing answers currently
|
if (Match.Status.ShowingAnswers) // Showing answers currently
|
||||||
{
|
{
|
||||||
/* Get index of the next question */
|
/* Get index of the next question */
|
||||||
NxtQstInd = Gam_GetNextQuestionIndexInGame (Match.GamCod,
|
NxtQstInd = Gam_GetNextQuestionIndexInGame (Match.GamCod,
|
||||||
Match.Status.QstInd);
|
Match.Status.QstInd);
|
||||||
if (NxtQstInd) // Not last question
|
if (NxtQstInd) // Not last question
|
||||||
{
|
{
|
||||||
Match.Status.QstInd = NxtQstInd; // Go to the next question
|
Match.Status.QstInd = NxtQstInd; // Go to the next question
|
||||||
Match.Status.QstCod = Gam_GetQstCodFromQstInd (Match.GamCod,
|
Match.Status.QstCod = Gam_GetQstCodFromQstInd (Match.GamCod,
|
||||||
Match.Status.QstInd);
|
Match.Status.QstInd);
|
||||||
Match.Status.Finished = false; // Game is not finished
|
Match.Status.Finished = false; // Match is not finished
|
||||||
}
|
}
|
||||||
else // No more questions
|
else // No more questions
|
||||||
{
|
{
|
||||||
Match.Status.QstInd = 0; // No more questions
|
Match.Status.QstInd = 0; // No more questions
|
||||||
Match.Status.QstCod = -1L; // No more questions
|
Match.Status.QstCod = -1L; // No more questions
|
||||||
Match.Status.Finished = true; // Game is finished
|
Match.Status.Finished = true; // Match is finished
|
||||||
}
|
}
|
||||||
Match.Status.ShowingAnswers = false; // Don't show answers
|
Match.Status.ShowingAnswers = false; // Don't show answers
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Match.Status.Finished = false; // Game is not finished
|
Match.Status.Finished = false; // Match is not finished
|
||||||
Match.Status.ShowingAnswers = true; // Show answers
|
Match.Status.ShowingAnswers = true; // Show answers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3486,98 +3520,95 @@ static void Gam_ShowAlertFinishedMatch (void)
|
||||||
|
|
||||||
static void Gam_PlayGameShowQuestionAndAnswers (struct Match *Match)
|
static void Gam_PlayGameShowQuestionAndAnswers (struct Match *Match)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Start_match;
|
|
||||||
extern const char *Txt_Continue;
|
extern const char *Txt_Continue;
|
||||||
extern const char *Txt_Finish;
|
extern const char *Txt_Finish;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned NxtQstInd;
|
unsigned NxtQstInd;
|
||||||
|
|
||||||
/***** In what question do we resume the match? *****/
|
/***** Trivial check: Question index should be > 0 *****/
|
||||||
if (Match->Status.QstInd > 0)
|
if (Match->Status.QstInd == 0)
|
||||||
{
|
return;
|
||||||
/***** Get data of question from database *****/
|
|
||||||
if (!DB_QuerySELECT (&mysql_res,"can not get data of a question",
|
|
||||||
"SELECT AnsType," // row[0]
|
|
||||||
"Stem," // row[1]
|
|
||||||
"MedCod" // row[2]
|
|
||||||
" FROM tst_questions"
|
|
||||||
" WHERE QstCod=%ld",
|
|
||||||
Match->Status.QstCod))
|
|
||||||
Ale_ShowAlert (Ale_ERROR,"Question doesn't exist.");
|
|
||||||
row = mysql_fetch_row (mysql_res);
|
|
||||||
|
|
||||||
/***** Show question *****/
|
/***** Get data of question from database *****/
|
||||||
/* Write number of question */
|
if (!DB_QuerySELECT (&mysql_res,"can not get data of a question",
|
||||||
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_NUM_QST\">%u</div>",
|
"SELECT AnsType," // row[0]
|
||||||
Match->Status.QstInd);
|
"Stem," // row[1]
|
||||||
|
"MedCod" // row[2]
|
||||||
|
" FROM tst_questions"
|
||||||
|
" WHERE QstCod=%ld",
|
||||||
|
Match->Status.QstCod))
|
||||||
|
Ale_ShowAlert (Ale_ERROR,"Question doesn't exist.");
|
||||||
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_QST_CONTAINER\">");
|
/***** Show question *****/
|
||||||
|
/* Write number of question */
|
||||||
|
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_NUM_QST\">%u</div>",
|
||||||
|
Match->Status.QstInd);
|
||||||
|
|
||||||
/* Get answer type (row[0]) */
|
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_QST_CONTAINER\">");
|
||||||
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[0]);
|
|
||||||
// TODO: Check that answer type is correct (unique choice)
|
|
||||||
|
|
||||||
/* Write stem (row[1]) */
|
/* Get answer type (row[0]) */
|
||||||
Tst_WriteQstStem (row[1],"GAM_PLAY_TCH_QST");
|
Gbl.Test.AnswerType = Tst_ConvertFromStrAnsTypDBToAnsTyp (row[0]);
|
||||||
|
// TODO: Check that answer type is correct (unique choice)
|
||||||
|
|
||||||
/* Get media (row[2]) */
|
/* Write stem (row[1]) */
|
||||||
Gbl.Test.Media.MedCod = Str_ConvertStrCodToLongCod (row[2]);
|
Tst_WriteQstStem (row[1],"GAM_PLAY_TCH_QST");
|
||||||
Med_GetMediaDataByCod (&Gbl.Test.Media);
|
|
||||||
|
|
||||||
/* Show media */
|
/* Get media (row[2]) */
|
||||||
Med_ShowMedia (&Gbl.Test.Media,
|
Gbl.Test.Media.MedCod = Str_ConvertStrCodToLongCod (row[2]);
|
||||||
"TEST_MED_EDIT_LIST_STEM_CONTAINER",
|
Med_GetMediaDataByCod (&Gbl.Test.Media);
|
||||||
"TEST_MED_EDIT_LIST_STEM");
|
|
||||||
|
|
||||||
/* Write answers? */
|
/* Show media */
|
||||||
if (Match->Status.ShowingAnswers)
|
Med_ShowMedia (&Gbl.Test.Media,
|
||||||
/* Write answers */
|
"TEST_MED_EDIT_LIST_STEM_CONTAINER",
|
||||||
Tst_WriteAnswersGameResult (Match->GamCod,
|
"TEST_MED_EDIT_LIST_STEM");
|
||||||
Match->Status.QstInd,
|
|
||||||
Match->Status.QstCod,
|
|
||||||
"GAM_PLAY_TCH_QST",false); // Don't show result
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
/* Write answers? */
|
||||||
}
|
if (Match->Status.ShowingAnswers)
|
||||||
|
/* Write answers */
|
||||||
|
Tst_WriteAnswersGameResult (Match->GamCod,
|
||||||
|
Match->Status.QstInd,
|
||||||
|
Match->Status.QstCod,
|
||||||
|
"GAM_PLAY_TCH_QST",false); // Don't show result
|
||||||
|
|
||||||
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
|
|
||||||
/***** Put button to continue *****/
|
/***** Put button to continue *****/
|
||||||
if (Match->Status.QstInd == 0)
|
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_NXT_CONTAINER\">");
|
||||||
/***** Put button to start first question *****/
|
if (Match->Status.ShowingAnswers)
|
||||||
Gam_PutBigButton (Match->MchCod,Txt_Start_match,"play.svg");
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_NXT_CONTAINER\">");
|
/* Get index of the next question */
|
||||||
if (Match->Status.ShowingAnswers)
|
NxtQstInd = Gam_GetNextQuestionIndexInGame (Match->GamCod,
|
||||||
{
|
Match->Status.QstInd);
|
||||||
/* Get index of the next question */
|
if (NxtQstInd) // Not last question
|
||||||
NxtQstInd = Gam_GetNextQuestionIndexInGame (Match->GamCod,
|
/* Put button to show next question */
|
||||||
Match->Status.QstInd);
|
Gam_PutBigButton (ActNxtMchTch,Match->MchCod,
|
||||||
if (NxtQstInd) // Not last question
|
"step-forward.svg",Txt_Continue);
|
||||||
/* Put button to show next question */
|
else // Last question
|
||||||
Gam_PutBigButton (Match->MchCod,Txt_Continue,"step-forward.svg");
|
/* Put button to finish */
|
||||||
else // Last question
|
Gam_PutBigButton (ActNxtMchTch,Match->MchCod,
|
||||||
/* Put button to finish */
|
"flag-checkered.svg",Txt_Finish);
|
||||||
Gam_PutBigButton (Match->MchCod,Txt_Finish,"flag-checkered.svg");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* Put button to show answers */
|
|
||||||
Gam_PutBigButton (Match->MchCod,Txt_Continue,"step-forward.svg");
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
/* Put button to show answers */
|
||||||
|
Gam_PutBigButton (ActNxtMchTch,Match->MchCod,
|
||||||
|
"step-forward.svg",Txt_Continue);
|
||||||
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************** Put a big button to start ************************/
|
/************************** Put a big button to start ************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Gam_PutBigButton (long MchCod,const char *Txt,const char *Icon)
|
static void Gam_PutBigButton (Act_Action_t NextAction,long MchCod,
|
||||||
|
const char *Icon,const char *Txt)
|
||||||
{
|
{
|
||||||
/***** Start container for button *****/
|
/***** Start container for button *****/
|
||||||
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_CONTINUE_CONTAINER\">");
|
fprintf (Gbl.F.Out,"<div class=\"GAM_PLAY_TCH_CONTINUE_CONTAINER\">");
|
||||||
|
|
||||||
/***** Start form *****/
|
/***** Start form *****/
|
||||||
Frm_StartForm (ActNxtMchTch);
|
Frm_StartForm (NextAction);
|
||||||
Gam_PutParamMatchCod (MchCod);
|
Gam_PutParamMatchCod (MchCod);
|
||||||
|
|
||||||
/***** Put icon with link *****/
|
/***** Put icon with link *****/
|
||||||
|
@ -3694,10 +3725,10 @@ void Gam_ShowMatchToMeAsStd (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*************** Refresh current game for a teacher via AJAX *****************/
|
/************ Refresh number of players for a teacher via AJAX ***************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Gam_RefreshCurrentMatchTch (void)
|
void Gam_RefreshNumPlayersMatchTch (void)
|
||||||
{
|
{
|
||||||
if (!Gbl.Session.IsOpen) // If session has been closed, do not write anything
|
if (!Gbl.Session.IsOpen) // If session has been closed, do not write anything
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -121,16 +121,16 @@ void Gam_RemoveMatchTch (void);
|
||||||
|
|
||||||
void Gam_RequestNewMatchTch (void);
|
void Gam_RequestNewMatchTch (void);
|
||||||
|
|
||||||
void Gam_CreateNewMatchTch1 (void);
|
void Gam_CreateNewMatchTch (void);
|
||||||
void Gam_CreateNewMatchTch2 (void);
|
void Gam_RequestStartResumeMatchTch (void);
|
||||||
void Gam_ResumeUnfinishedMatchTch (void);
|
void Gam_CurrentStatusMatchTch (void);
|
||||||
void Gam_NextStatusMatchTch (void);
|
void Gam_NextStatusMatchTch (void);
|
||||||
|
|
||||||
void Gam_ShowFinishedMatchResults (void);
|
void Gam_ShowFinishedMatchResults (void);
|
||||||
|
|
||||||
void Gam_GetMatchBeingPlayed (void);
|
void Gam_GetMatchBeingPlayed (void);
|
||||||
void Gam_ShowMatchToMeAsStd (void);
|
void Gam_ShowMatchToMeAsStd (void);
|
||||||
void Gam_RefreshCurrentMatchTch (void);
|
void Gam_RefreshNumPlayersMatchTch (void);
|
||||||
void Gam_RefreshCurrentMatchStd (void);
|
void Gam_RefreshCurrentMatchStd (void);
|
||||||
|
|
||||||
void Gam_ReceiveQstAnsFromStd (void);
|
void Gam_ReceiveQstAnsFromStd (void);
|
||||||
|
|
20
swad_text.c
20
swad_text.c
|
@ -33109,25 +33109,25 @@ const char *Txt_results_per_page =
|
||||||
"resultados por página";
|
"resultados por página";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Resume = // Resume a game match
|
const char *Txt_Resume_match =
|
||||||
#if L==1 // ca
|
#if L==1 // ca
|
||||||
"Reprendre";
|
"Reprendre partida";
|
||||||
#elif L==2 // de
|
#elif L==2 // de
|
||||||
"Fortsetzen";
|
"Spiel fortsetzen";
|
||||||
#elif L==3 // en
|
#elif L==3 // en
|
||||||
"Resume";
|
"Resume match";
|
||||||
#elif L==4 // es
|
#elif L==4 // es
|
||||||
"Reanudar";
|
"Reanudar partida";
|
||||||
#elif L==5 // fr
|
#elif L==5 // fr
|
||||||
"Reprendre";
|
"Reprendre le match";
|
||||||
#elif L==6 // gn
|
#elif L==6 // gn
|
||||||
"Reanudar"; // Okoteve traducción
|
"Reanudar partida"; // Okoteve traducción
|
||||||
#elif L==7 // it
|
#elif L==7 // it
|
||||||
"Riprendi";
|
"Riprendi la partita";
|
||||||
#elif L==8 // pl
|
#elif L==8 // pl
|
||||||
"Wznów";
|
"Wznów mecz";
|
||||||
#elif L==9 // pt
|
#elif L==9 // pt
|
||||||
"Retomar";
|
"Retomar o jogo";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Retype_new_password =
|
const char *Txt_Retype_new_password =
|
||||||
|
|
Loading…
Reference in New Issue
Block a user