mirror of https://github.com/acanas/swad-core.git
Version19.15
This commit is contained in:
parent
6c5b219252
commit
84bd388258
|
@ -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
|
||||
{
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
30
swad_match.c
30
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,"<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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
Loading…
Reference in New Issue