mirror of https://github.com/acanas/swad-core.git
Version 20.78.2: May 20, 2021 Code formatting in games and matches.
This commit is contained in:
parent
a6dae83d81
commit
b206217046
|
@ -27,6 +27,7 @@
|
|||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <stdlib.h> // For free
|
||||
|
||||
#include "swad_agenda.h"
|
||||
#include "swad_agenda_database.h"
|
||||
|
|
|
@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par
|
|||
|
||||
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
|
||||
*/
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.78.1 (2021-05-20)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.78.2 (2021-05-20)"
|
||||
#define CSS_FILE "swad20.45.css"
|
||||
#define JS_FILE "swad20.69.1.js"
|
||||
/*
|
||||
TODO: Rename CENTRE to CENTER in help wiki.
|
||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||
|
||||
Version 20.78.2: May 20, 2021 Code formatting in games and matches. (311326 lines)
|
||||
Version 20.78.1: May 20, 2021 Fixed bug in matches. Reported by Jesús Garrido Alcázar. (311317 lines)
|
||||
Version 20.78: May 19, 2021 New module swad_chat_database for database queries related to chat. (311327 lines)
|
||||
Version 20.77: May 18, 2021 New module swad_banner_database for database queries related to banners. (311249 lines)
|
||||
|
|
|
@ -3501,8 +3501,8 @@ static void Fig_GetAndShowGamesStats (void)
|
|||
double NumGamesPerCourse = 0.0;
|
||||
|
||||
/***** Get the number of games from this location *****/
|
||||
if ((NumGames = Gam_GetNumGames (Gbl.Scope.Current)))
|
||||
if ((NumCoursesWithGames = Gam_GetNumCoursesWithGames (Gbl.Scope.Current)) != 0)
|
||||
if ((NumGames = Gam_DB_GetNumGames (Gbl.Scope.Current)))
|
||||
if ((NumCoursesWithGames = Gam_DB_GetNumCoursesWithGames (Gbl.Scope.Current)) != 0)
|
||||
NumGamesPerCourse = (double) NumGames / (double) NumCoursesWithGames;
|
||||
|
||||
/***** Begin box and table *****/
|
||||
|
|
76
swad_game.c
76
swad_game.c
|
@ -133,11 +133,11 @@ static void Gam_PutParamsOneQst (void *Games);
|
|||
static void Gam_PutHiddenParamOrder (Gam_Order_t SelectedOrder);
|
||||
static Gam_Order_t Gam_GetParamOrder (void);
|
||||
|
||||
static void Gam_GetGameTxtFromDB (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
|
||||
static void Gam_DB_GetGameTxt (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
|
||||
|
||||
static void Gam_RemoveGameFromAllTables (long GamCod);
|
||||
|
||||
static bool Gam_CheckIfSimilarGameExists (const struct Gam_Game *Game);
|
||||
static bool Gam_DB_CheckIfSimilarGameExists (const struct Gam_Game *Game);
|
||||
|
||||
static void Gam_PutFormsEditionGame (struct Gam_Games *Games,
|
||||
struct Gam_Game *Game,
|
||||
|
@ -150,11 +150,11 @@ static bool Gam_CheckGameFieldsReceivedFromForm (const struct Gam_Game *Game);
|
|||
static void Gam_CreateGame (struct Gam_Game *Game,const char *Txt);
|
||||
static void Gam_UpdateGame (struct Gam_Game *Game,const char *Txt);
|
||||
|
||||
static void Gam_RemAnswersOfAQuestion (long GamCod,unsigned QstInd);
|
||||
static void Gam_DB_RemAnswersOfAQuestion (long GamCod,unsigned QstInd);
|
||||
|
||||
static unsigned Gam_GetQstIndFromQstCod (long GamCod,long QstCod);
|
||||
static unsigned Gam_DB_GetQstIndFromQstCod (long GamCod,long QstCod);
|
||||
|
||||
static unsigned Gam_GetMaxQuestionIndexInGame (long GamCod);
|
||||
static unsigned Gam_DB_GetMaxQuestionIndexInGame (long GamCod);
|
||||
static void Gam_ListGameQuestions (struct Gam_Games *Games,struct Gam_Game *Game);
|
||||
static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
|
||||
long GamCod,unsigned NumQsts,
|
||||
|
@ -275,9 +275,12 @@ static void Gam_ListAllGames (struct Gam_Games *Games)
|
|||
|
||||
if (Games->Num)
|
||||
{
|
||||
/***** Table head *****/
|
||||
/***** Begin table *****/
|
||||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
||||
/***** Table head *****/
|
||||
HTM_TR_Begin (NULL);
|
||||
|
||||
if (Gam_CheckIfICanEditGames () ||
|
||||
Gam_CheckIfICanListGameQuestions ())
|
||||
HTM_TH (1,1,"CONTEXT_COL",NULL); // Column for contextual icons
|
||||
|
@ -292,6 +295,7 @@ static void Gam_ListAllGames (struct Gam_Games *Games)
|
|||
Frm_BeginForm (ActSeeAllGam);
|
||||
Pag_PutHiddenParamPagNum (Pag_GAMES,Games->CurrentPage);
|
||||
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
|
||||
|
||||
HTM_BUTTON_SUBMIT_Begin (Txt_GAMES_ORDER_HELP[Order],"BT_LINK TIT_TBL",NULL);
|
||||
if (Order == Games->SelectedOrder)
|
||||
HTM_U_Begin ();
|
||||
|
@ -299,6 +303,7 @@ static void Gam_ListAllGames (struct Gam_Games *Games)
|
|||
if (Order == Games->SelectedOrder)
|
||||
HTM_U_End ();
|
||||
HTM_BUTTON_End ();
|
||||
|
||||
Frm_EndForm ();
|
||||
|
||||
HTM_TH_End ();
|
||||
|
@ -436,7 +441,9 @@ static void Gam_PutButtonToCreateNewGame (struct Gam_Games *Games)
|
|||
|
||||
Frm_BeginForm (ActFrmNewGam);
|
||||
Gam_PutParamsToCreateNewGame (Games);
|
||||
|
||||
Btn_PutConfirmButton (Txt_New_game);
|
||||
|
||||
Frm_EndForm ();
|
||||
}
|
||||
|
||||
|
@ -673,7 +680,7 @@ static void Gam_ShowOneGame (struct Gam_Games *Games,
|
|||
HTM_TD_Begin ("colspan=\"2\" class=\"LT\"");
|
||||
else
|
||||
HTM_TD_Begin ("colspan=\"2\" class=\"LT COLOR%u\"",Gbl.RowEvenOdd);
|
||||
Gam_GetGameTxtFromDB (Game->GamCod,Txt);
|
||||
Gam_DB_GetGameTxt (Game->GamCod,Txt);
|
||||
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
|
||||
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to rigorous HTML
|
||||
Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
|
||||
|
@ -1061,7 +1068,7 @@ void Gam_GetDataOfGameByCod (struct Gam_Game *Game)
|
|||
Str_Copy (Game->Title,row[6],sizeof (Game->Title) - 1);
|
||||
|
||||
/* Get number of questions */
|
||||
Game->NumQsts = Gam_GetNumQstsGame (Game->GamCod);
|
||||
Game->NumQsts = Gam_DB_GetNumQstsGame (Game->GamCod);
|
||||
|
||||
/* Get number of matches */
|
||||
Game->NumMchs = Mch_GetNumMchsInGame (Game->GamCod);
|
||||
|
@ -1126,7 +1133,7 @@ void Gam_FreeListGames (struct Gam_Games *Games)
|
|||
/********************** Get game text from database ************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Gam_GetGameTxtFromDB (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
static void Gam_DB_GetGameTxt (long GamCod,char Txt[Cns_MAX_BYTES_TEXT + 1])
|
||||
{
|
||||
/***** Get text of game from database *****/
|
||||
DB_QuerySELECTString (Txt,Cns_MAX_BYTES_TEXT,"can not get game text",
|
||||
|
@ -1331,7 +1338,7 @@ void Gam_UnhideGame (void)
|
|||
/******************* Check if the title of a game exists *******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static bool Gam_CheckIfSimilarGameExists (const struct Gam_Game *Game)
|
||||
static bool Gam_DB_CheckIfSimilarGameExists (const struct Gam_Game *Game)
|
||||
{
|
||||
/***** Get number of games with a field value from database *****/
|
||||
return (DB_QueryCOUNT ("can not get similar games",
|
||||
|
@ -1371,7 +1378,7 @@ void Gam_ListGame (void)
|
|||
|
||||
/***** Get game data *****/
|
||||
Gam_GetDataOfGameByCod (&Game);
|
||||
Gam_GetGameTxtFromDB (Game.GamCod,Txt);
|
||||
Gam_DB_GetGameTxt (Game.GamCod,Txt);
|
||||
|
||||
/***** Show game *****/
|
||||
Gam_ShowOnlyOneGame (&Games,&Game,
|
||||
|
@ -1414,7 +1421,7 @@ void Gam_RequestCreatOrEditGame (void)
|
|||
{
|
||||
/* Get game data from database */
|
||||
Gam_GetDataOfGameByCod (&Game);
|
||||
Gam_GetGameTxtFromDB (Game.GamCod,Txt);
|
||||
Gam_DB_GetGameTxt (Game.GamCod,Txt);
|
||||
}
|
||||
|
||||
/***** Put forms to create/edit a game *****/
|
||||
|
@ -1630,7 +1637,7 @@ static bool Gam_CheckGameFieldsReceivedFromForm (const struct Gam_Game *Game)
|
|||
if (Game->Title[0]) // If there's a game title
|
||||
{
|
||||
/* If title of game was in database... */
|
||||
if (Gam_CheckIfSimilarGameExists (Game))
|
||||
if (Gam_DB_CheckIfSimilarGameExists (Game))
|
||||
{
|
||||
NewGameIsCorrect = false;
|
||||
Ale_ShowAlert (Ale_WARNING,Txt_Already_existed_a_game_with_the_title_X,
|
||||
|
@ -1711,7 +1718,7 @@ static void Gam_UpdateGame (struct Gam_Game *Game,const char *Txt)
|
|||
/******************* Get number of questions of a game *********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
unsigned Gam_GetNumQstsGame (long GamCod)
|
||||
unsigned Gam_DB_GetNumQstsGame (long GamCod)
|
||||
{
|
||||
/***** Get nuumber of questions in a game from database *****/
|
||||
return (unsigned)
|
||||
|
@ -1812,7 +1819,7 @@ unsigned Gam_GetParamQstInd (void)
|
|||
/********************** Remove answers of a game question ********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Gam_RemAnswersOfAQuestion (long GamCod,unsigned QstInd)
|
||||
static void Gam_DB_RemAnswersOfAQuestion (long GamCod,unsigned QstInd)
|
||||
{
|
||||
/***** Remove answers from all matches of this game *****/
|
||||
DB_QueryDELETE ("can not remove the answers of a question",
|
||||
|
@ -1822,7 +1829,8 @@ static void Gam_RemAnswersOfAQuestion (long GamCod,unsigned QstInd)
|
|||
" WHERE mch_matches.GamCod=%ld" // From all matches of this game...
|
||||
" AND mch_matches.MchCod=mch_answers.MchCod"
|
||||
" AND mch_answers.QstInd=%u", // ...remove only answers to this question
|
||||
GamCod,QstInd);
|
||||
GamCod,
|
||||
QstInd);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1830,7 +1838,7 @@ static void Gam_RemAnswersOfAQuestion (long GamCod,unsigned QstInd)
|
|||
/*****************************************************************************/
|
||||
// Return 0 is question is not present in game
|
||||
|
||||
static unsigned Gam_GetQstIndFromQstCod (long GamCod,long QstCod)
|
||||
static unsigned Gam_DB_GetQstIndFromQstCod (long GamCod,long QstCod)
|
||||
{
|
||||
/***** Get question index in a game given the question code *****/
|
||||
return DB_QuerySELECTUnsigned ("can not get question index",
|
||||
|
@ -1870,7 +1878,7 @@ long Gam_GetQstCodFromQstInd (long GamCod,unsigned QstInd)
|
|||
// Question index can be 1, 2, 3...
|
||||
// Return 0 if no questions
|
||||
|
||||
static unsigned Gam_GetMaxQuestionIndexInGame (long GamCod)
|
||||
static unsigned Gam_DB_GetMaxQuestionIndexInGame (long GamCod)
|
||||
{
|
||||
/***** Get maximum question index in a game from database *****/
|
||||
return DB_QuerySELECTUnsigned ("can not get last question index",
|
||||
|
@ -1886,7 +1894,7 @@ static unsigned Gam_GetMaxQuestionIndexInGame (long GamCod)
|
|||
// Input question index can be 1, 2, 3... n-1
|
||||
// Return question index will be 1, 2, 3... n if previous question exists, or 0 if no previous question
|
||||
|
||||
unsigned Gam_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd)
|
||||
unsigned Gam_DB_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd)
|
||||
{
|
||||
/***** Get previous question index in a game from database *****/
|
||||
// Although indexes are always continuous...
|
||||
|
@ -1906,7 +1914,7 @@ unsigned Gam_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd)
|
|||
// Input question index can be 0, 1, 2, 3... n-1
|
||||
// Return question index will be 1, 2, 3... n if next question exists, or big number if no next question
|
||||
|
||||
unsigned Gam_GetNextQuestionIndexInGame (long GamCod,unsigned QstInd)
|
||||
unsigned Gam_DB_GetNextQuestionIndexInGame (long GamCod,unsigned QstInd)
|
||||
{
|
||||
/***** Get next question index in a game from database *****/
|
||||
// Although indexes are always continuous...
|
||||
|
@ -2002,7 +2010,7 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
|
|||
return;
|
||||
|
||||
/***** Get maximum question index *****/
|
||||
MaxQstInd = Gam_GetMaxQuestionIndexInGame (GamCod); // 0 is no questions in game
|
||||
MaxQstInd = Gam_DB_GetMaxQuestionIndexInGame (GamCod); // 0 is no questions in game
|
||||
|
||||
/***** Write the heading *****/
|
||||
HTM_TABLE_BeginWideMarginPadding (5);
|
||||
|
@ -2136,7 +2144,9 @@ static void Gam_PutButtonToAddNewQuestions (struct Gam_Games *Games)
|
|||
|
||||
Frm_BeginForm (ActAddOneGamQst);
|
||||
Gam_PutParams (Games);
|
||||
|
||||
Btn_PutConfirmButton (Txt_Add_questions);
|
||||
|
||||
Frm_EndForm ();
|
||||
}
|
||||
|
||||
|
@ -2194,10 +2204,10 @@ void Gam_AddQstsToGame (void)
|
|||
Err_WrongQuestionExit ();
|
||||
|
||||
/* Check if question is already present in game */
|
||||
if (Gam_GetQstIndFromQstCod (Game.GamCod,QstCod) == 0) // This question is not yet in this game
|
||||
if (Gam_DB_GetQstIndFromQstCod (Game.GamCod,QstCod) == 0) // This question is not yet in this game
|
||||
{
|
||||
/* Get current maximum index */
|
||||
MaxQstInd = Gam_GetMaxQuestionIndexInGame (Game.GamCod); // 0 is no questions in game
|
||||
MaxQstInd = Gam_DB_GetMaxQuestionIndexInGame (Game.GamCod); // 0 is no questions in game
|
||||
|
||||
/* Insert question in the table of questions */
|
||||
DB_QueryINSERT ("can not add question to game",
|
||||
|
@ -2334,7 +2344,7 @@ void Gam_RemoveQstFromGame (void)
|
|||
|
||||
/***** Remove the question from all the tables *****/
|
||||
/* Remove answers from this test question */
|
||||
Gam_RemAnswersOfAQuestion (Game.GamCod,QstInd);
|
||||
Gam_DB_RemAnswersOfAQuestion (Game.GamCod,QstInd);
|
||||
|
||||
/* Remove the question itself */
|
||||
DB_QueryDELETE ("can not remove a question",
|
||||
|
@ -2407,7 +2417,7 @@ void Gam_MoveUpQst (void)
|
|||
if (QstIndBottom > 1) // 2, 3, 4...
|
||||
{
|
||||
/* Indexes of questions to be exchanged */
|
||||
QstIndTop = Gam_GetPrevQuestionIndexInGame (Game.GamCod,QstIndBottom);
|
||||
QstIndTop = Gam_DB_GetPrevQuestionIndexInGame (Game.GamCod,QstIndBottom);
|
||||
if (QstIndTop == 0)
|
||||
Err_WrongQuestionIndexExit ();
|
||||
|
||||
|
@ -2455,13 +2465,13 @@ void Gam_MoveDownQst (void)
|
|||
QstIndTop = Gam_GetParamQstInd ();
|
||||
|
||||
/***** Get maximum question index *****/
|
||||
MaxQstInd = Gam_GetMaxQuestionIndexInGame (Game.GamCod); // 0 is no questions in game
|
||||
MaxQstInd = Gam_DB_GetMaxQuestionIndexInGame (Game.GamCod); // 0 is no questions in game
|
||||
|
||||
/***** Move down question *****/
|
||||
if (QstIndTop < MaxQstInd)
|
||||
{
|
||||
/* Indexes of questions to be exchanged */
|
||||
QstIndBottom = Gam_GetNextQuestionIndexInGame (Game.GamCod,QstIndTop);
|
||||
QstIndBottom = Gam_DB_GetNextQuestionIndexInGame (Game.GamCod,QstIndTop);
|
||||
if (QstIndBottom == Gam_AFTER_LAST_QUESTION)
|
||||
Err_WrongQuestionIndexExit ();
|
||||
|
||||
|
@ -2570,10 +2580,12 @@ void Gam_PutButtonNewMatch (struct Gam_Games *Games,long GamCod)
|
|||
{
|
||||
extern const char *Txt_New_match;
|
||||
|
||||
Games->GamCod = GamCod;
|
||||
Frm_StartFormAnchor (ActReqNewMch,Mch_NEW_MATCH_SECTION_ID);
|
||||
Games->GamCod = GamCod;
|
||||
Gam_PutParams (Games);
|
||||
|
||||
Btn_PutConfirmButton (Txt_New_match);
|
||||
|
||||
Frm_EndForm ();
|
||||
}
|
||||
|
||||
|
@ -2608,7 +2620,7 @@ void Gam_RequestNewMatch (void)
|
|||
/*****************************************************************************/
|
||||
// Returns the number of courses with games in this location
|
||||
|
||||
unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
|
||||
unsigned Gam_DB_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
|
||||
{
|
||||
/***** Get number of courses with games from database *****/
|
||||
switch (Scope)
|
||||
|
@ -2683,7 +2695,7 @@ unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope)
|
|||
/*****************************************************************************/
|
||||
// Returns the number of games in this location
|
||||
|
||||
unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope)
|
||||
unsigned Gam_DB_GetNumGames (Hie_Lvl_Level_t Scope)
|
||||
{
|
||||
/***** Get number of games from database *****/
|
||||
switch (Scope)
|
||||
|
@ -2754,10 +2766,10 @@ unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope)
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************* Get average number of questions per course game ***************/
|
||||
/***************** Get average number of questions per game ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope)
|
||||
double Gam_DB_GetNumQstsPerGame (Hie_Lvl_Level_t Scope)
|
||||
{
|
||||
/***** Get number of questions per game from database *****/
|
||||
switch (Scope)
|
||||
|
|
12
swad_game.h
12
swad_game.h
|
@ -143,7 +143,7 @@ void Gam_RequestCreatOrEditGame (void);
|
|||
|
||||
void Gam_ReceiveFormGame (void);
|
||||
|
||||
unsigned Gam_GetNumQstsGame (long GamCod);
|
||||
unsigned Gam_DB_GetNumQstsGame (long GamCod);
|
||||
|
||||
void Gam_ReqSelectQstsToAddToGame (void);
|
||||
void Gam_ListQstsToAddToGame (void);
|
||||
|
@ -151,8 +151,8 @@ void Gam_ListQstsToAddToGame (void);
|
|||
void Gam_PutParamQstInd (unsigned QstInd);
|
||||
unsigned Gam_GetParamQstInd (void);
|
||||
long Gam_GetQstCodFromQstInd (long GamCod,unsigned QstInd);
|
||||
unsigned Gam_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd);
|
||||
unsigned Gam_GetNextQuestionIndexInGame (long GamCod,unsigned QstInd);
|
||||
unsigned Gam_DB_GetPrevQuestionIndexInGame (long GamCod,unsigned QstInd);
|
||||
unsigned Gam_DB_GetNextQuestionIndexInGame (long GamCod,unsigned QstInd);
|
||||
|
||||
void Gam_AddQstsToGame (void);
|
||||
|
||||
|
@ -165,9 +165,9 @@ void Gam_MoveDownQst (void);
|
|||
void Gam_PutButtonNewMatch (struct Gam_Games *Games,long GamCod);
|
||||
void Gam_RequestNewMatch (void);
|
||||
|
||||
unsigned Gam_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope);
|
||||
unsigned Gam_GetNumGames (Hie_Lvl_Level_t Scope);
|
||||
double Gam_GetNumQstsPerCrsGame (Hie_Lvl_Level_t Scope);
|
||||
unsigned Gam_DB_GetNumCoursesWithGames (Hie_Lvl_Level_t Scope);
|
||||
unsigned Gam_DB_GetNumGames (Hie_Lvl_Level_t Scope);
|
||||
double Gam_DB_GetNumQstsPerGame (Hie_Lvl_Level_t Scope);
|
||||
|
||||
void Gam_ShowTstTagsPresentInAGame (long GamCod);
|
||||
|
||||
|
|
31
swad_match.c
31
swad_match.c
|
@ -496,8 +496,10 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
|
|||
/***** Reset match *****/
|
||||
Mch_ResetMatch (&Match);
|
||||
|
||||
/***** Write the heading *****/
|
||||
/***** Begin table *****/
|
||||
HTM_TABLE_BeginWidePadding (2);
|
||||
|
||||
/***** Write the heading *****/
|
||||
Mch_ListOneOrMoreMatchesHeading (ICanEditMatches);
|
||||
|
||||
/***** Write rows *****/
|
||||
|
@ -740,11 +742,13 @@ static void Mch_ListOneOrMoreMatchesTitleGrps (const struct Mch_Match *Match,
|
|||
Frm_BeginForm (Gbl.Usrs.Me.Role.Logged == Rol_STD ? ActJoiMch :
|
||||
ActResMch);
|
||||
Mch_PutParamMchCod (Match->MchCod);
|
||||
|
||||
HTM_BUTTON_SUBMIT_Begin (Gbl.Usrs.Me.Role.Logged == Rol_STD ? Txt_Play :
|
||||
Txt_Resume,
|
||||
"BT_LINK LT ASG_TITLE",NULL);
|
||||
HTM_Txt (Match->Title);
|
||||
HTM_BUTTON_End ();
|
||||
|
||||
Frm_EndForm ();
|
||||
|
||||
/***** Groups whose students can answer this match *****/
|
||||
|
@ -785,8 +789,9 @@ static void Mch_GetAndWriteNamesOfGrpsAssociatedToMatch (const struct Mch_Match
|
|||
"grp_groups.GrpName",
|
||||
Match->MchCod);
|
||||
|
||||
/***** Write heading *****/
|
||||
HTM_DIV_Begin ("class=\"ASG_GRP\"");
|
||||
|
||||
/***** Write heading *****/
|
||||
HTM_TxtColonNBSP (NumGrps == 1 ? Txt_Group :
|
||||
Txt_Groups);
|
||||
|
||||
|
@ -1576,6 +1581,7 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
|
|||
HTM_TD_End ();
|
||||
|
||||
HTM_TD_Begin ("class=\"LT\"");
|
||||
|
||||
Box_BoxTableBegin ("95%",NULL,
|
||||
NULL,NULL,
|
||||
NULL,Box_NOT_CLOSABLE,0);
|
||||
|
@ -1606,7 +1612,9 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
|
|||
|
||||
/***** End table and box *****/
|
||||
Box_BoxTableEnd ();
|
||||
|
||||
HTM_TD_End ();
|
||||
|
||||
HTM_TR_End ();
|
||||
}
|
||||
|
||||
|
@ -2364,7 +2372,7 @@ static void Mch_SetMatchStatusToPrev (struct Mch_Match *Match)
|
|||
static void Mch_SetMatchStatusToPrevQst (struct Mch_Match *Match)
|
||||
{
|
||||
/***** Get index of the previous question *****/
|
||||
Match->Status.QstInd = Gam_GetPrevQuestionIndexInGame (Match->GamCod,
|
||||
Match->Status.QstInd = Gam_DB_GetPrevQuestionIndexInGame (Match->GamCod,
|
||||
Match->Status.QstInd);
|
||||
if (Match->Status.QstInd) // Start of questions not reached
|
||||
{
|
||||
|
@ -2427,7 +2435,7 @@ static void Mch_SetMatchStatusToNext (struct Mch_Match *Match)
|
|||
static void Mch_SetMatchStatusToNextQst (struct Mch_Match *Match)
|
||||
{
|
||||
/***** Get index of the next question *****/
|
||||
Match->Status.QstInd = Gam_GetNextQuestionIndexInGame (Match->GamCod,
|
||||
Match->Status.QstInd = Gam_DB_GetNextQuestionIndexInGame (Match->GamCod,
|
||||
Match->Status.QstInd);
|
||||
|
||||
/***** Get question code *****/
|
||||
|
@ -2681,6 +2689,7 @@ static void Mch_WriteNumRespondersQst (struct Mch_Match *Match)
|
|||
|
||||
/***** Begin block *****/
|
||||
HTM_DIV_Begin ("class=\"MCH_NUM_ANSWERERS\"");
|
||||
|
||||
HTM_Txt (Txt_MATCH_respond);
|
||||
HTM_BR ();
|
||||
HTM_STRONG_Begin ();
|
||||
|
@ -2708,8 +2717,9 @@ static void Mch_WriteNumRespondersQst (struct Mch_Match *Match)
|
|||
HTM_TxtF ("/%u",Match->Status.NumPlayers);
|
||||
}
|
||||
|
||||
/***** End block *****/
|
||||
HTM_STRONG_End ();
|
||||
|
||||
/***** End block *****/
|
||||
HTM_DIV_End ();
|
||||
}
|
||||
|
||||
|
@ -2959,7 +2969,7 @@ static void Mch_ShowNumQstInMch (const struct Mch_Match *Match)
|
|||
{
|
||||
extern const char *Txt_MATCH_Start;
|
||||
extern const char *Txt_MATCH_End;
|
||||
unsigned NumQsts = Gam_GetNumQstsGame (Match->GamCod);
|
||||
unsigned NumQsts = Gam_DB_GetNumQstsGame (Match->GamCod);
|
||||
|
||||
HTM_DIV_Begin ("class=\"MCH_NUM_QST\"");
|
||||
switch (Match->Status.Showing)
|
||||
|
@ -3208,7 +3218,8 @@ static void Mch_PutIconToRemoveMyAnswer (const struct Mch_Match *Match)
|
|||
|
||||
/***** Put icon with link *****/
|
||||
HTM_DIV_Begin ("class=\"MCH_BIGBUTTON_CONT\"");
|
||||
HTM_BUTTON_OnMouseDown_Begin (Txt_Delete_my_answer,"BT_LINK MCH_BUTTON_ON ICO_DARKRED");
|
||||
HTM_BUTTON_OnMouseDown_Begin (Txt_Delete_my_answer,
|
||||
"BT_LINK MCH_BUTTON_ON ICO_DARKRED");
|
||||
HTM_Txt ("<i class=\"fas fa-trash\"></i>");
|
||||
HTM_BUTTON_End ();
|
||||
HTM_DIV_End ();
|
||||
|
@ -3761,7 +3772,8 @@ static void Mch_PutBigButtonHidden (const char *Icon)
|
|||
{
|
||||
/***** Put inactive icon *****/
|
||||
HTM_DIV_Begin ("class=\"MCH_BIGBUTTON_CONT\"");
|
||||
HTM_BUTTON_BUTTON_Begin (NULL,"BT_LINK_OFF MCH_BUTTON_HIDDEN ICO_BLACK",NULL);
|
||||
HTM_BUTTON_BUTTON_Begin (NULL,"BT_LINK_OFF MCH_BUTTON_HIDDEN ICO_BLACK",
|
||||
NULL);
|
||||
HTM_TxtF ("<i class=\"%s\"></i>",Icon);
|
||||
HTM_BUTTON_End ();
|
||||
HTM_DIV_End ();
|
||||
|
@ -3776,7 +3788,8 @@ static void Mch_PutBigButtonClose (void)
|
|||
|
||||
/***** Put icon with link *****/
|
||||
HTM_DIV_Begin ("class=\"MCH_BIGBUTTON_CONT\"");
|
||||
HTM_BUTTON_BUTTON_Begin (Txt_Close,"BT_LINK MCH_BUTTON_ON ICO_DARKRED","window.close();");
|
||||
HTM_BUTTON_BUTTON_Begin (Txt_Close,"BT_LINK MCH_BUTTON_ON ICO_DARKRED",
|
||||
"window.close();");
|
||||
HTM_TxtF ("<i class=\"%s\"></i>",Mch_ICON_CLOSE);
|
||||
HTM_BUTTON_End ();
|
||||
HTM_DIV_End ();
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stddef.h> // For NULL
|
||||
#include <stdio.h> // For asprintf
|
||||
#include <stdlib.h> // For free
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_box.h"
|
||||
|
|
Loading…
Reference in New Issue