Version19.39

This commit is contained in:
Antonio Cañas Vargas 2019-10-17 22:47:44 +02:00
parent 1ed5e35ce4
commit e6309124ab
9 changed files with 138 additions and 118 deletions

View File

@ -4,7 +4,7 @@
SWAD (Shared Workspace At a Distance),
is a web platform developed at the University of Granada (Spain),
and used to support university teaching.
Copyright (C) 1999-2019 Antonio Ca<EFBFBD>as-Vargas
Copyright (C) 1999-2019 Antonio Cañas-Vargas
University of Granada (SPAIN) (acanas@ugr.es)
This program is free software: you can redistribute it and/or modify
@ -28,6 +28,41 @@ var Gbl_HTMLContent;
// Global variable used to call SWAD via AJAX
var ActionAJAX;
/*****************************************************************************/
/************************** Handle match keystrokes **************************/
/*****************************************************************************/
function handleMatchKeys(event) {
switch (event.key) {
case 'PageUp':
case 'ArrowLeft':
case 'ArrowUp':
submitForm('backward');
break;
case ' ': // Space
submitForm('play_pause');
break;
case 'PageDown':
case 'ArrowRight':
case 'ArrowDown':
submitForm('forward');
break;
}
}
/*****************************************************************************/
/************************ Submit a form given its id *************************/
/*****************************************************************************/
function submitForm(FormId) {
var Form = document.getElementById(FormId);
if (Form)
Form.submit();
return false;
}
/*****************************************************************************/
/*************** Write a date-time in client local time **********************/
/*****************************************************************************/

View File

@ -614,8 +614,7 @@ Assessment:
464. ActNewMch Create a new match showing first question in a new browser tab
465. ActResMch Resume an unfinished match showing current question in a new browser tab
466. ActBckMch Go back when playing a match
467. ActPlyMch Play current match (go from pause to play)
468. ActPauMch Pause current match (go from play to pause)
467. ActPlyPauMch Play/pause current match
469. ActFwdMch Go forward when playing a match
471. ActChgVisResMchQst Change visibility of question results when playing a match
470. ActRefMchTch Refresh current question when playing a match (as teacher)
@ -2163,8 +2162,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActNewMch */{1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_CreateNewMatchTch ,Mch_ResumeMatch ,NULL},
/* ActResMch */{1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_GetMatchBeingPlayed ,Mch_ResumeMatch ,NULL},
/* ActBckMch */{1790,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_BackMatch ,NULL},
/* ActPlyMch */{1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PlayMatch ,NULL},
/* ActPauMch */{1791,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PauseMatch ,NULL},
/* ActPlyPauMch */{1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PlayMatch ,NULL},
/* ActFwdMch */{1672,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_ForwardMatch ,NULL},
/* ActChgVisResMchQst*/{1794,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_ToggleVisibilResultsMchQst ,NULL},
/* ActRefMchTch */{1788,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_AJAX_RFRESH,Mch_GetMatchBeingPlayed ,Mch_RefreshMatchTch ,NULL},
@ -5019,9 +5017,9 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #1786 (obsolete action)
ActCreMyAcc, // #1787
ActRefMchTch, // #1788
ActPlyMch, // #1789
ActPlyPauMch, // #1789
ActBckMch, // #1790
ActPauMch, // #1791
-1, // #1791 (obsolete action)
-1, // #1792 (obsolete action)
-1, // #1793 (obsolete action)
ActChgVisResMchQst, // #1794

View File

