Version19.88.1

This commit is contained in:
Antonio Cañas Vargas 2019-12-08 23:19:16 +01:00
parent ae063cacfa
commit cacc574dc2
10 changed files with 553 additions and 315 deletions

View File

@ -631,14 +631,17 @@ Assessment:
478. ActAnsMchQstStd Answer a match question (as student)
479. ActRefMchStd Refresh current question when playing a game (as student)
481. ActSeeAllMyMchRes Show all my matches results
NEW. ActSeeGamMyMchRes Show my matches results in a given game
NEW. ActSeeMyMchResCrs Show all my matches results in the current course
NEW. ActSeeMyMchResGam Show all my matches results in a given game
NEW. ActSeeMyMchResMch Show all my matches results in a given match
484. ActSeeOneMchResMe Show one match result of me as student
482. ActReqSeeAllMchRes Select users and range of dates to see matches results
483. ActSeeAllMchRes Show matches results of several users in a given game
NEW. ActSeeGamMchRes Show matches results of several users
484. ActSeeOneMchResMe Show one match result of me as student
NEW. ActSeeAllMchResCrs Show all matches results of selected users in the current course
NEW. ActSeeAllMchResGam Show all matches results in a given game
NEW. ActSeeAllMchResMch Show all matches results in a given game
485. ActSeeOneMchResOth Show one match result of other user
476. ActChgVisResMchUsr Change visibility of match results for students
487. ActFrmNewGam Form to create a new game
@ -2167,14 +2170,17 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActAnsMchQstStd ] = {1651,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_ReceiveQuestionAnswer ,NULL},
[ActRefMchStd ] = {1782,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Mch_GetMatchBeingPlayed ,Mch_RefreshMatchStd ,NULL},
[ActSeeAllMyMchRes ] = {1796,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowMyMchRes ,NULL},
[ActSeeGamMyMchRes ] = {1810,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowMyMchResInGame ,NULL},
[ActSeeMyMchResCrs ] = {1796,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowMyMchResultsInCrs ,NULL},
[ActSeeMyMchResGam ] = {1810,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowMyMchResultsInGam ,NULL},
[ActSeeMyMchResMch ] = {1812,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowMyMchResultsInMch ,NULL},
[ActSeeOneMchResMe ] = {1797,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowOneMchResult ,NULL},
[ActReqSeeAllMchRes ] = {1798,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,McR_SelUsrsToViewUsrsMchRes ,NULL},
[ActSeeAllMchRes ] = {1799,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_GetUsrsAndShowMchRes ,NULL},
[ActSeeGamMchRes ] = {1811,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowUsrsMchResultsInGame ,NULL},
[ActReqSeeAllMchRes ] = {1798,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDates ,McR_SelUsrsToViewMchResults ,NULL},
[ActSeeAllMchResCrs ] = {1799,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowAllMchResultsInCrs ,NULL},
[ActSeeAllMchResGam ] = {1811,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowAllMchResultsInGam ,NULL},
[ActSeeAllMchResMch ] = {1813,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowAllMchResultsInMch ,NULL},
[ActSeeOneMchResOth ] = {1800,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,McR_ShowOneMchResult ,NULL},
[ActChgVisResMchUsr ] = {1801,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ToggleVisibilResultsMchUsr ,NULL},
[ActFrmNewGam ] = {1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestCreatOrEditGame ,NULL},
@ -5021,10 +5027,10 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #1793 (obsolete action)
ActChgVisResMchQst, // #1794
-1, // #1795
ActSeeAllMyMchRes, // #1796
ActSeeMyMchResCrs, // #1796
ActSeeOneMchResMe, // #1797
ActReqSeeAllMchRes, // #1798
ActSeeAllMchRes, // #1799
ActSeeAllMchResCrs, // #1799
ActSeeOneMchResOth, // #1800
ActChgVisResMchUsr, // #1801
ActChgNumColMch, // #1802
@ -5035,8 +5041,10 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActShoHidSocComUsr, // #1807
ActSeeMchAnsQstStd, // #1808
ActRemMchAnsQstStd, // #1809
ActSeeGamMyMchRes, // #1810
ActSeeGamMchRes, // #1811
ActSeeMyMchResGam, // #1810
ActSeeAllMchResGam, // #1811
ActSeeMyMchResMch, // #1812
ActSeeAllMchResMch, // #1813
};
/*****************************************************************************/

View File

