diff --git a/js/swad18.123.js b/js/swad18.130.2.js similarity index 99% rename from js/swad18.123.js rename to js/swad18.130.2.js index 812326879..410e5c2ec 100644 --- a/js/swad18.123.js +++ b/js/swad18.130.2.js @@ -522,7 +522,7 @@ function refreshGame () { objXMLHttpReqGam = AJAXCreateObject(); if (objXMLHttpReqGam) { var RefreshParams = RefreshParamNxtActGam + '&' + - RefreshParamGamCod + '&' + + RefreshParamMchCod + '&' + RefreshParamIdSes; objXMLHttpReqGam.onreadystatechange = readGameData; // onreadystatechange must be lowercase diff --git a/swad_action.c b/swad_action.c index 581df434f..49fdb3640 100644 --- a/swad_action.c +++ b/swad_action.c @@ -613,9 +613,8 @@ Assessment: 457. ActNxtMch Show next question when playing a game (by a teacher) NEW. ActShoMch Show finished match results - NEW. ActPlyMchStd Play a game (by a student) - NEW. ActGamStdCurQst Show current question when playing a game (by a student) - NEW. ActRefGamStd Refresh current question when playing a game (by a student) + NEW. ActPlyMchStd Show current question when playing a game (by a student) + NEW. ActRefMchStd Refresh current question when playing a game (by a student) 459. ActAnsGam Answer a game 460. ActFrmNewGam Form to create a new game @@ -2153,9 +2152,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActNxtMch */{1672,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,NULL ,Gam_NextStatusMatch ,NULL}, /* ActShoMch */{1786,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ShowFinishedMatchResults ,NULL}, - /* ActPlyMchStd */{1779,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_PlayMatchStd ,NULL}, - /* ActGamStdCurQst */{1780,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_ShowNewMatchToMeAsStd ,NULL}, - /* ActRefGamStd */{1782,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Gam_GetMatchBeingPlayed ,Gam_RefreshCurrentMatchStd ,NULL}, + /* ActPlyMchStd */{1780,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Gam_GetMatchBeingPlayed ,Gam_ShowNewMatchToMeAsStd ,NULL}, + /* ActRefMchStd */{1782,-1,TabUnk,ActSeeAllGam ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Gam_GetMatchBeingPlayed ,Gam_RefreshCurrentMatchStd ,NULL}, /* ActAnsGam */{1651,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReceiveGameAnswers ,NULL}, /* ActFrmNewGam */{1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestCreatOrEditGame ,NULL}, @@ -4987,10 +4985,10 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un ActReqUnlAllPrj, // #1776 ActLckAllPrj, // #1777 ActUnlAllPrj, // #1778 - ActPlyMchStd, // #1779 - ActGamStdCurQst, // #1780 + -1, // #1779 (obsolete action) + ActPlyMchStd, // #1780 -1, // #1781 (obsolete action) - ActRefGamStd, // #1782 + ActRefMchStd, // #1782 ActReqRemMch, // #1783 ActRemMch, // #1784 ActResMch, // #1785 diff --git a/swad_action.h b/swad_action.h index 5aa910253..ee96c70fb 100644 --- a/swad_action.h +++ b/swad_action.h @@ -64,7 +64,7 @@ typedef enum typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#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 + 168 + 437 + 176 + 169 + 16 + 68) #define Act_MAX_ACTION_COD 1787 @@ -615,53 +615,52 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActNxtMch (ActChgCrsTT1stDay + 122) #define ActShoMch (ActChgCrsTT1stDay + 123) #define ActPlyMchStd (ActChgCrsTT1stDay + 124) -#define ActGamStdCurQst (ActChgCrsTT1stDay + 125) -#define ActRefGamStd (ActChgCrsTT1stDay + 126) -#define ActAnsGam (ActChgCrsTT1stDay + 127) -#define ActFrmNewGam (ActChgCrsTT1stDay + 128) -#define ActEdiOneGam (ActChgCrsTT1stDay + 129) -#define ActNewGam (ActChgCrsTT1stDay + 130) -#define ActChgGam (ActChgCrsTT1stDay + 131) -#define ActReqRemGam (ActChgCrsTT1stDay + 132) -#define ActRemGam (ActChgCrsTT1stDay + 133) -#define ActReqRstGam (ActChgCrsTT1stDay + 134) -#define ActRstGam (ActChgCrsTT1stDay + 135) -#define ActHidGam (ActChgCrsTT1stDay + 136) -#define ActShoGam (ActChgCrsTT1stDay + 137) -#define ActAddOneGamQst (ActChgCrsTT1stDay + 138) -#define ActGamLstTstQst (ActChgCrsTT1stDay + 139) -#define ActAddTstQstToGam (ActChgCrsTT1stDay + 140) -#define ActReqRemGamQst (ActChgCrsTT1stDay + 141) -#define ActRemGamQst (ActChgCrsTT1stDay + 142) -#define ActUp_GamQst (ActChgCrsTT1stDay + 143) -#define ActDwnGamQst (ActChgCrsTT1stDay + 144) +#define ActRefMchStd (ActChgCrsTT1stDay + 125) +#define ActAnsGam (ActChgCrsTT1stDay + 126) +#define ActFrmNewGam (ActChgCrsTT1stDay + 127) +#define ActEdiOneGam (ActChgCrsTT1stDay + 128) +#define ActNewGam (ActChgCrsTT1stDay + 129) +#define ActChgGam (ActChgCrsTT1stDay + 130) +#define ActReqRemGam (ActChgCrsTT1stDay + 131) +#define ActRemGam (ActChgCrsTT1stDay + 132) +#define ActReqRstGam (ActChgCrsTT1stDay + 133) +#define ActRstGam (ActChgCrsTT1stDay + 134) +#define ActHidGam (ActChgCrsTT1stDay + 135) +#define ActShoGam (ActChgCrsTT1stDay + 136) +#define ActAddOneGamQst (ActChgCrsTT1stDay + 137) +#define ActGamLstTstQst (ActChgCrsTT1stDay + 138) +#define ActAddTstQstToGam (ActChgCrsTT1stDay + 139) +#define ActReqRemGamQst (ActChgCrsTT1stDay + 140) +#define ActRemGamQst (ActChgCrsTT1stDay + 141) +#define ActUp_GamQst (ActChgCrsTT1stDay + 142) +#define ActDwnGamQst (ActChgCrsTT1stDay + 143) -#define ActSeeSvy (ActChgCrsTT1stDay + 145) -#define ActAnsSvy (ActChgCrsTT1stDay + 146) -#define ActFrmNewSvy (ActChgCrsTT1stDay + 147) -#define ActEdiOneSvy (ActChgCrsTT1stDay + 148) -#define ActNewSvy (ActChgCrsTT1stDay + 149) -#define ActChgSvy (ActChgCrsTT1stDay + 150) -#define ActReqRemSvy (ActChgCrsTT1stDay + 151) -#define ActRemSvy (ActChgCrsTT1stDay + 152) -#define ActReqRstSvy (ActChgCrsTT1stDay + 153) -#define ActRstSvy (ActChgCrsTT1stDay + 154) -#define ActHidSvy (ActChgCrsTT1stDay + 155) -#define ActShoSvy (ActChgCrsTT1stDay + 156) -#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 157) -#define ActRcvSvyQst (ActChgCrsTT1stDay + 158) -#define ActReqRemSvyQst (ActChgCrsTT1stDay + 159) -#define ActRemSvyQst (ActChgCrsTT1stDay + 160) +#define ActSeeSvy (ActChgCrsTT1stDay + 144) +#define ActAnsSvy (ActChgCrsTT1stDay + 145) +#define ActFrmNewSvy (ActChgCrsTT1stDay + 146) +#define ActEdiOneSvy (ActChgCrsTT1stDay + 147) +#define ActNewSvy (ActChgCrsTT1stDay + 148) +#define ActChgSvy (ActChgCrsTT1stDay + 149) +#define ActReqRemSvy (ActChgCrsTT1stDay + 150) +#define ActRemSvy (ActChgCrsTT1stDay + 151) +#define ActReqRstSvy (ActChgCrsTT1stDay + 152) +#define ActRstSvy (ActChgCrsTT1stDay + 153) +#define ActHidSvy (ActChgCrsTT1stDay + 154) +#define ActShoSvy (ActChgCrsTT1stDay + 155) +#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 156) +#define ActRcvSvyQst (ActChgCrsTT1stDay + 157) +#define ActReqRemSvyQst (ActChgCrsTT1stDay + 158) +#define ActRemSvyQst (ActChgCrsTT1stDay + 159) -#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 161) -#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 162) -#define ActEdiExaAnn (ActChgCrsTT1stDay + 163) -#define ActRcvExaAnn (ActChgCrsTT1stDay + 164) -#define ActPrnExaAnn (ActChgCrsTT1stDay + 165) -#define ActReqRemExaAnn (ActChgCrsTT1stDay + 166) -#define ActRemExaAnn (ActChgCrsTT1stDay + 167) -#define ActHidExaAnn (ActChgCrsTT1stDay + 168) -#define ActShoExaAnn (ActChgCrsTT1stDay + 169) +#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 160) +#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 161) +#define ActEdiExaAnn (ActChgCrsTT1stDay + 162) +#define ActRcvExaAnn (ActChgCrsTT1stDay + 163) +#define ActPrnExaAnn (ActChgCrsTT1stDay + 164) +#define ActReqRemExaAnn (ActChgCrsTT1stDay + 165) +#define ActRemExaAnn (ActChgCrsTT1stDay + 166) +#define ActHidExaAnn (ActChgCrsTT1stDay + 167) +#define ActShoExaAnn (ActChgCrsTT1stDay + 168) /*****************************************************************************/ /******************************** Files tab **********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 10c0b5a30..58eeac5ae 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -458,10 +458,14 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.130.1 (2019-07-04)" +#define Log_PLATFORM_VERSION "SWAD 18.130.2 (2019-07-04)" #define CSS_FILE "swad18.123.css" -#define JS_FILE "swad18.123.js" +#define JS_FILE "swad18.130.2.js" /* + Version 18.130.2: Jul 04, 2019 Changes in listing of games and matches for students. (243429 lines) + 1 change necessary in database: +UPDATE actions SET Obsolete='Y' WHERE ActCod=1779; + Version 18.130.1: Jul 04, 2019 Changes in listing of games. (243505 lines) Version 18.130: Jul 04, 2019 Changes in listing of games. (243436 lines) 1 change necessary in database: diff --git a/swad_game.c b/swad_game.c index 4452eafd4..426b9633f 100644 --- a/swad_game.c +++ b/swad_game.c @@ -108,7 +108,7 @@ unsigned Gam_CurrentQstInd = 0; // Used as parameter in contextual links /*****************************************************************************/ static void Gam_ListAllGames (void); -static bool Gam_CheckIfICanCreateGame (void); +static bool Gam_CheckIfICanEditGames (void); static void Gam_PutIconsListGames (void); static void Gam_PutIconToCreateNewGame (void); static void Gam_PutButtonToCreateNewGame (void); @@ -116,8 +116,7 @@ static void Gam_PutParamsToCreateNewGame (void); static void Gam_ShowOneGame (long GamCod, bool ShowOnlyThisGame, bool ListGameQuestions, - bool PutFormNewMatch, - bool PutButtonToPlay); + bool PutFormNewMatch); static void Gam_WriteAuthor (struct Game *Game); static void Gam_PutFormsToRemEditOneGame (const struct Game *Game, @@ -170,17 +169,16 @@ static void Gam_PutParamsOneQst (void); static void Gam_ExchangeQuestions (long GamCod, unsigned QstIndTop,unsigned QstIndBottom); -static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch); +static void Gam_ListMatches (struct Game *Game,bool PutFormNewMatch); static void Gam_PutIconToPlayNewMatch (void); -static void Gam_ListOneOrMoreMatchesForEdition (struct Game *Game, +static void Gam_ListOneOrMoreMatches (struct Game *Game, unsigned NumMatches, MYSQL_RES *mysql_res); static void Gam_GetMatchDataFromRow (MYSQL_RES *mysql_res, struct Match *Match); static void Gam_PutButtonNewMatch (long GamCod); -static void Gam_PutBigButtonToPlayMatchTch (struct Game *Game); -static void Gam_PutBigButtonToPlayMatchStd (long MchCod); +static void Gam_PutFormNewMatch (struct Game *Game); static void Gam_CreateMatch (struct Match *Match); static void Gam_UpdateMatchBeingPlayed (struct Match *Match); @@ -255,8 +253,10 @@ static void Gam_ListAllGames (void) { /***** Table head *****/ Tbl_StartTableWideMargin (2); - fprintf (Gbl.F.Out,"" - ""); // Column for contextual icons + fprintf (Gbl.F.Out,""); + if (Gam_CheckIfICanEditGames ()) + fprintf (Gbl.F.Out,""); // Column for contextual icons + for (Order = (Gam_Order_t) 0; Order <= (Gam_Order_t) (Gam_NUM_ORDERS - 1); Order++) @@ -286,9 +286,8 @@ static void Gam_ListAllGames (void) NumGame++) Gam_ShowOneGame (Gbl.Games.LstGamCods[NumGame - 1], false, - false, - false, // Do not put form to start new match - false); // Do not put button to play + false, // Do not list game questions + false); // Do not put form to start new match /***** End table *****/ Tbl_EndTable (); @@ -297,7 +296,7 @@ static void Gam_ListAllGames (void) Ale_ShowAlert (Ale_INFO,Txt_No_games); /***** Button to create a new game *****/ - if (Gam_CheckIfICanCreateGame ()) + if (Gam_CheckIfICanEditGames ()) Gam_PutButtonToCreateNewGame (); /***** End box *****/ @@ -317,7 +316,7 @@ static void Gam_ListAllGames (void) /******************* Check if I can create a new game **********************/ /*****************************************************************************/ -static bool Gam_CheckIfICanCreateGame (void) +static bool Gam_CheckIfICanEditGames (void) { switch (Gbl.Usrs.Me.Role.Logged) { @@ -340,7 +339,7 @@ static bool Gam_CheckIfICanCreateGame (void) static void Gam_PutIconsListGames (void) { /***** Put icon to create a new game *****/ - if (Gam_CheckIfICanCreateGame ()) + if (Gam_CheckIfICanEditGames ()) Gam_PutIconToCreateNewGame (); /***** Put icon to show a figure *****/ @@ -404,9 +403,8 @@ void Gam_SeeOneGame (void) /***** Show game *****/ Gam_ShowOneGame (Game.GamCod, true, // Show only this game - true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false, // Do not list game questions + false); // Do not put form to start new match } /*****************************************************************************/ @@ -416,8 +414,7 @@ void Gam_SeeOneGame (void) static void Gam_ShowOneGame (long GamCod, bool ShowOnlyThisGame, bool ListGameQuestions, - bool PutFormNewMatch, - bool PutButtonToPlay) + bool PutFormNewMatch) { extern const char *Hlp_ASSESSMENT_Games; extern const char *Txt_Game; @@ -425,7 +422,6 @@ static void Gam_ShowOneGame (long GamCod, extern const char *Txt_View_game; extern const char *Txt_No_of_questions; extern const char *Txt_No_of_users; - extern const char *Txt_Play; extern const char *Txt_New_match; char *Anchor = NULL; static unsigned UniqueId = 0; @@ -453,38 +449,25 @@ static void Gam_ShowOneGame (long GamCod, fprintf (Gbl.F.Out,""); /***** Icons related to this game *****/ - fprintf (Gbl.F.Out,""); - if (Game.Status.ICanEdit) + { + fprintf (Gbl.F.Out,""); + /* Icons to remove/edit this game */ Gam_PutFormsToRemEditOneGame (&Game,Anchor); - switch (Gbl.Usrs.Me.Role.Logged) - { - case Rol_STD: - /* Icon to play match */ - Lay_PutContextualLinkOnlyIcon (ActPlyMchStd,NULL, + if (ShowOnlyThisGame) + /* Icon to start a new match */ + Lay_PutContextualLinkOnlyIcon (ActFrmNewMch,Gam_NEW_MATCH_SECTION_ID, Gam_PutParams, "play.svg", - Txt_Play); - break; - case Rol_NET: - case Rol_TCH: - if (ShowOnlyThisGame) - /* Icon to start a new match */ - Lay_PutContextualLinkOnlyIcon (ActFrmNewMch,Gam_NEW_MATCH_SECTION_ID, - Gam_PutParams, - "play.svg", - Txt_New_match); - break; - default: - break; - } + Txt_New_match); - fprintf (Gbl.F.Out,""); + fprintf (Gbl.F.Out,""); + } /***** Start date/time *****/ UniqueId++; @@ -597,22 +580,8 @@ static void Gam_ShowOneGame (long GamCod, if (ShowOnlyThisGame) { - switch (Gbl.Usrs.Me.Role.Logged) - { - case Rol_STD: - /* Put big button to play match */ - if (PutButtonToPlay) - Gam_PutBigButtonToPlayMatchStd (Game.GamCod); // TODO: Change to match !!!!!!!!!!!!!!!!!! - break; - case Rol_NET: - case Rol_TCH: - case Rol_SYS_ADM: - /* List played matches */ - Gam_ListPlayedMatches (&Game,PutFormNewMatch); - break; - default: - break; - } + /***** List matches *****/ + Gam_ListMatches (&Game,PutFormNewMatch); /***** Write questions of this game *****/ if (ListGameQuestions) @@ -649,7 +618,6 @@ static void Gam_PutFormsToRemEditOneGame (const struct Game *Game, const char *Anchor) { extern const char *Txt_Reset; - extern const char *Txt_Play; /***** Put icon to remove game *****/ Ico_PutContextualIconToRemove (ActReqRemGam,Gam_PutParams); @@ -1225,7 +1193,7 @@ static bool Gam_CheckIfSimilarGameExists (struct Game *Game) } /*****************************************************************************/ -/********************* Put a form to create a new game *********************/ +/*********************** Put a form to create a new game *********************/ /*****************************************************************************/ void Gam_RequestCreatOrEditGame (void) @@ -1255,14 +1223,14 @@ void Gam_RequestCreatOrEditGame (void) if (ItsANewGame) { /***** Put link (form) to create new game *****/ - if (!Gam_CheckIfICanCreateGame ()) + if (!Gam_CheckIfICanEditGames ()) Lay_ShowErrorAndExit ("You can not create a new game here."); /* Initialize to empty game */ Game.GamCod = -1L; Game.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; - Game.TimeUTC[Gam_START_TIME] = Gbl.StartExecutionTimeUTC; - Game.TimeUTC[Gam_END_TIME ] = Gbl.StartExecutionTimeUTC + (24 * 60 * 60); // +24 hours + Game.TimeUTC[Gam_START_TIME] = (time_t) 0; + Game.TimeUTC[Gam_END_TIME ] = (time_t) 0; Game.Title[0] = '\0'; Game.NumQsts = 0; Game.NumUsrs = 0; @@ -1314,9 +1282,6 @@ void Gam_RequestCreatOrEditGame (void) Txt_Title, Gam_MAX_CHARS_TITLE,Game.Title); - /***** Game start and end dates *****/ - // Dat_PutFormStartEndClientLocalDateTimes (Game.TimeUTC,Dat_FORM_SECONDS_ON); - /***** Game text *****/ fprintf (Gbl.F.Out,"" "" @@ -1759,8 +1724,7 @@ void Gam_RequestNewQuestion (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2287,8 +2251,7 @@ void Gam_AddTstQuestionsToGame (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2465,8 +2428,7 @@ void Gam_RequestRemoveQst (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2516,8 +2478,7 @@ void Gam_RemoveQst (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2561,8 +2522,7 @@ void Gam_MoveUpQst (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2616,8 +2576,7 @@ void Gam_MoveDownQst (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -2675,7 +2634,7 @@ static void Gam_ExchangeQuestions (long GamCod, /************************* List the matches of a game ************************/ /*****************************************************************************/ -static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch) +static void Gam_ListMatches (struct Game *Game,bool PutFormNewMatch) { extern const char *Hlp_ASSESSMENT_Games_matches; extern const char *Txt_Matches; @@ -2687,8 +2646,7 @@ static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch) /* Fill subquery for game */ if (Gbl.Crs.Grps.WhichGrps == Grp_ONLY_MY_GROUPS) { - if (asprintf (&SubQuery,"GamCod=%ld" - " AND" + if (asprintf (&SubQuery," AND" "(MchCod NOT IN" " (SELECT MchCod FROM gam_grp)" " OR" @@ -2697,16 +2655,12 @@ static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch) " FROM gam_grp,crs_grp_usr" " WHERE crs_grp_usr.UsrCod=%ld" " AND gam_grp.GrpCod=crs_grp_usr.GrpCod))", - Game->GamCod, Gbl.Usrs.Me.UsrDat.UsrCod) < 0) Lay_NotEnoughMemoryExit (); } else // Gbl.Crs.Grps.WhichGrps == Grp_ALL_GROUPS - { - if (asprintf (&SubQuery,"GamCod=%ld", - Game->GamCod) < 0) + if (asprintf (&SubQuery,"%s","") < 0) Lay_NotEnoughMemoryExit (); - } /* Make query */ NumMatches = (unsigned) DB_QuerySELECT (&mysql_res,"can not get matches", @@ -2722,8 +2676,9 @@ static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch) "ShowingAnswers," // row[ 9] "Finished" // row[10] " FROM gam_matches" - " WHERE %s" + " WHERE GamCod=%ld%s" " ORDER BY MchCod", + Game->GamCod, SubQuery); /* Free allocated memory for subquery */ @@ -2736,16 +2691,25 @@ static void Gam_ListPlayedMatches (struct Game *Game,bool PutFormNewMatch) if (NumMatches) /***** Show the table with the matches *****/ - Gam_ListOneOrMoreMatchesForEdition (Game,NumMatches,mysql_res); + Gam_ListOneOrMoreMatches (Game,NumMatches,mysql_res); /***** Free structure that stores the query result *****/ DB_FreeMySQLResult (&mysql_res); /***** Put button to play a new match in this game *****/ - if (PutFormNewMatch) - Gam_PutBigButtonToPlayMatchTch (Game); - else - Gam_PutButtonNewMatch (Game->GamCod); + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_NET: + case Rol_TCH: + case Rol_SYS_ADM: + if (PutFormNewMatch) + Gam_PutFormNewMatch (Game); // Form to fill in data and start playing a new match + else + Gam_PutButtonNewMatch (Game->GamCod); // Button to create a new match + break; + default: + break; + } /***** End box *****/ Box_EndBox (); @@ -2820,7 +2784,7 @@ static void Gam_PutIconToPlayNewMatch (void) /*********************** List game matches for edition ***********************/ /*****************************************************************************/ -static void Gam_ListOneOrMoreMatchesForEdition (struct Game *Game, +static void Gam_ListOneOrMoreMatches (struct Game *Game, unsigned NumMatches, MYSQL_RES *mysql_res) { @@ -2829,6 +2793,7 @@ static void Gam_ListOneOrMoreMatchesForEdition (struct Game *Game, extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME]; extern const char *Txt_Match; extern const char *Txt_Status; + extern const char *Txt_Play; extern const char *Txt_Resume; extern const char *Txt_Today; extern const char *Txt_View_game_results; @@ -2886,18 +2851,6 @@ static void Gam_ListOneOrMoreMatchesForEdition (struct Game *Game, Ico_PutIconRemove (); Frm_EndForm (); - /* Put icon to continue playing an unfinished match */ - /* - if (!Match.Status.Finished) - { - Gam_CurrentMchCod = Match.MchCod; - Lay_PutContextualLinkOnlyIcon (ActResMch,NULL, - Gam_PutParamCurrentMchCod, - "play.svg", - Txt_Resume); - } - */ - fprintf (Gbl.F.Out,""); /***** Number of match ******/ @@ -2968,12 +2921,32 @@ static void Gam_ListOneOrMoreMatchesForEdition (struct Game *Game, fprintf (Gbl.F.Out,"
%u/%u
", Match.Status.QstInd,Game->NumQsts); - /* Icon to resume */ - Gam_CurrentMchCod = Match.MchCod; - Lay_PutContextualLinkOnlyIcon (ActResMch,NULL, - Gam_PutParamCurrentMchCod, - "play.svg", - Txt_Resume); + switch (Gbl.Usrs.Me.Role.Logged) + { + case Rol_STD: + /* Icon to play as student */ + Gam_CurrentMchCod = Match.MchCod; + Lay_PutContextualLinkOnlyIcon (ActPlyMchStd,NULL, + Gam_PutParamCurrentMchCod, + "play.svg", + Txt_Play); + break; + case Rol_NET: + case Rol_TCH: + case Rol_DEG_ADM: + case Rol_CTR_ADM: + case Rol_INS_ADM: + case Rol_SYS_ADM: + /* Icon to resume */ + Gam_CurrentMchCod = Match.MchCod; + Lay_PutContextualLinkOnlyIcon (ActResMch,NULL, + Gam_PutParamCurrentMchCod, + "play.svg", + Txt_Resume); + break; + default: + break; + } } fprintf (Gbl.F.Out,""); @@ -3088,8 +3061,7 @@ void Gam_RequestRemoveMatch (void) Gam_ShowOneGame (Match.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -3136,8 +3108,7 @@ void Gam_RemoveMatch (void) Gam_ShowOneGame (Match.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ @@ -3174,49 +3145,15 @@ void Gam_RequestNewMatch (void) /***** Show game *****/ Gam_ShowOneGame (GamCod, true, // Show only this game - false, // Do not list questions - true, // Put form to start new match - false); // Do not put button to play - } - -/*****************************************************************************/ -/******************* Start playing a game as a student ***********************/ -/*****************************************************************************/ - -void Gam_PlayMatchStd (void) - { - struct Match Match; - bool IBelongToGroups; - - /***** Get parameters *****/ - Gam_GetParamOrder (); - Grp_GetParamWhichGrps (); - Gbl.Games.CurrentPage = Pag_GetParamPagNum (Pag_GAMES); - - /***** Get match code *****/ - if ((Match.MchCod = Gam_GetParamMatchCod ()) == -1L) - Lay_ShowErrorAndExit ("Code of match is missing."); - - /***** Get data of the match from database *****/ - Gam_GetDataOfMatchByCod (&Match); - - /***** Do I belong to valid groups to play this match? *****/ - IBelongToGroups = Gbl.Usrs.Me.IBelongToCurrentCrs && - Gam_CheckIfIPlayThisMatchBasedOnGrps (Match.MchCod); - - /***** Show game *****/ - Gam_ShowOneGame (Match.GamCod, - true, // Show only this game - false, // Do not list questions - false, // Do not put form to start new match - IBelongToGroups); // Put button to play + false, // Do not list game questions + true); // Put form to start new match } /*****************************************************************************/ /****** Put a big button to play match (start a new match) as a teacher ******/ /*****************************************************************************/ -static void Gam_PutBigButtonToPlayMatchTch (struct Game *Game) +static void Gam_PutFormNewMatch (struct Game *Game) { extern const char *Hlp_ASSESSMENT_Games_new_match; extern const char *The_ClassFormInBox[The_NUM_THEMES]; @@ -3275,31 +3212,6 @@ static void Gam_PutBigButtonToPlayMatchTch (struct Game *Game) Lay_EndSection (); } -/*****************************************************************************/ -/******** Put a big button to play match (join a match) as a student *********/ -/*****************************************************************************/ - -static void Gam_PutBigButtonToPlayMatchStd (long MchCod) - { - extern const char *Txt_Play; - - /***** Start form *****/ - Frm_StartForm (ActGamStdCurQst); - Gam_PutParamMatchCod (MchCod); - Gam_PutParamQstInd (0); // Start by first question in game - - /***** Put icon with link *****/ - Frm_LinkFormSubmit (Txt_Play,NULL,NULL); - fprintf (Gbl.F.Out,"\"%s\"", - Cfg_URL_ICON_PUBLIC,Txt_Play,Txt_Play); - fprintf (Gbl.F.Out,""); - - /***** End form *****/ - Frm_EndForm (); - } - /*****************************************************************************/ /********* Create a new match and show first question (by a teacher) *********/ /*****************************************************************************/ @@ -3811,8 +3723,7 @@ void Gam_ReceiveGameAnswers (void) Gam_ShowOneGame (Game.GamCod, true, // Show only this game true, // List game questions - false, // Do not put form to start new match - false); // Do not put button to play + false); // Do not put form to start new match } /*****************************************************************************/ diff --git a/swad_game.h b/swad_game.h index d6614a761..042402f1a 100644 --- a/swad_game.h +++ b/swad_game.h @@ -121,7 +121,7 @@ void Gam_RequestRemoveMatch (void); void Gam_RemoveMatch (void); void Gam_RequestNewMatch (void); -void Gam_PlayMatchStd (void); +// void Gam_PlayMatchStd (void); void Gam_ReceiveGameAnswers (void); void Gam_CreateAndStartNewMatch (void); diff --git a/swad_layout.c b/swad_layout.c index 8b6a12c18..09955222e 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -677,7 +677,7 @@ static void Lay_WriteScriptInit (void) case ActRemSocComGbl: RefreshNewTimeline = true; break; - case ActGamStdCurQst: + case ActPlyMchStd: RefreshGame = true; break; case ActLstClk: @@ -790,10 +790,10 @@ static void Lay_WriteScriptParamsAJAX (void) Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; /* Parameters related with game refreshing */ - case ActGamStdCurQst: + case ActPlyMchStd: fprintf (Gbl.F.Out,"var RefreshParamNxtActGam = \"act=%ld\";\n" - "var RefreshParamGamCod = \"GamCod=%ld\";\n", - Act_GetActCod (ActRefGamStd), + "var RefreshParamMchCod = \"MchCod=%ld\";\n", + Act_GetActCod (ActRefMchStd), Gbl.Games.MchCodBeingPlayed); break; /* Parameter related with clicks refreshing */