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.
|
||||
*/
|
||||
#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 JS_FILE "swad20.69.1.js"
|
||||
/*
|
||||
TODO: Rename CENTRE to CENTER in help wiki.
|
||||
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.3: Sep 24, 2021 Queries moved to module swad_match_database. (317085 lines)
|
||||
Version 21.16.5: Sep 26, 2021 Queries moved to module swad_match_database. (317134 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.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)
|
||||
|
|
|
@ -3098,10 +3098,10 @@ static void Mch_ShowMatchScore (const struct Mch_Match *Match)
|
|||
NumRowsPerScorePoint = (double) Mch_NUM_ROWS_SCORE / Range;
|
||||
|
||||
/***** Get maximum number of users *****/
|
||||
MaxUsrs = Mch_DB_GetMaxUsrs (Match->MchCod);
|
||||
MaxUsrs = Mch_DB_GetMaxUsrsPerScore (Match->MchCod);
|
||||
|
||||
/***** Get scores from database *****/
|
||||
NumScores = Mch_DB_GetUsrsPerScore (&mysql_res,Match->MchCod);
|
||||
NumScores = Mch_DB_GetNumUsrsPerScore (&mysql_res,Match->MchCod);
|
||||
|
||||
/***** Begin table ****/
|
||||
HTM_TABLE_BeginWide ();
|
||||
|
|
|
@ -863,6 +863,101 @@ unsigned Mch_DB_GetElapsedTimeInMatch (MYSQL_RES **mysql_res,long 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 **************/
|
||||
/*****************************************************************************/
|
||||
|
@ -884,7 +979,7 @@ unsigned Mch_DB_GetNumUsrsWhoHavePlayedMch (long MchCod)
|
|||
/********* 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",
|
||||
"SELECT MAX(NumUsrs)"
|
||||
|
@ -900,7 +995,7 @@ unsigned Mch_DB_GetMaxUsrs (long MchCod)
|
|||
/************** 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)
|
||||
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);
|
||||
|
||||
//----------------------------- 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_GetMaxUsrs (long MchCod);
|
||||
unsigned Mch_DB_GetUsrsPerScore (MYSQL_RES **mysql_res,long MchCod);
|
||||
unsigned Mch_DB_GetMaxUsrsPerScore (long MchCod);
|
||||
unsigned Mch_DB_GetNumUsrsPerScore (MYSQL_RES **mysql_res,long MchCod);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "swad_date.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_match.h"
|
||||
#include "swad_match_database.h"
|
||||
#include "swad_match_print.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -57,7 +58,7 @@ extern struct Globals Gbl;
|
|||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void MchPrn_UpdateMyMatchPrintInDB (struct MchPrn_Print *Print);
|
||||
static void MchPrn_UpdateMatchPrintInDB (const struct MchPrn_Print *Print);
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************************** Reset match print ******************************/
|
||||
|
@ -90,53 +91,21 @@ void MchPrn_ComputeScoreAndUpdateMyMatchPrintInDB (long MchCod)
|
|||
Mch_ComputeScore (&Print);
|
||||
|
||||
/***** 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 (DB_QueryCOUNT ("can not get if match result exists",
|
||||
"SELECT COUNT(*)"
|
||||
" FROM mch_results"
|
||||
" WHERE MchCod=%ld"
|
||||
" AND UsrCod=%ld",
|
||||
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
|
||||
if (Mch_DB_CheckIfMatchPrintExists (Print)) // Match print exists
|
||||
/* Update match print */
|
||||
Mch_DB_UpdateMatchPrint (Print);
|
||||
else // Match print doesn't exist
|
||||
/* Create match print */
|
||||
Mch_DB_CreateMatchPrint (Print);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -150,27 +119,12 @@ void MchPrn_GetMatchPrintDataByMchCodAndUsrCod (struct MchPrn_Print *Print)
|
|||
Dat_StartEndTime_t StartEndTime;
|
||||
|
||||
/***** Make database query *****/
|
||||
if (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) == 1)
|
||||
if (Mch_DB_GetMatchPrintData (&mysql_res,Print) == 1)
|
||||
{
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
||||
/* 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++)
|
||||
Print->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[StartEndTime]);
|
||||
|
|
Loading…
Reference in New Issue