From 84bd388258d93839c4f0e450f55dd197432c9a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Thu, 26 Sep 2019 19:54:09 +0200 Subject: [PATCH] Version19.15 --- css/{swad19.3.css => swad19.15.css} | 2 - js/{swad18.130.2.js => swad19.15.js} | 66 +++++++++++++++++++++------- swad_changelog.h | 8 ++-- swad_config.h | 4 +- swad_layout.c | 40 +++++++++-------- swad_match.c | 30 ++++++++----- 6 files changed, 97 insertions(+), 53 deletions(-) rename css/{swad19.3.css => swad19.15.css} (99%) rename js/{swad18.130.2.js => swad19.15.js} (96%) diff --git a/css/swad19.3.css b/css/swad19.15.css similarity index 99% rename from css/swad19.3.css rename to css/swad19.15.css index c3ef1da81..d7d511461 100644 --- a/css/swad19.3.css +++ b/css/swad19.15.css @@ -2579,7 +2579,6 @@ a:hover img.CENTRE_PHOTO_SHOW white-space:nowrap; overflow:hidden; text-overflow:ellipsis; - border:1px solid red; } .MATCH_RIGHT { @@ -2587,7 +2586,6 @@ a:hover img.CENTRE_PHOTO_SHOW display:table; float:left; width:75%; - border:1px solid red; } .MATCH_TOP { diff --git a/js/swad18.130.2.js b/js/swad19.15.js similarity index 96% rename from js/swad18.130.2.js rename to js/swad19.15.js index a229abea9..690370241 100644 --- a/js/swad18.130.2.js +++ b/js/swad19.15.js @@ -517,31 +517,65 @@ function readConnUsrsData () { /*****************************************************************************/ // This function must be called from time to time -var objXMLHttpReqMch = false; -function refreshMatch () { - objXMLHttpReqMch = AJAXCreateObject(); - if (objXMLHttpReqMch) { +var objXMLHttpReqMchStd = false; +function refreshMatchStd () { + objXMLHttpReqMchStd = AJAXCreateObject(); + if (objXMLHttpReqMchStd) { var RefreshParams = RefreshParamNxtActMch + '&' + RefreshParamMchCod + '&' + RefreshParamIdSes; - objXMLHttpReqMch.onreadystatechange = readMatchData; // onreadystatechange must be lowercase - objXMLHttpReqMch.open('POST',ActionAJAX,true); - objXMLHttpReqMch.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); - objXMLHttpReqMch.send(RefreshParams); + objXMLHttpReqMchStd.onreadystatechange = readMatchStdData; // onreadystatechange must be lowercase + objXMLHttpReqMchStd.open('POST',ActionAJAX,true); + objXMLHttpReqMchStd.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); + objXMLHttpReqMchStd.send(RefreshParams); } } -function readMatchData () { - if (objXMLHttpReqMch.readyState == 4) { // Check if data have been received - if (objXMLHttpReqMch.status == 200) { - var htmlMatch = objXMLHttpReqMch.responseText; // Get HTML code for match +function readMatchStdData () { + if (objXMLHttpReqMchStd.readyState == 4) { // Check if data have been received + if (objXMLHttpReqMchStd.status == 200) { + var htmlMatch = objXMLHttpReqMchStd.responseText; // Get HTML code - var divGame = document.getElementById('match'); // Access to game DIV - if (divGame) - divGame.innerHTML = htmlMatch; // Update game DIV + var divMatch = document.getElementById('match'); // Access to game DIV + if (divMatch) + divMatch.innerHTML = htmlMatch; // Update game DIV // Global delay variable is set initially in swad-core - setTimeout('refreshMatch()',delayMatch); + setTimeout('refreshMatchStd()',delayMatch); + } + } +} + +/*****************************************************************************/ +/**** Automatic refresh of left part of current match question using AJAX ****/ +/*****************************************************************************/ + +//This function must be called from time to time +var objXMLHttpReqMchTch = false; +function refreshMatchTch () { + objXMLHttpReqMchTch = AJAXCreateObject(); + if (objXMLHttpReqMchTch) { + var RefreshParams = RefreshParamNxtActMch + '&' + + RefreshParamMchCod + '&' + + RefreshParamIdSes; + + objXMLHttpReqMchTch.onreadystatechange = readMatchTchData; // onreadystatechange must be lowercase + objXMLHttpReqMchTch.open('POST',ActionAJAX,true); + objXMLHttpReqMchTch.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); + objXMLHttpReqMchTch.send(RefreshParams); + } +} + +function readMatchTchData () { + if (objXMLHttpReqMchTch.readyState == 4) { // Check if data have been received + if (objXMLHttpReqMchTch.status == 200) { + var htmlMatch = objXMLHttpReqMchTch.responseText; // Get HTML code + + var divMatch = document.getElementById('match_left'); // Access to game DIV + if (divMatch) + divMatch.innerHTML = htmlMatch; // Update game DIV + // Global delay variable is set initially in swad-core + setTimeout('refreshMatchTch()',delayMatch); } } } diff --git a/swad_changelog.h b/swad_changelog.h index 8e129a2d6..c50d036f5 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -470,13 +470,13 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.14.6 (2019-09-26)" -#define CSS_FILE "swad19.3.css" -#define JS_FILE "swad18.130.2.js" +#define Log_PLATFORM_VERSION "SWAD 19.15 (2019-09-26)" +#define CSS_FILE "swad19.15.css" +#define JS_FILE "swad19.15.js" /* // Version 19.*: Sep 26, 2019 TODO: Make it impossible to edit (create/delete/move) questions from a game when it has matches. (? lines) - Version 19.15: Sep 26, 2019 Refresh only left part of the teacher's screen when playing a match. (? lines) + Version 19.15: Sep 26, 2019 Refresh only left part of the teacher's screen when playing a match. (246332 lines) Version 19.14.6: Sep 26, 2019 Code refactoring related to match refreshing. (246294 lines) Version 19.14.5: Sep 26, 2019 Code refactoring related to match playing. (246291 lines) Version 19.14.4: Sep 26, 2019 Fixed bug creating a new match. (246273 lines) diff --git a/swad_config.h b/swad_config.h index a00767e37..b2a5f9b25 100644 --- a/swad_config.h +++ b/swad_config.h @@ -503,8 +503,8 @@ #define Cfg_TIME_TO_REFRESH_TIMELINE ((time_t)( 2UL * 1000UL)) // Initial refresh period of social timeline in miliseconds // This delay is increased 1 second on each refresh -#define Cfg_SECONDS_TO_REFRESH_GAME 1 // Refresh period of game being played in seconds -#define Cfg_TIME_TO_REFRESH_GAME ((time_t)(Cfg_SECONDS_TO_REFRESH_GAME * 1000UL)) // Refresh period of game being played in miliseconds +#define Cfg_SECONDS_TO_REFRESH_MATCH 2 // Refresh period of game being played in seconds +#define Cfg_TIME_TO_REFRESH_MATCH ((time_t)(Cfg_SECONDS_TO_REFRESH_MATCH * 1000UL)) // Refresh period of game being played in miliseconds #define Cfg_TIME_TO_REFRESH_LAST_CLICKS ((time_t)( 1UL * 1000UL)) // Refresh period of last clicks in miliseconds diff --git a/swad_layout.c b/swad_layout.c index 7c1f37a46..39131b1ff 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -677,7 +677,8 @@ static void Lay_WriteScriptInit (void) extern const char *Lan_STR_LANG_ID[1 + Lan_NUM_LANGUAGES]; bool RefreshConnected; bool RefreshNewTimeline = false; - bool RefreshMatch = false; + bool RefreshMatchStd = false; + bool RefreshMatchTch = false; bool RefreshLastClicks = false; RefreshConnected = Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB && @@ -694,6 +695,10 @@ static void Lay_WriteScriptInit (void) case ActRemSocComGbl: RefreshNewTimeline = true; break; + case ActPlyMchStd: + case ActAnsMchQstStd: + RefreshMatchStd = true; + break; case ActNewMchTch: case ActResMchTch: case ActPauMchTch: @@ -701,11 +706,7 @@ static void Lay_WriteScriptInit (void) case ActBckMchTch: case ActFwdMchTch: case ActChgVisResMchQst: - RefreshMatch = true; - break; - case ActPlyMchStd: - case ActAnsMchQstStd: - RefreshMatch = true; + RefreshMatchTch = true; break; case ActLstClk: RefreshLastClicks = true; @@ -721,9 +722,10 @@ static void Lay_WriteScriptInit (void) if (RefreshNewTimeline) fprintf (Gbl.F.Out,"\tvar delayNewTimeline = %lu;\n", Cfg_TIME_TO_REFRESH_TIMELINE); - else if (RefreshMatch) // Refresh match via AJAX + else if (RefreshMatchStd || + RefreshMatchTch) // Refresh match via AJAX fprintf (Gbl.F.Out,"\tvar delayMatch = %lu;\n", - Cfg_TIME_TO_REFRESH_GAME); + Cfg_TIME_TO_REFRESH_MATCH); fprintf (Gbl.F.Out,"function init(){\n"); @@ -740,8 +742,10 @@ static void Lay_WriteScriptInit (void) if (RefreshLastClicks) // Refresh last clicks via AJAX fprintf (Gbl.F.Out,"\tsetTimeout(\"refreshLastClicks()\",%lu);\n", Cfg_TIME_TO_REFRESH_LAST_CLICKS); - else if (RefreshMatch) // Refresh match via AJAX - fprintf (Gbl.F.Out,"\tsetTimeout(\"refreshMatch()\",delayMatch);\n"); + else if (RefreshMatchStd) // Refresh match for a student via AJAX + fprintf (Gbl.F.Out,"\tsetTimeout(\"refreshMatchStd()\",delayMatch);\n"); + else if (RefreshMatchTch) // Refresh match for a teacher via AJAX + fprintf (Gbl.F.Out,"\tsetTimeout(\"refreshMatchTch()\",delayMatch);\n"); else if (RefreshNewTimeline) // Refresh timeline via AJAX fprintf (Gbl.F.Out,"\tsetTimeout(\"refreshNewTimeline()\",delayNewTimeline);\n"); @@ -818,6 +822,14 @@ static void Lay_WriteScriptParamsAJAX (void) Act_GetActCod (ActRefOldSocPubUsr), Gbl.Usrs.Other.UsrDat.EncryptedUsrCod); break; + /* Parameters related with match refreshing (for students) */ + case ActPlyMchStd: + case ActAnsMchQstStd: + fprintf (Gbl.F.Out,"var RefreshParamNxtActMch = \"act=%ld\";\n" + "var RefreshParamMchCod = \"MchCod=%ld\";\n", + Act_GetActCod (ActRefMchStd), + Gbl.Games.MchCodBeingPlayed); + break; /* Parameters related with match refreshing (for teachers) */ case ActNewMchTch: case ActResMchTch: @@ -831,14 +843,6 @@ static void Lay_WriteScriptParamsAJAX (void) Act_GetActCod (ActRefMchTch), Gbl.Games.MchCodBeingPlayed); break; - /* Parameters related with match refreshing (for students) */ - case ActPlyMchStd: - case ActAnsMchQstStd: - fprintf (Gbl.F.Out,"var RefreshParamNxtActMch = \"act=%ld\";\n" - "var RefreshParamMchCod = \"MchCod=%ld\";\n", - Act_GetActCod (ActRefMchStd), - Gbl.Games.MchCodBeingPlayed); - break; /* Parameter related with clicks refreshing */ case ActLstClk: fprintf (Gbl.F.Out,"var RefreshParamNxtActLstClk = \"act=%ld\";\n", diff --git a/swad_match.c b/swad_match.c index 5d924c3d6..9dc515fa1 100644 --- a/swad_match.c +++ b/swad_match.c @@ -190,6 +190,7 @@ static void Mch_ShowMatchStatusForStd (struct Match *Match); static bool Mch_CheckIfIPlayThisMatchBasedOnGrps (long MchCod); static void Mch_ShowLeftColumnTch (struct Match *Match); +static void Mch_ShowInsideLeftColumnTch (struct Match *Match); static void Mch_ShowRightColumnTch (struct Match *Match); static void Mch_ShowLeftColumnStd (struct Match *Match); static void Mch_ShowRightColumnStd (struct Match *Match); @@ -1570,8 +1571,8 @@ static void Mch_UpdateElapsedTimeInQuestion (struct Match *Match) " ON DUPLICATE KEY" " UPDATE ElapsedTime=ADDTIME(ElapsedTime,SEC_TO_TIME(%u))", Match->MchCod,Match->Status.QstInd, - Cfg_SECONDS_TO_REFRESH_GAME, - Cfg_SECONDS_TO_REFRESH_GAME); + Cfg_SECONDS_TO_REFRESH_MATCH, + Cfg_SECONDS_TO_REFRESH_MATCH); } /*****************************************************************************/ @@ -1975,14 +1976,23 @@ static bool Mch_CheckIfIPlayThisMatchBasedOnGrps (long MchCod) /*****************************************************************************/ static void Mch_ShowLeftColumnTch (struct Match *Match) + { + /***** Start left container *****/ + fprintf (Gbl.F.Out,"
"); + + /***** Show content of div *****/ + Mch_ShowInsideLeftColumnTch (Match); + + /***** End left container *****/ + fprintf (Gbl.F.Out,"
"); + } + +static void Mch_ShowInsideLeftColumnTch (struct Match *Match) { extern const char *Txt_MATCH_respond; struct Time Time; unsigned NumAnswerersQst; - /***** Start left container *****/ - fprintf (Gbl.F.Out,"
"); - /***** Top *****/ fprintf (Gbl.F.Out,"
"); @@ -2031,9 +2041,6 @@ static void Mch_ShowLeftColumnTch (struct Match *Match) Txt_MATCH_respond, NumAnswerersQst,Match->Status.NumPlayers); } - - /***** End left container *****/ - fprintf (Gbl.F.Out,"
"); } /*****************************************************************************/ @@ -2523,13 +2530,13 @@ static void Mch_RemoveOldPlayers (void) DB_QueryDELETE ("can not update matches as not being played", "DELETE FROM mch_playing" " WHERE TS