@ -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 + 177 + 437 + 176 + 169 + 16 + 68)
#define Act_NUM_ACTIONS (1 + 4 + 64 + 38 + 12 + 42 + 36 + 19 + 110 + 176 + 437 + 176 + 169 + 16 + 68)
#define Act_MAX_ACTION_COD 1801
@ -613,67 +613,66 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActNewMch (ActChgCrsTT1stDay + 120)
#define ActResMch (ActChgCrsTT1stDay + 121)
#define ActBckMch (ActChgCrsTT1stDay + 122)
#define ActPlyMch (ActChgCrsTT1stDay + 123)
#define ActPauMch (ActChgCrsTT1stDay + 124)
#define ActFwdMch (ActChgCrsTT1stDay + 125)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 126)
#define ActRefMchTch (ActChgCrsTT1stDay + 127)
#define ActPlyPauMch (ActChgCrsTT1stDay + 123)
#define ActFwdMch (ActChgCrsTT1stDay + 124)
#define ActChgVisResMchQst (ActChgCrsTT1stDay + 125)
#define ActRefMchTch (ActChgCrsTT1stDay + 126)
#define ActJoiMch (ActChgCrsTT1stDay + 128)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 129)
#define ActRefMchStd (ActChgCrsTT1stDay + 130)
#define ActJoiMch (ActChgCrsTT1stDay + 127)
#define ActAnsMchQstStd (ActChgCrsTT1stDay + 128)
#define ActRefMchStd (ActChgCrsTT1stDay + 129)
#define ActReqSeeMyMchRes (ActChgCrsTT1stDay + 131)
#define ActSeeMyMchRes (ActChgCrsTT1stDay + 132)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 133)
#define ActReqSeeMyMchRes (ActChgCrsTT1stDay + 130)
#define ActSeeMyMchRes (ActChgCrsTT1stDay + 131)
#define ActSeeOneMchResMe (ActChgCrsTT1stDay + 132)
#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 134)
#define ActSeeUsrMchRes (ActChgCrsTT1stDay + 135)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 136)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 137)
#define ActReqSeeUsrMchRes (ActChgCrsTT1stDay + 133)
#define ActSeeUsrMchRes (ActChgCrsTT1stDay + 134)
#define ActSeeOneMchResOth (ActChgCrsTT1stDay + 135)
#define ActChgVisResMchUsr (ActChgCrsTT1stDay + 136)
#define ActFrmNewGam (ActChgCrsTT1stDay + 138)
#define ActEdiOneGam (ActChgCrsTT1stDay + 139)
#define ActNewGam (ActChgCrsTT1stDay + 140)
#define ActChgGam (ActChgCrsTT1stDay + 141)
#define ActReqRemGam (ActChgCrsTT1stDay + 142)
#define ActRemGam (ActChgCrsTT1stDay + 143)
#define ActHidGam (ActChgCrsTT1stDay + 144)
#define ActShoGam (ActChgCrsTT1stDay + 145)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 146)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 147)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 148)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 149)
#define ActRemGamQst (ActChgCrsTT1stDay + 150)
#define ActUp_GamQst (ActChgCrsTT1stDay + 151)
#define ActDwnGamQst (ActChgCrsTT1stDay + 152)
#define ActFrmNewGam (ActChgCrsTT1stDay + 137)
#define ActEdiOneGam (ActChgCrsTT1stDay + 138)
#define ActNewGam (ActChgCrsTT1stDay + 139)
#define ActChgGam (ActChgCrsTT1stDay + 140)
#define ActReqRemGam (ActChgCrsTT1stDay + 141)
#define ActRemGam (ActChgCrsTT1stDay + 142)
#define ActHidGam (ActChgCrsTT1stDay + 143)
#define ActShoGam (ActChgCrsTT1stDay + 144)
#define ActAddOneGamQst (ActChgCrsTT1stDay + 145)
#define ActGamLstTstQst (ActChgCrsTT1stDay + 146)
#define ActAddTstQstToGam (ActChgCrsTT1stDay + 147)
#define ActReqRemGamQst (ActChgCrsTT1stDay + 148)
#define ActRemGamQst (ActChgCrsTT1stDay + 149)
#define ActUp_GamQst (ActChgCrsTT1stDay + 150)
#define ActDwnGamQst (ActChgCrsTT1stDay + 151)
#define ActSeeSvy (ActChgCrsTT1stDay + 153)
#define ActAnsSvy (ActChgCrsTT1stDay + 154)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 155)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 156)
#define ActNewSvy (ActChgCrsTT1stDay + 157)
#define ActChgSvy (ActChgCrsTT1stDay + 158)
#define ActReqRemSvy (ActChgCrsTT1stDay + 159)
#define ActRemSvy (ActChgCrsTT1stDay + 160)
#define ActReqRstSvy (ActChgCrsTT1stDay + 161)
#define ActRstSvy (ActChgCrsTT1stDay + 162)
#define ActHidSvy (ActChgCrsTT1stDay + 163)
#define ActShoSvy (ActChgCrsTT1stDay + 164)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 165)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 166)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 167)
#define ActRemSvyQst (ActChgCrsTT1stDay + 168)
#define ActSeeSvy (ActChgCrsTT1stDay + 152)
#define ActAnsSvy (ActChgCrsTT1stDay + 153)
#define ActFrmNewSvy (ActChgCrsTT1stDay + 154)
#define ActEdiOneSvy (ActChgCrsTT1stDay + 155)
#define ActNewSvy (ActChgCrsTT1stDay + 156)
#define ActChgSvy (ActChgCrsTT1stDay + 157)
#define ActReqRemSvy (ActChgCrsTT1stDay + 158)
#define ActRemSvy (ActChgCrsTT1stDay + 159)
#define ActReqRstSvy (ActChgCrsTT1stDay + 160)
#define ActRstSvy (ActChgCrsTT1stDay + 161)
#define ActHidSvy (ActChgCrsTT1stDay + 162)
#define ActShoSvy (ActChgCrsTT1stDay + 163)
#define ActEdiOneSvyQst (ActChgCrsTT1stDay + 164)
#define ActRcvSvyQst (ActChgCrsTT1stDay + 165)
#define ActReqRemSvyQst (ActChgCrsTT1stDay + 166)
#define ActRemSvyQst (ActChgCrsTT1stDay + 167)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 169)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 170)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 171)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 172)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 173)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 174)
#define ActRemExaAnn (ActChgCrsTT1stDay + 175)
#define ActHidExaAnn (ActChgCrsTT1stDay + 176)
#define ActShoExaAnn (ActChgCrsTT1stDay + 177)
#define ActSeeOneExaAnn (ActChgCrsTT1stDay + 168)
#define ActSeeDatExaAnn (ActChgCrsTT1stDay + 169)
#define ActEdiExaAnn (ActChgCrsTT1stDay + 170)
#define ActRcvExaAnn (ActChgCrsTT1stDay + 171)
#define ActPrnExaAnn (ActChgCrsTT1stDay + 172)
#define ActReqRemExaAnn (ActChgCrsTT1stDay + 173)
#define ActRemExaAnn (ActChgCrsTT1stDay + 174)
#define ActHidExaAnn (ActChgCrsTT1stDay + 175)
#define ActShoExaAnn (ActChgCrsTT1stDay + 176)
/*****************************************************************************/
/******************************** Files tab **********************************/

