Version19.15

This commit is contained in:
Antonio Cañas Vargas 2019-09-26 19:54:09 +02:00
parent 6c5b219252
commit 84bd388258
6 changed files with 97 additions and 53 deletions

View File

@ -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
{

View File

@ -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);
}
}
}

View File

@ -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)

View File

@ -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

View File

@ -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",

View File

@ -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,"<div id=\"match_left\" class=\"MATCH_LEFT\">");
/***** Show content of div *****/
Mch_ShowInsideLeftColumnTch (Match);
/***** End left container *****/
fprintf (Gbl.F.Out,"</div>");
}
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,"<div class=\"MATCH_LEFT\">");
/***** Top *****/
fprintf (Gbl.F.Out,"<div class=\"MATCH_TOP\">");
@ -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,"</div>");
}
/*****************************************************************************/
@ -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<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_SECONDS_TO_REFRESH_GAME*3);
Cfg_SECONDS_TO_REFRESH_MATCH*3);
/***** Delete players who have left matches *****/
DB_QueryDELETE ("can not update match players",
"DELETE FROM mch_players"
" WHERE TS<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
Cfg_SECONDS_TO_REFRESH_GAME*3);
Cfg_SECONDS_TO_REFRESH_MATCH*3);
}
static void Mch_UpdateMatchAsBeingPlayed (long MchCod)
@ -2642,7 +2649,8 @@ void Mch_RefreshMatchTch (void)
Mch_UpdateElapsedTimeInQuestion (&Match);
/***** Show current match status *****/
Mch_ShowMatchStatusForTch (&Match);
// Mch_ShowMatchStatusForTch (&Match);
Mch_ShowInsideLeftColumnTch (&Match);
}
/*****************************************************************************/