mirror of https://github.com/acanas/swad-core.git
Version 21.16.5: Sep 26, 2021 Queries moved to module swad_match_database.
This commit is contained in:
parent
6161a356cb
commit
58bea36918
|
@ -602,15 +602,16 @@ 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.
|
TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo.
|
||||||
*/
|
*/
|
||||||
#define Log_PLATFORM_VERSION "SWAD 21.16.4 (2021-09-25)"
|
#define Log_PLATFORM_VERSION "SWAD 21.16.5 (2021-09-26)"
|
||||||
#define CSS_FILE "swad20.45.css"
|
#define CSS_FILE "swad20.45.css"
|
||||||
#define JS_FILE "swad20.69.1.js"
|
#define JS_FILE "swad20.69.1.js"
|
||||||
/*
|
/*
|
||||||
TODO: Rename CENTRE to CENTER in help wiki.
|
TODO: Rename CENTRE to CENTER in help wiki.
|
||||||
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams
|
||||||
|
|
||||||
Version 21.16.4: Sep 24, 2021 Queries moved to module swad_match_database. (317091 lines)
|
Version 21.16.5: Sep 26, 2021 Queries moved to module swad_match_database. (317134 lines)
|
||||||
Version 21.16.3: Sep 24, 2021 Queries moved to module swad_match_database. (317085 lines)
|
Version 21.16.4: Sep 25, 2021 Queries moved to module swad_match_database. (317091 lines)
|
||||||
|
Version 21.16.3: Sep 25, 2021 Queries moved to module swad_match_database. (317085 lines)
|
||||||
Version 21.16.2: Sep 25, 2021 Code refactoring related to error alerts. (317087 lines)
|
Version 21.16.2: Sep 25, 2021 Code refactoring related to error alerts. (317087 lines)
|
||||||
Version 21.16.1: Sep 24, 2021 Queries moved to module swad_match_database. (317054 lines)
|
Version 21.16.1: Sep 24, 2021 Queries moved to module swad_match_database. (317054 lines)
|
||||||
Version 21.16: Sep 24, 2021 New module swad_match_database for database queries related to game matches. (316995 lines)
|
Version 21.16: Sep 24, 2021 New module swad_match_database for database queries related to game matches. (316995 lines)
|
||||||
|
|
|
@ -3098,10 +3098,10 @@ static void Mch_ShowMatchScore (const struct Mch_Match *Match)
|
||||||
NumRowsPerScorePoint = (double) Mch_NUM_ROWS_SCORE / Range;
|
NumRowsPerScorePoint = (double) Mch_NUM_ROWS_SCORE / Range;
|
||||||
|
|
||||||
/***** Get maximum number of users *****/
|
/***** Get maximum number of users *****/
|
||||||
MaxUsrs = Mch_DB_GetMaxUsrs (Match->MchCod);
|
MaxUsrs = Mch_DB_GetMaxUsrsPerScore (Match->MchCod);
|
||||||
|
|
||||||
/***** Get scores from database *****/
|
/***** Get scores from database *****/
|
||||||
NumScores = Mch_DB_GetUsrsPerScore (&mysql_res,Match->MchCod);
|
NumScores = Mch_DB_GetNumUsrsPerScore (&mysql_res,Match->MchCod);
|
||||||
|
|
||||||
/***** Begin table ****/
|
/***** Begin table ****/
|
||||||
HTM_TABLE_BeginWide ();
|
HTM_TABLE_BeginWide ();
|
||||||
|
|
|
@ -863,6 +863,101 @@ unsigned Mch_DB_GetElapsedTimeInMatch (MYSQL_RES **mysql_res,long MchCod)
|
||||||
MchCod);
|
MchCod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Create match print ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Mch_DB_CreateMatchPrint (const struct MchPrn_Print *Print)
|
||||||
|
{
|
||||||
|
Str_SetDecimalPointToUS (); // To print the floating point as a dot
|
||||||
|
|
||||||
|
DB_QueryINSERT ("can not create match result",
|
||||||
|
"INSERT mch_results "
|
||||||
|
"(MchCod,UsrCod,StartTime,EndTime,NumQsts,NumQstsNotBlank,Score)"
|
||||||
|
" VALUES "
|
||||||
|
"(%ld," // MchCod
|
||||||
|
"%ld," // UsrCod
|
||||||
|
"NOW()," // StartTime
|
||||||
|
"NOW()," // EndTime
|
||||||
|
"%u," // NumQsts
|
||||||
|
"%u," // NumQstsNotBlank
|
||||||
|
"'%.15lg')", // Score
|
||||||
|
Print->MchCod,
|
||||||
|
Print->UsrCod,
|
||||||
|
Print->NumQsts.All,
|
||||||
|
Print->NumQsts.NotBlank,
|
||||||
|
Print->Score);
|
||||||
|
|
||||||
|
Str_SetDecimalPointToLocal (); // Return to local system
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Update match print ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
void Mch_DB_UpdateMatchPrint (const struct MchPrn_Print *Print)
|
||||||
|
{
|
||||||
|
Str_SetDecimalPointToUS (); // To print the floating point as a dot
|
||||||
|
|
||||||
|
DB_QueryUPDATE ("can not update match print",
|
||||||
|
"UPDATE mch_results"
|
||||||
|
" SET EndTime=NOW(),"
|
||||||
|
"NumQsts=%u,"
|
||||||
|
"NumQstsNotBlank=%u,"
|
||||||
|
"Score='%.15lg'"
|
||||||
|
" WHERE MchCod=%ld"
|
||||||
|
" AND UsrCod=%ld",
|
||||||
|
Print->NumQsts.All,
|
||||||
|
Print->NumQsts.NotBlank,
|
||||||
|
Print->Score,
|
||||||
|
Print->MchCod,
|
||||||
|
Print->UsrCod);
|
||||||
|
|
||||||
|
Str_SetDecimalPointToLocal (); // Return to local system
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*********************** Check if match print exists *************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
bool Mch_DB_CheckIfMatchPrintExists (const struct MchPrn_Print *Print)
|
||||||
|
{
|
||||||
|
return (DB_QueryCOUNT ("can not get if match print exists",
|
||||||
|
"SELECT COUNT(*)"
|
||||||
|
" FROM mch_results"
|
||||||
|
" WHERE MchCod=%ld"
|
||||||
|
" AND UsrCod=%ld",
|
||||||
|
Print->MchCod,
|
||||||
|
Print->UsrCod) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/********* Get data of a match print using match code and user code **********/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
unsigned Mch_DB_GetMatchPrintData (MYSQL_RES **mysql_res,
|
||||||
|
const struct MchPrn_Print *Print)
|
||||||
|
{
|
||||||
|
return (unsigned)
|
||||||
|
DB_QuerySELECT (mysql_res,"can not get data of a match print",
|
||||||
|
"SELECT UNIX_TIMESTAMP(mch_results.StartTime)," // row[1]
|
||||||
|
"UNIX_TIMESTAMP(mch_results.EndTime)," // row[2]
|
||||||
|
"mch_results.NumQsts," // row[3]
|
||||||
|
"mch_results.NumQstsNotBlank," // row[4]
|
||||||
|
"mch_results.Score" // row[5]
|
||||||
|
" FROM mch_results,"
|
||||||
|
"mch_matches,"
|
||||||
|
"gam_games"
|
||||||
|
" WHERE mch_results.MchCod=%ld"
|
||||||
|
" AND mch_results.UsrCod=%ld"
|
||||||
|
" AND mch_results.MchCod=mch_matches.MchCod"
|
||||||
|
" AND mch_matches.GamCod=gam_games.GamCod"
|
||||||
|
" AND gam_games.CrsCod=%ld", // Extra check
|
||||||
|
Print->MchCod,
|
||||||
|
Print->UsrCod,
|
||||||
|
Gbl.Hierarchy.Crs.CrsCod);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************ Get number of users who have played a given match **************/
|
/************ Get number of users who have played a given match **************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -884,7 +979,7 @@ unsigned Mch_DB_GetNumUsrsWhoHavePlayedMch (long MchCod)
|
||||||
/********* Get maximum number of users per score in match results ************/
|
/********* Get maximum number of users per score in match results ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
unsigned Mch_DB_GetMaxUsrs (long MchCod)
|
unsigned Mch_DB_GetMaxUsrsPerScore (long MchCod)
|
||||||
{
|
{
|
||||||
return DB_QuerySELECTUnsigned ("can not get max users",
|
return DB_QuerySELECTUnsigned ("can not get max users",
|
||||||
"SELECT MAX(NumUsrs)"
|
"SELECT MAX(NumUsrs)"
|
||||||
|
@ -900,7 +995,7 @@ unsigned Mch_DB_GetMaxUsrs (long MchCod)
|
||||||
/************** Get number of users per score in match results ***************/
|
/************** Get number of users per score in match results ***************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
unsigned Mch_DB_GetUsrsPerScore (MYSQL_RES **mysql_res,long MchCod)
|
unsigned Mch_DB_GetNumUsrsPerScore (MYSQL_RES **mysql_res,long MchCod)
|
||||||
{
|
{
|
||||||
return (unsigned)
|
return (unsigned)
|
||||||
DB_QuerySELECT (mysql_res,"can not get scores",
|
DB_QuerySELECT (mysql_res,"can not get scores",
|
||||||
|
|
|
@ -109,9 +109,15 @@ unsigned Mch_DB_GetElapsedTimeInQuestion (MYSQL_RES **mysql_res,
|
||||||
unsigned Mch_DB_GetElapsedTimeInMatch (MYSQL_RES **mysql_res,long MchCod);
|
unsigned Mch_DB_GetElapsedTimeInMatch (MYSQL_RES **mysql_res,long MchCod);
|
||||||
|
|
||||||
//----------------------------- Match results ---------------------------------
|
//----------------------------- Match results ---------------------------------
|
||||||
|
void Mch_DB_CreateMatchPrint (const struct MchPrn_Print *Print);
|
||||||
|
void Mch_DB_UpdateMatchPrint (const struct MchPrn_Print *Print);
|
||||||
|
|
||||||
|
bool Mch_DB_CheckIfMatchPrintExists (const struct MchPrn_Print *Print);
|
||||||
|
unsigned Mch_DB_GetMatchPrintData (MYSQL_RES **mysql_res,
|
||||||
|
const struct MchPrn_Print *Print);
|
||||||
unsigned Mch_DB_GetNumUsrsWhoHavePlayedMch (long MchCod);
|
unsigned Mch_DB_GetNumUsrsWhoHavePlayedMch (long MchCod);
|
||||||
unsigned Mch_DB_GetMaxUsrs (long MchCod);
|
unsigned Mch_DB_GetMaxUsrsPerScore (long MchCod);
|
||||||
unsigned Mch_DB_GetUsrsPerScore (MYSQL_RES **mysql_res,long MchCod);
|
unsigned Mch_DB_GetNumUsrsPerScore (MYSQL_RES **mysql_res,long MchCod);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "swad_date.h"
|
#include "swad_date.h"
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
#include "swad_match.h"
|
#include "swad_match.h"
|
||||||
|
#include "swad_match_database.h"
|
||||||
#include "swad_match_print.h"
|
#include "swad_match_print.h"
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -57,7 +58,7 @@ extern struct Globals Gbl;
|
||||||
/***************************** Private prototypes ****************************/
|
/***************************** Private prototypes ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void MchPrn_UpdateMyMatchPrintInDB (struct MchPrn_Print *Print);
|
static void MchPrn_UpdateMatchPrintInDB (const struct MchPrn_Print *Print);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**************************** Reset match print ******************************/
|
/**************************** Reset match print ******************************/
|
||||||
|
@ -90,53 +91,21 @@ void MchPrn_ComputeScoreAndUpdateMyMatchPrintInDB (long MchCod)
|
||||||
Mch_ComputeScore (&Print);
|
Mch_ComputeScore (&Print);
|
||||||
|
|
||||||
/***** Update my match result in database *****/
|
/***** Update my match result in database *****/
|
||||||
MchPrn_UpdateMyMatchPrintInDB (&Print);
|
MchPrn_UpdateMatchPrintInDB (&Print);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************** Create/update my result in a match *********************/
|
/************************* Create/update match print *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void MchPrn_UpdateMyMatchPrintInDB (struct MchPrn_Print *Print)
|
static void MchPrn_UpdateMatchPrintInDB (const struct MchPrn_Print *Print)
|
||||||
{
|
{
|
||||||
Str_SetDecimalPointToUS (); // To print the floating point as a dot
|
if (Mch_DB_CheckIfMatchPrintExists (Print)) // Match print exists
|
||||||
if (DB_QueryCOUNT ("can not get if match result exists",
|
/* Update match print */
|
||||||
"SELECT COUNT(*)"
|
Mch_DB_UpdateMatchPrint (Print);
|
||||||
" FROM mch_results"
|
else // Match print doesn't exist
|
||||||
" WHERE MchCod=%ld"
|
/* Create match print */
|
||||||
" AND UsrCod=%ld",
|
Mch_DB_CreateMatchPrint (Print);
|
||||||
Print->MchCod,Print->UsrCod)) // Match print exists
|
|
||||||
/* Update result */
|
|
||||||
DB_QueryUPDATE ("can not update match result",
|
|
||||||
"UPDATE mch_results"
|
|
||||||
" SET EndTime=NOW(),"
|
|
||||||
"NumQsts=%u,"
|
|
||||||
"NumQstsNotBlank=%u,"
|
|
||||||
"Score='%.15lg'"
|
|
||||||
" WHERE MchCod=%ld"
|
|
||||||
" AND UsrCod=%ld",
|
|
||||||
Print->NumQsts.All,
|
|
||||||
Print->NumQsts.NotBlank,
|
|
||||||
Print->Score,
|
|
||||||
Print->MchCod,Print->UsrCod);
|
|
||||||
else // Match print doesn't exist
|
|
||||||
/* Create result */
|
|
||||||
DB_QueryINSERT ("can not create match result",
|
|
||||||
"INSERT mch_results "
|
|
||||||
"(MchCod,UsrCod,StartTime,EndTime,NumQsts,NumQstsNotBlank,Score)"
|
|
||||||
" VALUES "
|
|
||||||
"(%ld," // MchCod
|
|
||||||
"%ld," // UsrCod
|
|
||||||
"NOW()," // StartTime
|
|
||||||
"NOW()," // EndTime
|
|
||||||
"%u," // NumQsts
|
|
||||||
"%u," // NumQstsNotBlank
|
|
||||||
"'%.15lg')", // Score
|
|
||||||
Print->MchCod,Print->UsrCod,
|
|
||||||
Print->NumQsts.All,
|
|
||||||
Print->NumQsts.NotBlank,
|
|
||||||
Print->Score);
|
|
||||||
Str_SetDecimalPointToLocal (); // Return to local system
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -150,27 +119,12 @@ void MchPrn_GetMatchPrintDataByMchCodAndUsrCod (struct MchPrn_Print *Print)
|
||||||
Dat_StartEndTime_t StartEndTime;
|
Dat_StartEndTime_t StartEndTime;
|
||||||
|
|
||||||
/***** Make database query *****/
|
/***** Make database query *****/
|
||||||
if (DB_QuerySELECT (&mysql_res,"can not get data of a match print",
|
if (Mch_DB_GetMatchPrintData (&mysql_res,Print) == 1)
|
||||||
"SELECT UNIX_TIMESTAMP(mch_results.StartTime)," // row[1]
|
|
||||||
"UNIX_TIMESTAMP(mch_results.EndTime)," // row[2]
|
|
||||||
"mch_results.NumQsts," // row[3]
|
|
||||||
"mch_results.NumQstsNotBlank," // row[4]
|
|
||||||
"mch_results.Score" // row[5]
|
|
||||||
" FROM mch_results,"
|
|
||||||
"mch_matches,"
|
|
||||||
"gam_games"
|
|
||||||
" WHERE mch_results.MchCod=%ld"
|
|
||||||
" AND mch_results.UsrCod=%ld"
|
|
||||||
" AND mch_results.MchCod=mch_matches.MchCod"
|
|
||||||
" AND mch_matches.GamCod=gam_games.GamCod"
|
|
||||||
" AND gam_games.CrsCod=%ld", // Extra check
|
|
||||||
Print->MchCod,Print->UsrCod,
|
|
||||||
Gbl.Hierarchy.Crs.CrsCod) == 1)
|
|
||||||
{
|
{
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
/* Get start time (row[0] and row[1] hold UTC date-times) */
|
/* Get start time (row[0] and row[1] hold UTC date-times) */
|
||||||
for (StartEndTime = (Dat_StartEndTime_t) 0;
|
for (StartEndTime = (Dat_StartEndTime_t) 0;
|
||||||
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
|
StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
|
||||||
StartEndTime++)
|
StartEndTime++)
|
||||||
Print->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[StartEndTime]);
|
Print->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[StartEndTime]);
|
||||||
|
|
Loading…
Reference in New Issue