View File

@ -487,13 +487,19 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.38.1 (2019-10-17)"
#define CSS_FILE "swad19.38.1.css"
#define JS_FILE "swad19.35.js"
#define Log_PLATFORM_VERSION "SWAD 19.39 (2019-10-17)"
#define CSS_FILE "swad19.39.css"
#define JS_FILE "swad19.39.js"
/*
// TODO: Perico: poner un candado de bloqueo de creación/edición de proyectos (por ejemplo en asignaturas obsoletas)
// TODO: Hacer un nuevo rol en los TFG: tutor externo (profesor de áreas no vinculadas con el centro, profesionales de empresas, etc.)
Version 19.39: Oct 17, 2019 Keyboard/presenter is allowed for playing matches. (245657 lines)
2 changes necessary in database:
UPDATE actions SET Obsolete='Y' WHERE ActCod=1791;
UPDATE actions SET Txt='Lugar/pausar partida' WHERE ActCod='1789' AND Language='es';
Version 19.38.2: Oct 17, 2019 Some CSS styles converted to CSS classes. (? lines)
Version 19.38.1: Oct 17, 2019 Some CSS styles converted to CSS classes. (245636 lines)
Version 19.38: Oct 17, 2019 Filter to select faulty/faltless projects. (245624 lines)
Version 19.37: Oct 16, 2019 New filter to select faulty/faltless projects. Not yet filtered. (245543 lines)

View File

@ -44,7 +44,7 @@ extern struct Globals Gbl;
should be large enough to prevent an IP from being banned
due to automatic refresh when the user is viewing the last clicks. */
#define Fw_CHECK_INTERVAL ((time_t)(10UL)) // Check clicks in the last 10 seconds
#define Fw_MAX_CLICKS_IN_INTERVAL 50 // Maximum of 50 clicks allowed in 10 seconds
#define Fw_MAX_CLICKS_IN_INTERVAL 100 // Maximum of 100 clicks allowed in 10 seconds
#define Fw_TIME_BANNED ((time_t)(60UL*60UL)) // Ban IP for 1 hour

View File