@ -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
#define Act_NUM_ACTIONS (1 + 4 + 66 + 38 + 12 + 42 + 36 + 19 + 110 + 183 + 437 + 176 + 169 + 16 + 68)
#define Act_NUM_ACTIONS (1 + 4 + 66 + 38 + 12 + 42 + 36 + 19 + 110 + 185 + 437 + 176 + 169 + 16 + 68)
#define Act_MAX_ACTION_COD 1811
#define Act_MAX_ACTION_COD 1813
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@ -630,58 +630,61 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 134)
#define ActRefMchStd (ActChgCrsTT1stDay + 135)
#define ActSeeAllMyMchRes (ActChgCrsTT1stDay + 136)
#define ActSeeGamMyMchRes (ActChgCrsTT1stDay + 137)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 138)
#define ActSeeMyMchResCrs (ActChgCrsTT1stDay + 136)
#define ActSeeMyMchResGam (ActChgCrsTT1stDay + 137)
#define ActSeeMyMchResMch (ActChgCrsTT1stDay + 138)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 139)
#define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 139)
#define ActSeeAllMchRes (ActChgCrsTT1stDay + 140)
#define ActSeeGamMchRes (ActChgCrsTT1stDay + 141)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 142)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 143)
#define ActReqSeeAllMchRes (ActChgCrsTT1stDay + 140)
#define ActSeeAllMchResCrs (ActChgCrsTT1stDay + 141)
#define ActSeeAllMchResGam (ActChgCrsTT1stDay + 142)
#define ActSeeAllMchResMch (ActChgCrsTT1stDay + 143)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 144)
#define ActFrmNewGam (ActChgCrsTT1stDay + 144)
#define ActEdiOneGam (ActChgCrsTT1stDay + 145)
#define ActNewGam (ActChgCrsTT1stDay + 146)
#define ActChgGam (ActChgCrsTT1stDay + 147)
#define ActReqRemGam (ActChgCrsTT1stDay + 148)
#define ActRemGam (ActChgCrsTT1stDay + 149)
#define ActHidGam (ActChgCrsTT1stDay + 150)
#define ActShoGam (ActChgCrsTT1stDay + 151)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 152)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 153)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 154)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 155)
#define ActRemGamQst (ActChgCrsTT1stDay + 156)
#define ActUp_GamQst (ActChgCrsTT1stDay + 157)
#define ActDwnGamQst (ActChgCrsTT1stDay + 158)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 145)
#define ActSeeSvy (ActChgCrsTT1stDay + 159)
#define ActAnsSvy (ActChgCrsTT1stDay + 160)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 161)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 162)
#define ActNewSvy (ActChgCrsTT1stDay + 163)
#define ActChgSvy (ActChgCrsTT1stDay + 164)
#define ActReqRemSvy (ActChgCrsTT1stDay + 165)
#define ActRemSvy (ActChgCrsTT1stDay + 166)
#define ActReqRstSvy (ActChgCrsTT1stDay + 167)
#define ActRstSvy (ActChgCrsTT1stDay + 168)
#define ActHidSvy (ActChgCrsTT1stDay + 169)
#define ActShoSvy (ActChgCrsTT1stDay + 170)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 171)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 172)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 173)
#define ActRemSvyQst (ActChgCrsTT1stDay + 174)
#define ActFrmNewGam (ActChgCrsTT1stDay + 146)
#define ActEdiOneGam (ActChgCrsTT1stDay + 147)
#define ActNewGam (ActChgCrsTT1stDay + 148)
#define ActChgGam (ActChgCrsTT1stDay + 149)
#define ActReqRemGam (ActChgCrsTT1stDay + 150)
#define ActRemGam (ActChgCrsTT1stDay + 151)
#define ActHidGam (ActChgCrsTT1stDay + 152)
#define ActShoGam (ActChgCrsTT1stDay + 153)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 154)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 155)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 156)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 157)
#define ActRemGamQst (ActChgCrsTT1stDay + 158)
#define ActUp_GamQst (ActChgCrsTT1stDay + 159)
#define ActDwnGamQst (ActChgCrsTT1stDay + 160)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 175)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 176)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 177)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 178)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 179)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 180)
#define ActRemExaAnn (ActChgCrsTT1stDay + 181)
#define ActHidExaAnn (ActChgCrsTT1stDay + 182)
#define ActShoExaAnn (ActChgCrsTT1stDay + 183)
#define ActSeeSvy (ActChgCrsTT1stDay + 161)
#define ActAnsSvy (ActChgCrsTT1stDay + 162)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 163)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 164)
#define ActNewSvy (ActChgCrsTT1stDay + 165)
#define ActChgSvy (ActChgCrsTT1stDay + 166)
#define ActReqRemSvy (ActChgCrsTT1stDay + 167)
#define ActRemSvy (ActChgCrsTT1stDay + 168)
#define ActReqRstSvy (ActChgCrsTT1stDay + 169)
#define ActRstSvy (ActChgCrsTT1stDay + 170)
#define ActHidSvy (ActChgCrsTT1stDay + 171)
#define ActShoSvy (ActChgCrsTT1stDay + 172)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 173)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 174)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 175)
#define ActRemSvyQst (ActChgCrsTT1stDay + 176)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 177)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 178)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 179)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 180)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 181)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 182)
#define ActRemExaAnn (ActChgCrsTT1stDay + 183)
#define ActHidExaAnn (ActChgCrsTT1stDay + 184)
#define ActShoExaAnn (ActChgCrsTT1stDay + 185)
/*****************************************************************************/
/******************************** Files tab **********************************/

View File

