From 49d0c448479a66e5b647c7396bddbd18f200918b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Sun, 29 Sep 2019 22:38:32 +0200 Subject: [PATCH] Version19.21 --- swad_changelog.h | 3 +- swad_game.c | 50 +++++++++++------ swad_game.h | 3 + swad_match.c | 132 ++++++++++++++++++++++++++++---------------- swad_match.h | 1 + swad_match_result.c | 9 +-- 6 files changed, 128 insertions(+), 70 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index 1ab9dd3eb..b92f0f0f9 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -471,10 +471,11 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.20 (2019-09-29)" +#define Log_PLATFORM_VERSION "SWAD 19.21 (2019-09-29)" #define CSS_FILE "swad19.15.css" #define JS_FILE "swad19.15.js" /* + Version 19.21: Sep 29, 2019 Code refactoring in games and matches. (246674 lines) Version 19.20: Sep 29, 2019 Code refactoring in games and matches. (246631 lines) 14 changes necessary in database: UPDATE actions SET Txt='Solicitar eliminación partida' WHERE ActCod='1783' AND Language='es'; diff --git a/swad_game.c b/swad_game.c index f8b20c0d3..fdd600ccb 100644 --- a/swad_game.c +++ b/swad_game.c @@ -100,7 +100,6 @@ static void Gam_WriteAuthor (struct Game *Game); static void Gam_PutFormsToRemEditOneGame (const struct Game *Game, const char *Anchor); -static long Gam_GetParams (void); static void Gam_PutHiddenParamOrder (void); static void Gam_GetParamOrder (void); @@ -135,6 +134,8 @@ static void Gam_ExchangeQuestions (long GamCod, static bool Gam_GetNumMchsGameAndCheckIfEditable (struct Game *Game); +static long Gam_GetParamCurrentGamCod (void); + /*****************************************************************************/ /***************************** List all games ********************************/ /*****************************************************************************/ @@ -389,7 +390,6 @@ void Gam_ShowOneGame (long GamCod, /***** Get data of this game *****/ Game.GamCod = GamCod; Gam_GetDataOfGameByCod (&Game); - Gam_CurrentGamCod = Game.GamCod; // Used as parameter in contextual links /***** Set anchor string *****/ Frm_SetAnchorStr (Game.GamCod,&Anchor); @@ -446,7 +446,7 @@ void Gam_ShowOneGame (long GamCod, fprintf (Gbl.F.Out,"\">"); /* Game title */ - Gam_CurrentGamCod = GamCod; + Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter Lay_StartArticle (Anchor); Frm_StartForm (ActSeeGam); Gam_PutParams (); @@ -473,7 +473,7 @@ void Gam_ShowOneGame (long GamCod, fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd); fprintf (Gbl.F.Out,"\">"); - Gam_CurrentGamCod = GamCod; + Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter Frm_StartForm (ActSeeGam); Gam_PutParams (); Frm_LinkFormSubmit (Txt_Matches, @@ -566,6 +566,8 @@ void Gam_PutHiddenParamGameOrder (void) static void Gam_PutFormsToRemEditOneGame (const struct Game *Game, const char *Anchor) { + Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter + /***** Put icon to remove game *****/ Ico_PutContextualIconToRemove (ActReqRemGam,Gam_PutParams); @@ -586,8 +588,11 @@ static void Gam_PutFormsToRemEditOneGame (const struct Game *Game, void Gam_PutParams (void) { - if (Gam_CurrentGamCod > 0) - Gam_PutParamGameCod (Gam_CurrentGamCod); + long CurrentGamCod = Gam_GetParamCurrentGamCod (); + + if (CurrentGamCod > 0) + Gam_PutParamGameCod (CurrentGamCod); + Gam_PutHiddenParamOrder (); Grp_PutParamWhichGrps (); Pag_PutHiddenParamPagNum (Pag_GAMES,Gbl.Games.CurrentPage); @@ -597,7 +602,7 @@ void Gam_PutParams (void) /******************* Get parameters used to edit a game **********************/ /*****************************************************************************/ -static long Gam_GetParams (void) +long Gam_GetParams (void) { /***** Get other parameters *****/ Gam_GetParamOrder (); @@ -913,7 +918,7 @@ void Gam_AskRemGame (void) Lay_ShowErrorAndExit ("You can not remove this game."); /***** Show question and button to remove game *****/ - Gam_CurrentGamCod = Game.GamCod; + Gam_SetParamCurrentGamCod (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, @@ -1111,7 +1116,7 @@ void Gam_RequestCreatOrEditGame (void) } /***** Start form *****/ - Gam_CurrentGamCod = Game.GamCod; + Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter Frm_StartForm (ItsANewGame ? ActNewGam : ActChgGam); Gam_PutParams (); @@ -1337,7 +1342,7 @@ void Gam_RequestNewQuestion (void) if (Gam_GetNumMchsGameAndCheckIfEditable (&Game)) { /***** Show form to create a new question in this game *****/ - Gam_CurrentGamCod = Game.GamCod; + Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter Tst_ShowFormAskSelectTstsForGame (); } @@ -1364,7 +1369,7 @@ void Gam_ListTstQuestionsToSelect (void) if (Gam_GetNumMchsGameAndCheckIfEditable (&Game)) { /***** List several test questions for selection *****/ - Gam_CurrentGamCod = Game.GamCod; + Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter Tst_ListQuestionsToSelect (); } } @@ -1573,7 +1578,7 @@ static void Gam_ListGameQuestions (struct Game *Game) Game->GamCod); /***** Start box *****/ - Gam_CurrentGamCod = Game->GamCod; + Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter Box_StartBox (NULL,Txt_Questions,ICanEditGames ? Gam_PutIconToAddNewQuestions : NULL, Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE); @@ -1674,13 +1679,12 @@ static void Gam_ListOneOrMoreQuestionsForEdition (long GamCod,unsigned NumQsts, QstCod = Str_ConvertStrCodToLongCod (row[1]); /***** Icons *****/ - Gam_CurrentGamCod = GamCod; + Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter Gam_CurrentQstInd = QstInd; fprintf (Gbl.F.Out,"" "",Gbl.RowEvenOdd); /* Put icon to remove the question */ - Gam_CurrentGamCod = GamCod; Frm_StartForm (ActReqRemGamQst); Gam_PutParams (); Gam_PutParamQstInd (QstInd); @@ -1951,7 +1955,7 @@ void Gam_RequestRemoveQst (void) QstInd = Gam_GetParamQstInd (); /***** Show question and button to remove question *****/ - Gam_CurrentGamCod = Game.GamCod; + Gam_SetParamCurrentGamCod (Game.GamCod); // Used to pass parameter Gam_CurrentQstInd = QstInd; Ale_ShowAlertAndButton (ActRemGamQst,NULL,NULL,Gam_PutParamsOneQst, Btn_REMOVE_BUTTON,Txt_Remove_question, @@ -2206,7 +2210,7 @@ void Gam_PutButtonNewMatch (long GamCod) { extern const char *Txt_New_match; - Gam_CurrentGamCod = GamCod; + Gam_SetParamCurrentGamCod (GamCod); // Used to pass parameter Frm_StartFormAnchor (ActReqNewMch,Mch_NEW_MATCH_SECTION_ID); Gam_PutParams (); Btn_PutConfirmButton (Txt_New_match); @@ -2516,3 +2520,17 @@ void Gam_ShowTstTagsPresentInAGame (long GamCod) /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); } + +/*****************************************************************************/ +/**************** Access to variable used to pass parameter ******************/ +/*****************************************************************************/ + +void Gam_SetParamCurrentGamCod (long GamCod) + { + Gam_CurrentGamCod = GamCod; + } + +static long Gam_GetParamCurrentGamCod (void) + { + return Gam_CurrentGamCod; + } diff --git a/swad_game.h b/swad_game.h index dfc4ddd81..c20867610 100644 --- a/swad_game.h +++ b/swad_game.h @@ -80,6 +80,7 @@ void Gam_PutHiddenParamGameOrder (void); void Gam_RequestCreatOrEditGame (void); void Gam_PutParams (void); +long Gam_GetParams (void); void Gam_GetListGames (void); void Gam_GetDataOfGameByCod (struct Game *Gam); @@ -127,4 +128,6 @@ float Gam_GetNumQstsPerCrsGame (Hie_Level_t Scope); void Gam_ShowTstTagsPresentInAGame (long GamCod); +void Gam_SetParamCurrentGamCod (long GamCod); + #endif diff --git a/swad_match.c b/swad_match.c index 62e31ee3a..94b2eb5ec 100644 --- a/swad_match.c +++ b/swad_match.c @@ -137,7 +137,8 @@ static void Mch_RemoveMatchFromTable (long MchCod,const char *TableName); static void Mch_RemoveMatchesInGameFromTable (long GamCod,const char *TableName); static void Mch_RemoveMatchInCourseFromTable (long CrsCod,const char *TableName); -static void Mch_PutParams (void); +static void Mch_PutParamsEdit (void); +static void Mch_PutParamsPlay (void); static void Mch_PutFormNewMatch (struct Game *Game); static void Mch_ShowLstGrpsToCreateMatch (void); @@ -205,6 +206,9 @@ 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 void Mch_SetParamCurrentMchCod (long MchCod); +static long Mch_GetParamCurrentMchCod (void); + /*****************************************************************************/ /************************* List the matches of a game ************************/ /*****************************************************************************/ @@ -213,7 +217,6 @@ void Mch_ListMatches (struct Game *Game,bool PutFormNewMatch) { extern const char *Hlp_ASSESSMENT_Games_matches; extern const char *Txt_Matches; - extern long Gam_CurrentGamCod; // Used as parameter in contextual links; char *SubQuery; MYSQL_RES *mysql_res; unsigned NumMatches; @@ -261,7 +264,7 @@ void Mch_ListMatches (struct Game *Game,bool PutFormNewMatch) free ((void *) SubQuery); /***** Start box *****/ - Gam_CurrentGamCod = Game->GamCod; + Gam_SetParamCurrentGamCod (Game->GamCod); // Used to pass parameter Box_StartBox (NULL,Txt_Matches,Mch_PutIconToPlayNewMatch, Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE); @@ -514,9 +517,10 @@ static void Mch_ListOneOrMoreMatchesIcons (const struct Match *Match) fprintf (Gbl.F.Out,"",Gbl.RowEvenOdd); /***** Put icon to remove the match *****/ - Mch_CurrentMchCod = Match->MchCod; + Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter + Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter Frm_StartForm (ActReqRemMch); - Mch_PutParams (); + Mch_PutParamsEdit (); Ico_PutIconRemove (); Frm_EndForm (); @@ -684,9 +688,9 @@ static void Mch_ListOneOrMoreMatchesStatus (const struct Match *Match,unsigned N if (ICanPlayThisMatchBasedOnGrps) { /* Icon to play as student */ - Mch_CurrentMchCod = Match->MchCod; + Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter Lay_PutContextualLinkOnlyIcon (ActJoiMch,NULL, - Mch_PutParams, + Mch_PutParamsPlay, Match->Status.QstInd < Mch_AFTER_LAST_QUESTION ? "play.svg" : "flag-checkered.svg", Txt_Play); @@ -696,9 +700,9 @@ static void Mch_ListOneOrMoreMatchesStatus (const struct Match *Match,unsigned N case Rol_TCH: case Rol_SYS_ADM: /* Icon to resume */ - Mch_CurrentMchCod = Match->MchCod; + Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter Lay_PutContextualLinkOnlyIcon (ActResMch,NULL, - Mch_PutParams, + Mch_PutParamsPlay, Match->Status.QstInd < Mch_AFTER_LAST_QUESTION ? "play.svg" : "flag-checkered.svg", Txt_Resume); @@ -731,8 +735,10 @@ static void Mch_ListOneOrMoreMatchesResult (const struct Match *Match, /* Match result visible or hidden? */ if (Match->Status.ShowUsrResults) { + Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter + Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter Frm_StartForm (ActSeeOneMchResMe); - Mch_PutParamMchCod (Match->MchCod); + Mch_PutParamsEdit (); Ico_PutIconLink ("tasks.svg",Txt_Match_result); Frm_EndForm (); } @@ -744,9 +750,10 @@ static void Mch_ListOneOrMoreMatchesResult (const struct Match *Match, case Rol_TCH: case Rol_SYS_ADM: /* Match result visible or hidden? */ - Mch_CurrentMchCod = Match->MchCod; + Gam_SetParamCurrentGamCod (Match->GamCod); // Used to pass parameter + Mch_SetParamCurrentMchCod (Match->MchCod); // Used to pass parameter Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, - Mch_PutParams, + Mch_PutParamsEdit, Match->Status.ShowUsrResults ? "eye.svg" : "eye-slash.svg", Match->Status.ShowUsrResults ? Txt_Visible_result : @@ -765,14 +772,11 @@ static void Mch_ListOneOrMoreMatchesResult (const struct Match *Match, void Mch_ToggleVisibilResultsMchUsr (void) { + struct Game Game; struct Match Match; - /***** Get game code *****/ - if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L) - Lay_ShowErrorAndExit ("Code of match is missing."); - - /***** Get data of the match and the game from database *****/ - Mch_GetDataOfMatchByCod (&Match); + /***** Get and check parameters *****/ + Mch_GetAndCheckParameters (&Game,&Match); /***** Toggle visibility of match results *****/ Match.Status.ShowUsrResults = !Match.Status.ShowUsrResults; @@ -891,19 +895,16 @@ void Mch_RequestRemoveMatch (void) { extern const char *Txt_Do_you_really_want_to_remove_the_match_X; extern const char *Txt_Remove_match; + struct Game Game; struct Match Match; - /***** Get parameters *****/ - /* Get match code */ - if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L) - Lay_ShowErrorAndExit ("Code of match is missing."); - - /***** Get data of the match from database *****/ - Mch_GetDataOfMatchByCod (&Match); + /***** Get and check parameters *****/ + Mch_GetAndCheckParameters (&Game,&Match); /***** Show question and button to remove question *****/ - Mch_CurrentMchCod = Match.MchCod; - Ale_ShowAlertAndButton (ActRemMch,NULL,NULL,Mch_PutParams, + Gam_SetParamCurrentGamCod (Match.GamCod); // Used to pass parameter + Mch_SetParamCurrentMchCod (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); @@ -922,24 +923,11 @@ void Mch_RequestRemoveMatch (void) void Mch_RemoveMatch (void) { extern const char *Txt_Match_X_removed; - struct Match Match; struct Game Game; + struct Match Match; - /***** Get parameters *****/ - /* Get match code */ - if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L) - Lay_ShowErrorAndExit ("Code of match is missing."); - - /***** Get data of the match from database *****/ - Mch_GetDataOfMatchByCod (&Match); - if (Match.MchCod < 0) - Lay_ShowErrorAndExit ("The match to be removed does not exist."); - - /***** Ensure that the match belongs to this course *****/ - Game.GamCod = Match.GamCod; - Gam_GetDataOfGameByCod (&Game); - if (Game.CrsCod != Gbl.Hierarchy.Crs.CrsCod) - Lay_ShowErrorAndExit ("Match does not belong to this course."); + /***** Get and check parameters *****/ + Mch_GetAndCheckParameters (&Game,&Match); /***** Remove the match from all database tables *****/ Mch_RemoveMatchFromAllTables (Match.MchCod); @@ -1072,11 +1060,22 @@ static void Mch_RemoveMatchInCourseFromTable (long CrsCod,const char *TableName) /*********************** Params used to edit a match *************************/ /*****************************************************************************/ -static void Mch_PutParams (void) +static void Mch_PutParamsEdit (void) { - if (Mch_CurrentMchCod > 0) - Mch_PutParamMchCod (Mch_CurrentMchCod); - Grp_PutParamWhichGrps (); + Gam_PutParams (); + Mch_PutParamsPlay (); + } + +/*****************************************************************************/ +/*********************** Params used to edit a match *************************/ +/*****************************************************************************/ + +static void Mch_PutParamsPlay (void) + { + long CurrentMchCod = Mch_GetParamCurrentMchCod (); + + if (CurrentMchCod > 0) + Mch_PutParamMchCod (CurrentMchCod); } /*****************************************************************************/ @@ -1088,6 +1087,30 @@ void Mch_PutParamMchCod (long MchCod) Par_PutHiddenParamLong ("MchCod",MchCod); } +/*****************************************************************************/ +/************************** Get and check parameters *************************/ +/*****************************************************************************/ + +void Mch_GetAndCheckParameters (struct Game *Game,struct Match *Match) + { + /***** Get parameters *****/ + /* Get parameters of game */ + if ((Game->GamCod = Gam_GetParams ()) == -1L) + Lay_ShowErrorAndExit ("Code of game is missing."); + Gam_GetDataOfGameByCod (Game); + + /* Get match code */ + if ((Match->MchCod = Mch_GetParamMchCod ()) == -1L) + Lay_ShowErrorAndExit ("Code of match is missing."); + Mch_GetDataOfMatchByCod (Match); + + /***** Ensure parameters are correct *****/ + if (Game->GamCod != Match->GamCod) + Lay_ShowErrorAndExit ("Wrong game code."); + if (Game->CrsCod != Gbl.Hierarchy.Crs.CrsCod) + Lay_ShowErrorAndExit ("Match does not belong to this course."); + } + /*****************************************************************************/ /********************* Get parameter with code of match **********************/ /*****************************************************************************/ @@ -3016,3 +3039,18 @@ static void Mch_DrawBarNumUsrs (unsigned NumAnswerersAns,unsigned NumAnswerersQs /***** End container *****/ fprintf (Gbl.F.Out,""); } + +/*****************************************************************************/ +/**************** Access to variable used to pass parameter ******************/ +/*****************************************************************************/ + +static void Mch_SetParamCurrentMchCod (long MchCod) + { + Mch_CurrentMchCod = MchCod; + } + +static long Mch_GetParamCurrentMchCod (void) + { + return Mch_CurrentMchCod; + } + diff --git a/swad_match.h b/swad_match.h index 13a96a416..082bfca75 100644 --- a/swad_match.h +++ b/swad_match.h @@ -89,6 +89,7 @@ void Mch_RemoveMatchesInGameFromAllTables (long GamCod); void Mch_RemoveMatchInCourseFromAllTables (long CrsCod); void Mch_PutParamMchCod (long MchCod); +void Mch_GetAndCheckParameters (struct Game *Game,struct Match *Match); long Mch_GetParamMchCod (void); void Mch_CreateNewMatchTch (void); diff --git a/swad_match_result.c b/swad_match_result.c index e2d89196b..afda8d91f 100644 --- a/swad_match_result.c +++ b/swad_match_result.c @@ -653,6 +653,7 @@ void Mch_ShowOneMchResult (void) extern const char *Txt_Score; extern const char *Txt_out_of_PART_OF_A_SCORE; extern const char *Txt_Tags; + struct Game Game; struct Match Match; Usr_MeOrOther_t MeOrOther; struct UsrData *UsrDat; @@ -668,12 +669,8 @@ void Mch_ShowOneMchResult (void) bool ICanViewResult; bool ICanViewScore; - /***** Get match code *****/ - if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L) - Lay_ShowErrorAndExit ("Code of match is missing."); - - /***** Get data of the match from database *****/ - Mch_GetDataOfMatchByCod (&Match); + /***** Get and check parameters *****/ + Mch_GetAndCheckParameters (&Game,&Match); /***** Pointer to user's data *****/ MeOrOther = (Gbl.Action.Act == ActSeeOneMchResMe) ? Usr_ME :