@ -703,8 +703,7 @@ static void Lay_WriteScriptInit (void)
case ActNewMch:
case ActResMch:
case ActBckMch:
case ActPlyMch:
case ActPauMch:
case ActPlyPauMch:
case ActFwdMch:
case ActChgVisResMchQst:
RefreshMatchTch = true;
@ -763,6 +762,7 @@ static void Lay_WriteScriptParamsAJAX (void)
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n");
/***** Parameters with code of session and current course code *****/
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamIdSes = \"ses=%s\";\n"
"var RefreshParamCrsCod = \"crs=%ld\";\n",
Gbl.Session.Id,
@ -770,6 +770,7 @@ static void Lay_WriteScriptParamsAJAX (void)
/***** Parameter to refresh connected users *****/
if (Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB)
// Refresh parameter
fprintf (Gbl.F.Out,"var RefreshParamNxtActCon = \"act=%ld\";\n",
Act_GetActCod (ActRefCon));
@ -777,6 +778,7 @@ static void Lay_WriteScriptParamsAJAX (void)
if (Gbl.FileBrowser.Type != Brw_UNKNOWN)
/* In all the actions related to file browsers ==>
put parameters used by AJAX */
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamExpand = \"act=%ld\";\n"
"var RefreshParamContract = \"act=%ld\";\n",
Act_GetActCod (Brw_GetActionExpand ()),
@ -795,6 +797,7 @@ static void Lay_WriteScriptParamsAJAX (void)
case ActRemSocComGbl:
/* In all the actions related to view or editing global timeline ==>
put parameters used by AJAX */
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamNxtActNewPub = \"act=%ld\";\n"
"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
"var RefreshParamWhichUsrs = \"WhichUsrs=%u\";\n",
@ -817,6 +820,7 @@ static void Lay_WriteScriptParamsAJAX (void)
if (!Gbl.Usrs.Other.UsrDat.Nickname[0])
Nck_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,
Gbl.Usrs.Other.UsrDat.Nickname);
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamNxtActOldPub = \"act=%ld\";\n"
"var RefreshParamUsr = \"OtherUsrCod=%s\";\n",
Act_GetActCod (ActRefOldSocPubUsr),
@ -825,6 +829,7 @@ static void Lay_WriteScriptParamsAJAX (void)
/* Parameters related with match refreshing (for students) */
case ActJoiMch:
case ActAnsMchQstStd:
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamNxtActMch = \"act=%ld\";\n"
"var RefreshParamMchCod = \"MchCod=%ld\";\n",
Act_GetActCod (ActRefMchStd),
@ -834,10 +839,12 @@ static void Lay_WriteScriptParamsAJAX (void)
case ActNewMch:
case ActResMch:
case ActBckMch:
case ActPlyMch:
case ActPauMch:
case ActPlyPauMch:
case ActFwdMch:
case ActChgVisResMchQst:
// Handle keys in keyboard/presenter
fprintf (Gbl.F.Out,"document.addEventListener(\"keydown\",handleMatchKeys);\n");
// Refresh parameters
fprintf (Gbl.F.Out,"var RefreshParamNxtActMch = \"act=%ld\";\n"
"var RefreshParamMchCod = \"MchCod=%ld\";\n",
Act_GetActCod (ActRefMchTch),
@ -845,6 +852,7 @@ static void Lay_WriteScriptParamsAJAX (void)
break;
/* Parameter related with clicks refreshing */
case ActLstClk:
// Refresh parameter
fprintf (Gbl.F.Out,"var RefreshParamNxtActLstClk = \"act=%ld\";\n",
Act_GetActCod (ActRefLstClk));
break;

View File

@ -165,8 +165,8 @@ static void Mch_ShowMatchPodium (struct Match *Match);
static void Mch_PutParamNumOpt (unsigned NumOpt);
static unsigned Mch_GetParamNumOpt (void);
static void Mch_PutBigButton (Act_Action_t NextAction,long MchCod,
const char *Icon,const char *Txt);
static void Mch_PutBigButton (Act_Action_t NextAction,const char *Id,
long MchCod,const char *Icon,const char *Txt);
static void Mch_PutBigButtonOff (const char *Icon);
static void Mch_PutBigButtonClose (void);
@ -1717,35 +1717,6 @@ static void Mch_GetElapsedTime (unsigned NumRows,MYSQL_RES *mysql_res,
Time->Second = 0;
}
/*****************************************************************************/
/********************* Pause current match (by a teacher) ********************/
/*****************************************************************************/
void Mch_PauseMatch (void)
{
struct Match Match;
/***** Remove old players.
This function must be called by a teacher
before getting match status. *****/
Mch_RemoveOldPlayers ();
/***** Get data of the match from database *****/
Match.MchCod = Gbl.Games.MchCodBeingPlayed;
Mch_GetDataOfMatchByCod (&Match);
/***** Update status *****/
Match.Status.Playing = false; // Pause match
/***** Update match status in database *****/
Mch_UpdateMatchStatusInDB (&Match);
/***** Show current match status *****/
fprintf (Gbl.F.Out,"<div id=\"match\" class=\"MATCH_CONT\">");
Mch_ShowMatchStatusForTch (&Match);
fprintf (Gbl.F.Out,"</div>");
}
/*****************************************************************************/
/** Show current match status (current question, answers...) (by a teacher) **/
/*****************************************************************************/
@ -1763,12 +1734,18 @@ void Mch_PlayMatch (void)
Match.MchCod = Gbl.Games.MchCodBeingPlayed;
Mch_GetDataOfMatchByCod (&Match);
/***** If not yet finished, update status *****/
if (Match.Status.QstInd < Mch_AFTER_LAST_QUESTION) // Unfinished
/***** Update status *****/
if (Match.Status.Playing) // match is being played ==> pause it
Match.Status.Playing = false; // Pause match
else // match is paused ==> play it
{
if (Match.Status.QstInd == 0) // Match has been created, but it has not started
Mch_SetMatchStatusToNext (&Match);
Match.Status.Playing = true; // Start/resume match
/* If unfinished, update status */
if (Match.Status.QstInd < Mch_AFTER_LAST_QUESTION) // Unfinished
{
if (Match.Status.QstInd == 0) // Match has been created, but it has not started
Mch_SetMatchStatusToNext (&Match);
Match.Status.Playing = true; // Start/resume match
}
}
/***** Update match status in database *****/
@ -2264,7 +2241,7 @@ static void Mch_PutMatchControlButtons (struct Match *Match)
Mch_PutBigButtonClose ();
else
/* Put button to go back */
Mch_PutBigButton (ActBckMch,Match->MchCod,
Mch_PutBigButton (ActBckMch,"backward",Match->MchCod,
Mch_ICON_PREVIOUS,Txt_Go_back);
fprintf (Gbl.F.Out,"</div>");
@ -2272,15 +2249,13 @@ static void Mch_PutMatchControlButtons (struct Match *Match)
fprintf (Gbl.F.Out,"<div class=\"MATCH_BUTTON_CENTER_CONTAINER\">");
if (Match->Status.Playing) // Being played
/* Put button to pause match */
Mch_PutBigButton (ActPauMch,
Match->MchCod,
Mch_PutBigButton (ActPlyPauMch,"play_pause",Match->MchCod,
Mch_ICON_PAUSE,Txt_Pause);
else // Paused
{
if (Match->Status.QstInd < Mch_AFTER_LAST_QUESTION) // Not finished
/* Put button to play match */
Mch_PutBigButton (ActPlyMch,
Match->MchCod,
Mch_PutBigButton (ActPlyPauMch,"play_pause",Match->MchCod,
Mch_ICON_PLAY,Match->Status.QstInd == 0 ? Txt_Start :
Txt_Resume);
else // Finished
@ -2296,7 +2271,7 @@ static void Mch_PutMatchControlButtons (struct Match *Match)
Mch_PutBigButtonClose ();
else
/* Put button to show answers */
Mch_PutBigButton (ActFwdMch,Match->MchCod,
Mch_PutBigButton (ActFwdMch,"forward",Match->MchCod,
Mch_ICON_NEXT,Txt_Go_forward);
fprintf (Gbl.F.Out,"</div>");
@ -2625,11 +2600,11 @@ static unsigned Mch_GetParamNumOpt (void)
/*********************** Put a big button to do action ***********************/
/*****************************************************************************/
static void Mch_PutBigButton (Act_Action_t NextAction,long MchCod,
const char *Icon,const char *Txt)
static void Mch_PutBigButton (Act_Action_t NextAction,const char *Id,
long MchCod,const char *Icon,const char *Txt)
{
/***** Start form *****/
Frm_StartForm (NextAction);
Frm_StartFormId (NextAction,Id);
Mch_PutParamMchCod (MchCod);
/***** Put icon with link *****/
@ -2641,7 +2616,7 @@ static void Mch_PutBigButton (Act_Action_t NextAction,long MchCod,
"</a>"
"</div>",
Txt,
Gbl.Form.Id,
Id,
Icon);
/***** End form *****/

View File

@ -101,7 +101,6 @@ void Mch_GetIndexes (long MchCod,unsigned QstInd,
void Mch_RemoveGroup (long GrpCod);
void Mch_RemoveGroupsOfType (long GrpTypCod);
void Mch_PauseMatch (void);
void Mch_PlayMatch (void);
void Mch_ToggleVisibilResultsMchQst (void);
void Mch_BackMatch (void);