@ -490,14 +490,15 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.87.5 (2019-12-07)"
#define Log_PLATFORM_VERSION "SWAD 19.88.1 (2019-12-08)"
#define CSS_FILE "swad19.85.css"
#define JS_FILE "swad19.70.js"
/*
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
// TODO: Impedir la creación y edición de proyectos si no son editables.
// TODO: En cada partida, poder listar los resultados en una tabla como la de resultados globales
Version 19.88.1: Dec 08, 2019 Changes in layoout of matches results. (248219 lines)
Version 19.88: Dec 08, 2019 Show matches results in a match. (248151 lines)
Version 19.87.5: Dec 08, 2019 Results of a game are integrated in the box of that game. (248008 lines)
Version 19.87.4: Dec 08, 2019 Code refactoring in games. (247989 lines)
Version 19.87.3: Dec 08, 2019 Changes in layout of matches results. (247997 lines)

View File

@ -162,7 +162,7 @@ static void Gam_ExchangeQuestions (long GamCod,
static bool Gam_GetNumMchsGameAndCheckIfEditable (struct Game *Game);
static long Gam_GetParamCurrentGamCod (void);
static long Gam_GetCurrentGamCod (void);
/*****************************************************************************/
/***************************** List all games ********************************/
@ -319,7 +319,7 @@ static void Gam_PutIconsListGames (void)
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD:
Ico_PutContextualIconToShowResults (ActSeeAllMyMchRes,NULL,NULL);
Ico_PutContextualIconToShowResults (ActSeeMyMchResCrs,NULL,NULL);
break;
case Rol_NET:
case Rol_TCH:
@ -377,14 +377,15 @@ static void Gam_PutParamsToCreateNewGame (void)
void Gam_SeeOneGame (void)
{
long GamCod;
struct Game Game;
/***** Get parameters *****/
if ((GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Show game *****/
Gam_ShowOnlyOneGame (GamCod,
Gam_ShowOnlyOneGame (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
}
@ -393,41 +394,36 @@ void Gam_SeeOneGame (void)
/******************************* Show one game *******************************/
/*****************************************************************************/
void Gam_ShowOnlyOneGame (long GamCod,
void Gam_ShowOnlyOneGame (struct Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch)
{
Gam_ShowOnlyOneGameBegin (GamCod,ListGameQuestions,PutFormNewMatch);
Gam_ShowOnlyOneGameBegin (Game,ListGameQuestions,PutFormNewMatch);
Gam_ShowOnlyOneGameEnd ();
}
void Gam_ShowOnlyOneGameBegin (long GamCod,
void Gam_ShowOnlyOneGameBegin (struct Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch)
{
extern const char *Hlp_ASSESSMENT_Games;
extern const char *Txt_Game;
struct Game Game;
/***** Get data of this game *****/
Game.GamCod = GamCod;
Gam_GetDataOfGameByCod (&Game);
/***** Begin box *****/
Gam_SetParamCurrentGamCod (GamCod);
Gam_SetCurrentGamCod (Game->GamCod);
Box_BoxBegin (NULL,Txt_Game,Gam_PutIconToShowResultsOfGame,
Hlp_ASSESSMENT_Games,Box_NOT_CLOSABLE);
/***** Show game *****/
Gam_ShowOneGame (&Game,
Gam_ShowOneGame (Game,
true); // Show only this game
if (ListGameQuestions)
/***** Write questions of this game *****/
Gam_ListGameQuestions (&Game);
Gam_ListGameQuestions (Game);
else
/***** List matches *****/
Mch_ListMatches (&Game,PutFormNewMatch);
Mch_ListMatches (Game,PutFormNewMatch);
}
void Gam_ShowOnlyOneGameEnd (void)
@ -504,7 +500,7 @@ static void Gam_ShowOneGame (struct Game *Game,bool ShowOnlyThisGame)
HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
/* Game title */
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
HTM_ARTICLE_Begin (Anchor);
Frm_StartForm (ActSeeGam);
Gam_PutParams ();
@ -533,7 +529,7 @@ static void Gam_ShowOneGame (struct Game *Game,bool ShowOnlyThisGame)
else
HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd);
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
Frm_StartForm (ActSeeGam);
Gam_PutParams ();
HTM_BUTTON_SUBMIT_Begin (Txt_Matches,
@ -600,12 +596,12 @@ static void Gam_PutIconToShowResultsOfGame (void)
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD:
Ico_PutContextualIconToShowResults (ActSeeGamMyMchRes,McR_RESULTS_TABLE_ID,Gam_PutParams);
Ico_PutContextualIconToShowResults (ActSeeMyMchResGam,McR_RESULTS_TABLE_ID,Gam_PutParams);
break;
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
Ico_PutContextualIconToShowResults (ActSeeGamMchRes,McR_RESULTS_TABLE_ID,Gam_PutParams);
Ico_PutContextualIconToShowResults (ActSeeAllMchResGam,McR_RESULTS_TABLE_ID,Gam_PutParams);
break;
default:
break;
@ -637,7 +633,7 @@ void Gam_PutHiddenParamGameOrder (void)
static void Gam_PutFormsToRemEditOneGame (const struct Game *Game,
const char *Anchor)
{
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
/***** Put icon to remove game *****/
Ico_PutContextualIconToRemove (ActReqRemGam,Gam_PutParams);
@ -670,7 +666,7 @@ void Gam_PutParams (void)
static void Gam_PutParamCurrentGamCod (void)
{
long CurrentGamCod = Gam_GetParamCurrentGamCod ();
long CurrentGamCod = Gam_GetCurrentGamCod ();
if (CurrentGamCod > 0)
Gam_PutParamGameCod (CurrentGamCod);
@ -1065,7 +1061,7 @@ void Gam_AskRemGame (void)
Lay_NoPermissionExit ();
/***** Show question and button to remove game *****/
Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game.GamCod); // Used to pass parameter
Ale_ShowAlertAndButton (ActRemGam,NULL,NULL,Gam_PutParams,
Btn_REMOVE_BUTTON,Txt_Remove_game,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_game_X,
@ -1269,7 +1265,7 @@ static void Gam_PutFormsEditionGame (struct Game *Game,bool ItsANewGame)
}
/***** Begin form *****/
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
Frm_StartForm (ItsANewGame ? ActNewGam :
ActChgGam);
Gam_PutParams ();
@ -1515,19 +1511,20 @@ void Gam_RequestNewQuestion (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
{
/***** Show form to create a new question in this game *****/
Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game.GamCod); // Used to pass parameter
Tst_ShowFormAskSelectTstsForGame ();
}
else
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -1548,7 +1545,7 @@ void Gam_ListTstQuestionsToSelect (void)
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
{
/***** List several test questions for selection *****/
Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game.GamCod); // Used to pass parameter
Tst_ListQuestionsToSelect ();
}
else
@ -1757,7 +1754,7 @@ static void Gam_ListGameQuestions (struct Game *Game)
Game->GamCod);
/***** Begin box *****/
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
Box_BoxBegin (NULL,Txt_Questions,ICanEditQuestions ? Gam_PutIconToAddNewQuestions :
NULL,
Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE);
@ -1848,7 +1845,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts,
Gbl.Test.QstCod = Str_ConvertStrCodToLongCod (row[1]);
/***** Icons *****/
Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (GamCod); // Used to pass parameter
Gam_CurrentQstInd = QstInd;
HTM_TR_Begin (NULL);
@ -1996,6 +1993,7 @@ void Gam_AddTstQuestionsToGame (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
@ -2042,7 +2040,7 @@ void Gam_AddTstQuestionsToGame (void)
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -2121,6 +2119,7 @@ void Gam_RequestRemoveQst (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
@ -2129,7 +2128,7 @@ void Gam_RequestRemoveQst (void)
QstInd = Gam_GetParamQstInd ();
/***** Show question and button to remove question *****/
Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game.GamCod); // Used to pass parameter
Gam_CurrentQstInd = QstInd;
Ale_ShowAlertAndButton (ActRemGamQst,NULL,NULL,Gam_PutParamsOneQst,
Btn_REMOVE_BUTTON,Txt_Remove_question,
@ -2140,7 +2139,7 @@ void Gam_RequestRemoveQst (void)
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -2158,6 +2157,7 @@ void Gam_RemoveQst (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
@ -2197,7 +2197,7 @@ void Gam_RemoveQst (void)
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -2217,6 +2217,7 @@ void Gam_MoveUpQst (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
@ -2245,7 +2246,7 @@ void Gam_MoveUpQst (void)
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -2267,6 +2268,7 @@ void Gam_MoveDownQst (void)
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Check if game has matches *****/
if (Gam_GetNumMchsGameAndCheckIfEditable (&Game))
@ -2303,7 +2305,7 @@ void Gam_MoveDownQst (void)
Lay_NoPermissionExit ();
/***** Show current game *****/
Gam_ShowOnlyOneGame (Game.GamCod,
Gam_ShowOnlyOneGame (&Game,
true, // List game questions
false); // Do not put form to start new match
}
@ -2385,7 +2387,7 @@ void Gam_PutButtonNewMatch (long GamCod)
{
extern const char *Txt_New_match;
Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (GamCod); // Used to pass parameter
Frm_StartFormAnchor (ActReqNewMch,Mch_NEW_MATCH_SECTION_ID);
Gam_PutParams ();
Btn_PutConfirmButton (Txt_New_match);
@ -2398,14 +2400,15 @@ void Gam_PutButtonNewMatch (long GamCod)
void Gam_RequestNewMatch (void)
{
long GamCod;
struct Game Game;
/***** Get parameters *****/
if ((GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Show game *****/
Gam_ShowOnlyOneGame (GamCod,
Gam_ShowOnlyOneGame (&Game,
false, // Do not list game questions
true); // Put form to start new match
}
@ -2699,12 +2702,12 @@ void Gam_ShowTstTagsPresentInAGame (long GamCod)
/**************** Access to variable used to pass parameter ******************/
/*****************************************************************************/
void Gam_SetParamCurrentGamCod (long GamCod)
void Gam_SetCurrentGamCod (long GamCod)
{
Gam_CurrentGamCod = GamCod;
}
static long Gam_GetParamCurrentGamCod (void)
static long Gam_GetCurrentGamCod (void)
{
return Gam_CurrentGamCod;
}

View File

@ -81,10 +81,10 @@ typedef enum
void Gam_SeeAllGames (void);
void Gam_SeeOneGame (void);
void Gam_ShowOnlyOneGame (long GamCod,
void Gam_ShowOnlyOneGame (struct Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch);
void Gam_ShowOnlyOneGameBegin (long GamCod,
void Gam_ShowOnlyOneGameBegin (struct Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch);
void Gam_ShowOnlyOneGameEnd (void);
@ -140,7 +140,7 @@ double Gam_GetNumQstsPerCrsGame (Hie_Level_t Scope);
void Gam_ShowTstTagsPresentInAGame (long GamCod);
void Gam_SetParamCurrentGamCod (long GamCod);
void Gam_SetCurrentGamCod (long GamCod);
void Gam_GetScoreRange (long GamCod,double *MinScore,double *MaxScore);

View File

@ -213,7 +213,7 @@ static unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsi
static unsigned Mch_GetNumUsrsWhoHaveAnswerMch (long MchCod);
static void Mch_DrawBarNumUsrs (unsigned NumAnswerersAns,unsigned NumAnswerersQst,bool Correct);
static long Mch_GetParamCurrentMchCod (void);
static long Mch_GetCurrentMchCod (void);
/*****************************************************************************/
/************************* List the matches of a game ************************/
@ -271,7 +271,7 @@ void Mch_ListMatches (struct Game *Game,bool PutFormNewMatch)
free (SubQuery);
/***** Begin box *****/
Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter
Gam_SetCurrentGamCod (Game->GamCod); // Used to pass parameter
Box_BoxBegin ("100%",Txt_Matches,Mch_PutIconsInListOfMatches,
Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE);
@ -534,8 +534,8 @@ static void Mch_ListOneOrMoreMatchesIcons (const struct Match *Match)
/***** Put icon to remove the match *****/
if (Mch_CheckIfICanEditThisMatch (Match))
{
Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter
Gam_SetCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match->MchCod); // Used to pass parameter
Frm_StartForm (ActReqRemMch);
Mch_PutParamsEdit ();
Ico_PutIconRemove ();
@ -599,7 +599,7 @@ static void Mch_ListOneOrMoreMatchesTitleGrps (const struct Match *Match)
HTM_TD_Begin ("class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
/***** Match title *****/
Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match->MchCod); // Used to pass parameter
Frm_StartForm (Gbl.Usrs.Me.Role.Logged == Rol_STD ? ActJoiMch :
ActResMch);
Mch_PutParamsPlay ();
@ -712,7 +712,7 @@ static void Mch_ListOneOrMoreMatchesStatus (const struct Match *Match,unsigned N
}
/* Icon to join match or resume match */
Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match->MchCod); // Used to pass parameter
Lay_PutContextualLinkOnlyIcon (Gbl.Usrs.Me.Role.Logged == Rol_STD ? ActJoiMch :
ActResMch,
NULL,
@ -753,49 +753,57 @@ static void Mch_ListOneOrMoreMatchesResult (const struct Match *Match)
static void Mch_ListOneOrMoreMatchesResultStd (const struct Match *Match)
{
extern const char *Txt_Match_result;
extern const char *Txt_Hidden_result;
extern const char *Txt_Hidden_results;
extern const char *Txt_Results;
/***** Is match result visible or hidden? *****/
if (Match->Status.ShowUsrResults)
{
/* Result is visible by me */
Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter
Frm_StartForm (ActSeeOneMchResMe);
Mch_PutParamsEdit ();
Ico_PutIconLink ("tasks.svg",Txt_Match_result);
Frm_EndForm ();
Gam_SetCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match->MchCod); // Used to pass parameter
Lay_PutContextualLinkOnlyIcon (ActSeeMyMchResMch,McR_RESULTS_TABLE_ID,
Mch_PutParamsEdit,
"trophy.svg",
Txt_Results);
}
else
/* Result is forbidden to me */
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
}
static void Mch_ListOneOrMoreMatchesResultTch (const struct Match *Match)
{
extern const char *Txt_Hidden_result;
extern const char *Txt_Visible_result;
extern const char *Txt_Visible_results;
extern const char *Txt_Hidden_results;
extern const char *Txt_Results;
/***** Can I edit match vivibility? *****/
if (Mch_CheckIfICanEditThisMatch (Match))
{
Gam_SetCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match->MchCod); // Used to pass parameter
/* Show match results */
Lay_PutContextualLinkOnlyIcon (ActSeeAllMchResMch,McR_RESULTS_TABLE_ID,
Mch_PutParamsEdit,
"trophy.svg",
Txt_Results);
/* I can edit visibility */
Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter
Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter
Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL,
Mch_PutParamsEdit,
Match->Status.ShowUsrResults ? "eye.svg" :
"eye-slash.svg",
Match->Status.ShowUsrResults ? Txt_Visible_result :
Txt_Hidden_result);
Match->Status.ShowUsrResults ? Txt_Visible_results :
Txt_Hidden_results);
}
else
/* I can not edit visibility */
Ico_PutIconOff (Match->Status.ShowUsrResults ? "eye.svg" :
"eye-slash.svg",
Match->Status.ShowUsrResults ? Txt_Visible_result :
Txt_Hidden_result);
Match->Status.ShowUsrResults ? Txt_Visible_results :
Txt_Hidden_results);
}
/*****************************************************************************/
@ -825,7 +833,7 @@ void Mch_ToggleVisibilResultsMchUsr (void)
Match.MchCod);
/***** Show current game *****/
Gam_ShowOnlyOneGame (Match.GamCod,
Gam_ShowOnlyOneGame (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
}
@ -945,15 +953,15 @@ void Mch_RequestRemoveMatch (void)
Mch_GetAndCheckParameters (&Game,&Match);
/***** Show question and button to remove question *****/
Gam_SetParamCurrentGamCod (Match.GamCod); // Used to pass parameter
Mch_SetParamCurrentMchCod (Match.MchCod); // Used to pass parameter
Gam_SetCurrentGamCod (Match.GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match.MchCod); // Used to pass parameter
Ale_ShowAlertAndButton (ActRemMch,NULL,NULL,Mch_PutParamsEdit,
Btn_REMOVE_BUTTON,Txt_Remove_match,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_match_X,
Match.Title);
/***** Show current game *****/
Gam_ShowOnlyOneGame (Match.GamCod,
Gam_ShowOnlyOneGame (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
}
@ -983,7 +991,7 @@ void Mch_RemoveMatch (void)
Match.Title);
/***** Show current game *****/
Gam_ShowOnlyOneGame (Match.GamCod,
Gam_ShowOnlyOneGame (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
}
@ -1140,7 +1148,7 @@ void Mch_PutParamsEdit (void)
static void Mch_PutParamsPlay (void)
{
long CurrentMchCod = Mch_GetParamCurrentMchCod ();
long CurrentMchCod = Mch_GetCurrentMchCod ();
if (CurrentMchCod > 0)
Mch_PutParamMchCod (CurrentMchCod);
@ -3549,12 +3557,12 @@ static void Mch_DrawBarNumUsrs (unsigned NumAnswerersAns,unsigned NumAnswerersQs
/**************** Access to variable used to pass parameter ******************/
/*****************************************************************************/
void Mch_SetParamCurrentMchCod (long MchCod)
void Mch_SetCurrentMchCod (long MchCod)
{
Mch_CurrentMchCod = MchCod;
}
static long Mch_GetParamCurrentMchCod (void)
static long Mch_GetCurrentMchCod (void)
{
return Mch_CurrentMchCod;
}

View File

@ -127,6 +127,6 @@ void Mch_GetAndDrawBarNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsig
unsigned NumAnswerersQst,bool Correct);
unsigned Mch_GetNumUsrsWhoHaveAnswerQst (long MchCod,unsigned QstInd);
void Mch_SetParamCurrentMchCod (long MchCod);
void Mch_SetCurrentMchCod (long MchCod);
#endif

View File

@ -69,13 +69,25 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void McR_ShowUsrsMchResults (void);
static void McR_ListMyMchResultsInCrs (void);
static void McR_ListMyMchResultsInGam (long GamCod);
static void McR_ListMyMchResultsInMch (long MchCod);
static void McR_ShowAllMchResultsInSelectedGames (void);
static void McR_ListAllMchResultsInSelectedGames (void);
static void McR_ListAllMchResultsInGam (long GamCod);
static void McR_ListAllMchResultsInMch (long MchCod);
static void McR_ShowResultsBegin (const char *Title,bool ListGamesToSelect);
static void McR_ShowResultsEnd (void);
static void McR_ListGamesToSelect (void);
static void McR_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther);
static void McR_BuildGamesSelectedCommas (char **GamesSelectedCommas);
static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
const char *GamesSelectedSeparatedByCommas);
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas);
static void McR_ShowMchResultsSummaryRow (unsigned NumResults,
unsigned NumTotalQsts,
unsigned NumTotalQstsNotBlank,
@ -94,7 +106,7 @@ static bool McR_GetVisibilityMchResultFromDB (long MchCod);
/*********** Select users and dates to show their matches results ************/
/*****************************************************************************/
void McR_SelUsrsToViewUsrsMchRes (void)
void McR_SelUsrsToViewMchResults (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *The_ClassFormInBox[The_NUM_THEMES];
@ -138,7 +150,7 @@ void McR_SelUsrsToViewUsrsMchRes (void)
Usr_ShowFormsToSelectUsrListType (NULL);
/***** Begin form *****/
Frm_StartForm (ActSeeAllMchRes);
Frm_StartForm (ActSeeAllMchResCrs);
Grp_PutParamsCodGrps ();
/***** Put list of users to select some of them *****/
@ -194,137 +206,167 @@ void McR_SelUsrsToViewUsrsMchRes (void)
/*************************** Show my matches results *************************/
/*****************************************************************************/
void McR_ShowMyMchRes (void)
void McR_ShowMyMchResultsInCrs (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
/***** Get list of games *****/
Gam_GetListGames (Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods ();
McR_BuildGamesSelectedCommas (&GamesSelectedCommas);
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Results,NULL,
Hlp_ASSESSMENT_Games_results,Box_NOT_CLOSABLE);
/***** List games to select *****/
McR_ListGamesToSelect ();
/***** Start section with match results table *****/
HTM_SECTION_Begin (McR_RESULTS_TABLE_ID);
HTM_TABLE_BeginWidePadding (2);
McR_ShowHeaderMchResults (Usr_ME);
/***** List my matches results *****/
Tst_GetConfigTstFromDB (); // Get feedback type
McR_ShowMchResults (Usr_ME,GamesSelectedCommas);
/***** End section with match results table *****/
HTM_TABLE_End ();
HTM_SECTION_End ();
/***** End box *****/
Box_BoxEnd ();
/***** List my matches results in the current course *****/
McR_ShowResultsBegin (Txt_Results,true); // List games to select
McR_ListMyMchResultsInCrs ();
McR_ShowResultsEnd ();
/***** Free list of games *****/
free (GamesSelectedCommas);
free (Gbl.Games.GamCodsSelected);
Gam_FreeListGames ();
}
static void McR_ListMyMchResultsInCrs (void)
{
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
/***** Table header *****/
McR_ShowHeaderMchResults (Usr_ME);
/***** List my matches results in the current course *****/
Tst_GetConfigTstFromDB (); // Get feedback type
McR_BuildGamesSelectedCommas (&GamesSelectedCommas);
McR_ShowMchResults (Usr_ME,-1L,-1L,GamesSelectedCommas);
free (GamesSelectedCommas);
}
/*****************************************************************************/
/***************** Show my matches results in a given game *******************/
/*****************************************************************************/
void McR_ShowMyMchResInGame (void)
void McR_ShowMyMchResultsInGam (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
extern const char *Txt_Results_of_game_X;
struct Game Game;
char *GamesSelectedCommas;
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
if (asprintf (&GamesSelectedCommas,"%ld",Game.GamCod) < 0)
Lay_NotEnoughMemoryExit ();
Gam_GetDataOfGameByCod (&Game);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (Game.GamCod,
Gam_ShowOnlyOneGameBegin (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Results,NULL,
Hlp_ASSESSMENT_Games_results,Box_NOT_CLOSABLE);
/***** Start section with match results table *****/
HTM_SECTION_Begin (McR_RESULTS_TABLE_ID);
HTM_TABLE_BeginWidePadding (2);
McR_ShowHeaderMchResults (Usr_ME);
/***** List my matches results *****/
Tst_GetConfigTstFromDB (); // Get feedback type
McR_ShowMchResults (Usr_ME,GamesSelectedCommas);
/***** End section with match results table *****/
HTM_TABLE_End ();
HTM_SECTION_End ();
/***** End box *****/
Box_BoxEnd ();
/***** List my matches results in game *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Results_of_game_X,
Game.Title);
McR_ShowResultsBegin (Gbl.Title,false); // Do not list games to select
McR_ListMyMchResultsInGam (Game.GamCod);
McR_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
/***** Free string with list of selected games separated by commas *****/
free (GamesSelectedCommas);
static void McR_ListMyMchResultsInGam (long GamCod)
{
/***** Table header *****/
McR_ShowHeaderMchResults (Usr_ME);
/***** List my matches results in game *****/
Tst_GetConfigTstFromDB (); // Get feedback type
McR_ShowMchResults (Usr_ME,-1L,GamCod,NULL);
}
/*****************************************************************************/
/***************** Show my matches results in a given match ******************/
/*****************************************************************************/
void McR_ShowMyMchResultsInMch (void)
{
extern const char *Txt_Results_of_match_X;
struct Game Game;
struct Match Match;
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of match is missing.");
Gam_GetDataOfGameByCod (&Game);
Mch_GetDataOfMatchByCod (&Match);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List my matches results in match *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Results_of_match_X,
Match.Title);
McR_ShowResultsBegin (Gbl.Title,false); // Do not list games to select
McR_ListMyMchResultsInMch (Match.MchCod);
McR_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void McR_ListMyMchResultsInMch (long MchCod)
{
/***** Table header *****/
McR_ShowHeaderMchResults (Usr_ME);
/***** List my matches results in game *****/
Tst_GetConfigTstFromDB (); // Get feedback type
McR_ShowMchResults (Usr_ME,MchCod,-1L,NULL);
}
/*****************************************************************************/
/****************** Get users and show their matches results *****************/
/*****************************************************************************/
void McR_GetUsrsAndShowMchRes (void)
void McR_ShowAllMchResultsInCrs (void)
{
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
McR_ShowUsrsMchResults,
McR_SelUsrsToViewUsrsMchRes);
McR_ShowAllMchResultsInSelectedGames,
McR_SelUsrsToViewMchResults);
}
/*****************************************************************************/
/****************** Show matches results for several users *******************/
/*****************************************************************************/
static void McR_ShowUsrsMchResults (void)
static void McR_ShowAllMchResultsInSelectedGames (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
const char *Ptr;
/***** Get list of games *****/
Gam_GetListGames (Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods ();
McR_BuildGamesSelectedCommas (&GamesSelectedCommas);
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Results,NULL,
Hlp_ASSESSMENT_Games_results,Box_NOT_CLOSABLE);
/***** List the matches results of the selected users *****/
McR_ShowResultsBegin (Txt_Results,true); // List games to select
McR_ListAllMchResultsInSelectedGames ();
McR_ShowResultsEnd ();
/***** List games to select *****/
McR_ListGamesToSelect ();
/***** Free list of games *****/
free (Gbl.Games.GamCodsSelected);
Gam_FreeListGames ();
}
/***** Start section with match results table *****/
HTM_SECTION_Begin (McR_RESULTS_TABLE_ID);
HTM_TABLE_BeginWidePadding (2);
static void McR_ListAllMchResultsInSelectedGames (void)
{
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
const char *Ptr;
/***** Table head *****/
McR_ShowHeaderMchResults (Usr_OTHER);
/***** List the matches results of the selected users *****/
McR_BuildGamesSelectedCommas (&GamesSelectedCommas);
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
while (*Ptr)
{
@ -336,68 +378,67 @@ static void McR_ShowUsrsMchResults (void)
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
McR_ShowMchResults (Usr_OTHER,GamesSelectedCommas);
McR_ShowMchResults (Usr_OTHER,-1L,-1L,GamesSelectedCommas);
}
}
/***** End section with match results table *****/
HTM_TABLE_End ();
HTM_SECTION_End ();
/***** End box *****/
Box_BoxEnd ();
/***** Free list of games *****/
free (GamesSelectedCommas);
free (Gbl.Games.GamCodsSelected);
Gam_FreeListGames ();
}
/*****************************************************************************/
/** Show matches results of a game for the users who answered in that game ***/
/*** Show matches results of a game for the users who answered in that game **/
/*****************************************************************************/
void McR_ShowUsrsMchResultsInGame (void)
void McR_ShowAllMchResultsInGam (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
extern const char *Txt_Results_of_game_X;
struct Game Game;
char *GamesSelectedCommas;
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List matches results in game *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Results_of_game_X,
Game.Title);
McR_ShowResultsBegin (Gbl.Title,false); // Do not list games to select
McR_ListAllMchResultsInGam (Game.GamCod);
McR_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void McR_ListAllMchResultsInGam (long GamCod)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumUsrs;
unsigned long NumUsr;
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
if (asprintf (&GamesSelectedCommas,"%ld",Game.GamCod) < 0)
Lay_NotEnoughMemoryExit ();
/***** Table head *****/
McR_ShowHeaderMchResults (Usr_OTHER);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (Game.GamCod,
false, // Do not list game questions
false); // Do not put form to start new match
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Results,NULL,
Hlp_ASSESSMENT_Games_results,Box_NOT_CLOSABLE);
/***** Make database query *****/
/***** Get all users who have answered any match question in this game *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get matches results of a user",
"SELECT DISTINCT mch_answers.UsrCod" // row[0]
" FROM mch_matches,mch_answers"
"SELECT mch_results.UsrCod" // row[0]
" FROM mch_results,mch_matches,gam_games"
" WHERE mch_matches.GamCod=%ld"
" AND mch_matches.MchCod=mch_answers.MchCod"
" ORDER BY mch_answers.UsrCod", // TODO: Order by name
Game.GamCod);
" AND mch_matches.MchCod=mch_results.MchCod"
" AND mch_matches.GamCod=gam_games.GamCod"
" AND gam_games.CrsCod=%ld" // Extra check
" ORDER BY mch_results.UsrCod", // TODO: Order by name
GamCod,
Gbl.Hierarchy.Crs.CrsCod);
if (NumUsrs)
{
/***** Start section with match results table *****/
HTM_SECTION_Begin (McR_RESULTS_TABLE_ID);
HTM_TABLE_BeginWidePadding (2);
McR_ShowHeaderMchResults (Usr_OTHER);
/***** List matches results for each user *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
@ -411,26 +452,125 @@ void McR_ShowUsrsMchResultsInGame (void)
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
McR_ShowMchResults (Usr_OTHER,GamesSelectedCommas);
McR_ShowMchResults (Usr_OTHER,-1L,GamCod,NULL);
}
}
/***** End section with match results table *****/
HTM_TABLE_End ();
HTM_SECTION_End ();
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/***** End box *****/
Box_BoxEnd ();
/*****************************************************************************/
/** Show matches results of a match for the users who answered in that match */
/*****************************************************************************/
void McR_ShowAllMchResultsInMch (void)
{
extern const char *Txt_Results_of_match_X;
struct Game Game;
struct Match Match;
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
Lay_ShowErrorAndExit ("Code of game is missing.");
if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of match is missing.");
Gam_GetDataOfGameByCod (&Game);
Mch_GetDataOfMatchByCod (&Match);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List matches results in match *****/
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Results_of_match_X,
Match.Title);
McR_ShowResultsBegin (Gbl.Title,false); // Do not list games to select
McR_ListAllMchResultsInMch (Match.MchCod);
McR_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
/***** Free string with list of selected games separated by commas *****/
free (GamesSelectedCommas);
static void McR_ListAllMchResultsInMch (long MchCod)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumUsrs;
unsigned long NumUsr;
/***** Table head *****/
McR_ShowHeaderMchResults (Usr_OTHER);
/***** Get all users who have answered any match question in this game *****/
NumUsrs = DB_QuerySELECT (&mysql_res,"can not get matches results of a user",
"SELECT mch_results.UsrCod" // row[0]
" FROM mch_results,mch_matches,gam_games"
" WHERE mch_results.MchCod=%ld"
" AND mch_results.MchCod=mch_matches.MchCod"
" AND mch_matches.GamCod=gam_games.GamCod"
" AND gam_games.CrsCod=%ld" // Extra check
" ORDER BY mch_results.UsrCod", // TODO: Order by name
MchCod,
Gbl.Hierarchy.Crs.CrsCod);
if (NumUsrs)
{
/***** List matches results for each user *****/
for (NumUsr = 0;
NumUsr < NumUsrs;
NumUsr++)
{
row = mysql_fetch_row (mysql_res);
/* Get match code (row[0]) */
if ((Gbl.Usrs.Other.UsrDat.UsrCod = Str_ConvertStrCodToLongCod (row[0])) > 0)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,Usr_DONT_GET_PREFS))
if (Usr_CheckIfICanViewMch (&Gbl.Usrs.Other.UsrDat))
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
McR_ShowMchResults (Usr_OTHER,MchCod,-1L,NULL);
}
}
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/************************ Show results (begin / end) *************************/
/*****************************************************************************/
static void McR_ShowResultsBegin (const char *Title,bool ListGamesToSelect)
{
extern const char *Hlp_ASSESSMENT_Games_results;
/***** Begin box *****/
Box_BoxBegin ("100%",Title,NULL,
Hlp_ASSESSMENT_Games_results,Box_NOT_CLOSABLE);
/***** List games to select *****/
if (ListGamesToSelect)
McR_ListGamesToSelect ();
/***** Start section with match results table *****/
HTM_SECTION_Begin (McR_RESULTS_TABLE_ID);
HTM_TABLE_BeginWidePadding (2);
}
static void McR_ShowResultsEnd (void)
{
/***** End section with match results table *****/
HTM_TABLE_End ();
HTM_SECTION_End ();
/***** End box *****/
Box_BoxEnd ();
}
/*****************************************************************************/
@ -589,10 +729,14 @@ static void McR_BuildGamesSelectedCommas (char **GamesSelectedCommas)
/*****************************************************************************/
static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas)
{
extern const char *Txt_Match_result;
extern const char *Txt_Hidden_result;
extern const char *Txt_Hidden_results;
char *MchSubQuery;
char *GamSubQuery;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
struct UsrData *UsrDat;
@ -615,16 +759,39 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
double TotalGrade = 0.0;
time_t TimeUTC[Dat_NUM_START_END_TIME];
/***** Trivial check: there should be games selected *****/
if (!GamesSelectedCommas)
return;
if (!GamesSelectedCommas[0])
return;
/***** Set user *****/
UsrDat = (MeOrOther == Usr_ME) ? &Gbl.Usrs.Me.UsrDat :
&Gbl.Usrs.Other.UsrDat;
/***** Build matches subquery *****/
if (MchCod > 0)
{
if (asprintf (&MchSubQuery," AND mch_results.MchCod=%ld",MchCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else
{
if (asprintf (&MchSubQuery,"%s","") < 0)
Lay_NotEnoughMemoryExit ();
}
/***** Build games subquery *****/
if (GamCod > 0)
{
if (asprintf (&GamSubQuery," AND mch_matches.GamCod=%ld",GamCod) < 0)
Lay_NotEnoughMemoryExit ();
}
else if (GamesSelectedCommas)
{
if (asprintf (&GamSubQuery," AND mch_matches.GamCod IN (%s)",GamesSelectedCommas) < 0)
Lay_NotEnoughMemoryExit ();
}
else
{
if (asprintf (&GamSubQuery,"%s","") < 0)
Lay_NotEnoughMemoryExit ();
}
/***** Make database query *****/
NumResults =
(unsigned) DB_QuerySELECT (&mysql_res,"can not get matches results of a user",
@ -637,14 +804,18 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
"gam_games.MaxGrade" // row[6]
" FROM mch_results,mch_matches,gam_games"
" WHERE mch_results.UsrCod=%ld"
"%s" // Match subquery
" AND mch_results.MchCod=mch_matches.MchCod"
"%s" // Games subquery
" AND mch_matches.GamCod=gam_games.GamCod"
" AND gam_games.CrsCod=%ld" // Extra check
" AND gam_games.GamCod IN (%s)"
" ORDER BY mch_matches.Title",
UsrDat->UsrCod,
Gbl.Hierarchy.Crs.CrsCod,
GamesSelectedCommas);
MchSubQuery,
GamSubQuery,
Gbl.Hierarchy.Crs.CrsCod);
free (GamSubQuery);
free (MchSubQuery);
/***** Show user's data *****/
HTM_TR_Begin (NULL);
@ -725,7 +896,7 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
if (ShowResultThisMatch)
HTM_Unsigned (NumQstsInThisResult);
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
/* Write number of questions not blank */
@ -733,7 +904,7 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
if (ShowResultThisMatch)
HTM_Unsigned (NumQstsNotBlankInThisResult);
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
/* Write score */
@ -741,7 +912,7 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
if (ShowResultThisMatch)
HTM_Double (ScoreInThisResult);
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
/* Write average score per question */
@ -751,7 +922,7 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
(double) NumQstsInThisResult :
0.0);
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
/* Write grade over maximum grade */
@ -763,15 +934,15 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
TotalGrade += Grade;
}
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
/* Link to show this result */
HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd);
if (ShowResultThisMatch)
{
Gam_SetParamCurrentGamCod (Match.GamCod); // Used to pass parameter
Mch_SetParamCurrentMchCod (Match.MchCod); // Used to pass parameter
Gam_SetCurrentGamCod (Match.GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match.MchCod); // Used to pass parameter
switch (MeOrOther)
{
case Usr_ME:
@ -788,7 +959,7 @@ static void McR_ShowMchResults (Usr_MeOrOther_t MeOrOther,
Frm_EndForm ();
}
else
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_result);
Ico_PutIconOff ("eye-slash.svg",Txt_Hidden_results);
HTM_TD_End ();
HTM_TR_End ();
@ -876,7 +1047,6 @@ static void McR_ShowMchResultsSummaryRow (unsigned NumResults,
void McR_ShowOneMchResult (void)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Match_result;
extern const char *Txt_The_user_does_not_exist;
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];

View File

@ -37,12 +37,15 @@
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void McR_SelUsrsToViewUsrsMchRes (void);
void McR_SelUsrsToViewMchResults (void);
void McR_ShowMyMchRes (void);
void McR_ShowMyMchResInGame (void);
void McR_GetUsrsAndShowMchRes (void);
void McR_ShowUsrsMchResultsInGame (void);
void McR_ShowMyMchResultsInCrs (void);
void McR_ShowMyMchResultsInGam (void);
void McR_ShowMyMchResultsInMch (void);
void McR_ShowAllMchResultsInCrs (void);
void McR_ShowAllMchResultsInGam (void);
void McR_ShowAllMchResultsInMch (void);
void McR_ShowOneMchResult (void);
void McR_GetMatchResultQuestionsFromDB (long MchCod,long UsrCod,

View File

@ -14519,25 +14519,25 @@ const char *Txt_hidden_documents =
"documentos ocultos";
#endif
const char *Txt_Hidden_result =
const char *Txt_Hidden_results =
#if L==1 // ca
"Resultat ocult";
"Resultats ocults";
#elif L==2 // de
"Ausgeblendet Ergebnis";
"Ausgeblendet Ergebnisse";
#elif L==3 // en
"Hidden result";
"Hidden results";
#elif L==4 // es
"Resultado oculto";
"Resultados ocultos";
#elif L==5 // fr
"R&eacute;sultat cach&eacute;";
"R&eacute;sultats cach&eacute;s";
#elif L==6 // gn
"Resultado oculto"; // Okoteve traducción
"Resultados ocultos"; // Okoteve traducción
#elif L==7 // it
"Risultato nascosto";
"Risultati nascosti";
#elif L==8 // pl
"Ukryte wynik";
"Ukryte wynik&oacute;w";
#elif L==9 // pt
"Resultado oculto";
"Resultados ocultos";
#endif
const char *Txt_Hidden_survey =
@ -33360,6 +33360,48 @@ const char *Txt_Results =
"Resultados";
#endif
const char *Txt_Results_of_game_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Resultats del joc %s";
#elif L==2 // de
"Ergebnisse von Spiel %s";
#elif L==3 // en
"Results of game %s";
#elif L==4 // es
"Resultados del juego %s";
#elif L==5 // fr
"R&eacute;sultats du jeu %s";
#elif L==6 // gn
"Resultados del juego %s"; // Okoteve traducción
#elif L==7 // it
"Risultati del gioco %s";
#elif L==8 // pl
"Wyniki gry %s";
#elif L==9 // pt
"Resultados do jogo %s";
#endif
const char *Txt_Results_of_match_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Resultats de la partida %s";
#elif L==2 // de
"Ergebnisse von Spiel %s";
#elif L==3 // en
"Results of match %s";
#elif L==4 // es
"Resultados de la partida %s";
#elif L==5 // fr
"R&eacute;sultats du match %s";
#elif L==6 // gn
"Resultados de la partida %s"; // Okoteve traducción
#elif L==7 // it
"Risultati della partita %s";
#elif L==8 // pl
"Wyniki mecz %s";
#elif L==9 // pt
"Resultados do jogo %s";
#endif
const char *Txt_results_per_page =
#if L==1 // ca
"resultats per p&agrave;gina";
@ -52989,25 +53031,25 @@ const char *Txt_Visible_by_BR_the_student =
"Vis&iacute;vel pelo<br />estudante?";
#endif
const char *Txt_Visible_result =
const char *Txt_Visible_results =
#if L==1 // ca
"Resultat visible";
"Resultats visibles";
#elif L==2 // de
"Sichtbare Ergebnis";
"Sichtbar Ergebnisse";
#elif L==3 // en
"Visible result";
"Visible results";
#elif L==4 // es
"Resultado visible";
"Resultados visibles";
#elif L==5 // fr
"R&eacute;sultat visible";
"R&eacute;sultats visible";
#elif L==6 // gn
"Resultado visible"; // Okoteve traducción
"Resultados visibles"; // Okoteve traducción
#elif L==7 // it
"Risultato visibile";
"Risultati visibili";
#elif L==8 // pl
"Widoczny wynik";
"Widoczne wynik&oacute;w";
#elif L==9 // pt
"Resultado vis&iacute;vel";
"Resultados vis&iacute;veis";
#endif
const char *Txt_Visible_MALE_PLURAL =