diff --git a/swad_changelog.h b/swad_changelog.h
index 178f10ce..984d2875 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -468,10 +468,11 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
-#define Log_PLATFORM_VERSION "SWAD 19.8.1 (2019-09-22)"
+#define Log_PLATFORM_VERSION "SWAD 19.8.2 (2019-09-22)"
#define CSS_FILE "swad19.3.css"
#define JS_FILE "swad18.130.2.js"
/*
+ Version 19.8.2: Sep 22, 2019 View matches results. Not finished. (245429 lines)
Version 19.8.1: Sep 22, 2019 View matches results. Not finished. (245474 lines)
Version 19.8: Sep 22, 2019 View matches results. Not finished.
Help links related to test and match results changed. (245412 lines)
diff --git a/swad_game.c b/swad_game.c
index d3c2817e..5aeefd9a 100644
--- a/swad_game.c
+++ b/swad_game.c
@@ -414,12 +414,12 @@ void Gam_ShowOneGame (long GamCod,
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
- if (Game.TimeUTC[Gam_START_TIME])
+ if (Game.TimeUTC[Dat_START_TIME])
fprintf (Gbl.F.Out,"",
- UniqueId,Game.TimeUTC[Gam_START_TIME],
+ UniqueId,Game.TimeUTC[Dat_START_TIME],
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
fprintf (Gbl.F.Out,"");
@@ -431,12 +431,12 @@ void Gam_ShowOneGame (long GamCod,
if (!ShowOnlyThisGame)
fprintf (Gbl.F.Out," COLOR%u",Gbl.RowEvenOdd);
fprintf (Gbl.F.Out,"\">");
- if (Game.TimeUTC[Gam_END_TIME])
+ if (Game.TimeUTC[Dat_END_TIME])
fprintf (Gbl.F.Out,"",
- UniqueId,Game.TimeUTC[Gam_END_TIME],
+ UniqueId,Game.TimeUTC[Dat_END_TIME],
(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
fprintf (Gbl.F.Out,"");
@@ -759,10 +759,10 @@ void Gam_GetDataOfGameByCod (struct Game *Game)
row = mysql_fetch_row (mysql_res);
/* Get start date (row[0] holds the start UTC time) */
- Game->TimeUTC[Gam_START_TIME] = Dat_GetUNIXTimeFromStr (row[0]);
+ Game->TimeUTC[Dat_START_TIME] = Dat_GetUNIXTimeFromStr (row[0]);
/* Get end date (row[1] holds the end UTC time) */
- Game->TimeUTC[Gam_END_TIME ] = Dat_GetUNIXTimeFromStr (row[1]);
+ Game->TimeUTC[Dat_END_TIME ] = Dat_GetUNIXTimeFromStr (row[1]);
}
/* Free structure that stores the query result */
@@ -770,8 +770,8 @@ void Gam_GetDataOfGameByCod (struct Game *Game)
}
else
{
- Game->TimeUTC[Gam_START_TIME] =
- Game->TimeUTC[Gam_END_TIME ] = (time_t) 0;
+ Game->TimeUTC[Dat_START_TIME] =
+ Game->TimeUTC[Dat_END_TIME ] = (time_t) 0;
}
}
@@ -1031,8 +1031,8 @@ void Gam_RequestCreatOrEditGame (void)
/* Initialize to empty game */
Game.GamCod = -1L;
Game.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
- Game.TimeUTC[Gam_START_TIME] = (time_t) 0;
- Game.TimeUTC[Gam_END_TIME ] = (time_t) 0;
+ Game.TimeUTC[Dat_START_TIME] = (time_t) 0;
+ Game.TimeUTC[Dat_END_TIME ] = (time_t) 0;
Game.Title[0] = '\0';
Game.NumQsts = 0;
Game.Status.Visible = true;
diff --git a/swad_game.h b/swad_game.h
index 9fbef36c..ccbcba61 100644
--- a/swad_game.h
+++ b/swad_game.h
@@ -27,6 +27,7 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
+#include "swad_date.h"
#include "swad_scope.h"
/*****************************************************************************/
@@ -36,19 +37,12 @@
#define Gam_MAX_CHARS_TITLE (128 - 1) // 127
#define Gam_MAX_BYTES_TITLE ((Gam_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
-#define Gam_NUM_DATES 2
-typedef enum
- {
- Gam_START_TIME = 0,
- Gam_END_TIME = 1,
- } Gam_StartOrEndTime_t;
-
struct Game
{
long GamCod; // Game code
long UsrCod; // Author code
char Title[Gam_MAX_BYTES_TITLE + 1];
- time_t TimeUTC[Gam_NUM_DATES];
+ time_t TimeUTC[Dat_NUM_START_END_TIME];
unsigned NumQsts; // Number of questions in the game
struct
{
diff --git a/swad_match.c b/swad_match.c
index 216c089c..d3b3df19 100644
--- a/swad_match.c
+++ b/swad_match.c
@@ -84,7 +84,7 @@ struct Match
long MchCod;
long GamCod;
long UsrCod;
- time_t TimeUTC[2];
+ time_t TimeUTC[Dat_NUM_START_END_TIME];
char Title[Gam_MAX_BYTES_TITLE + 1];
struct
{
@@ -200,8 +200,7 @@ static void Mch_DrawBarNumUsrs (unsigned NumAnswerersAns,unsigned NumAnswerersQs
static void Mch_ShowHeaderMchResults (void);
static void Mch_ShowMchResults (struct UsrData *UsrDat);
static void Mch_GetMatchResultDataByMchCod (long MchResCod,
- time_t *StartTimeUTC,
- time_t *EndTimeUTC,
+ time_t TimeUTC[Dat_NUM_START_END_TIME],
unsigned *NumQsts,
unsigned *NumQstsNotBlank,
double *Score);
@@ -299,6 +298,7 @@ static void Mch_GetDataOfMatchByCod (struct Match *Match)
{
MYSQL_RES *mysql_res;
unsigned long NumRows;
+ Dat_StartEndTime_t StartEndTime;
/***** Get data of match from database *****/
NumRows = (unsigned) DB_QuerySELECT (&mysql_res,"can not get matches",
@@ -328,8 +328,10 @@ static void Mch_GetDataOfMatchByCod (struct Match *Match)
Match->MchCod = -1L;
Match->GamCod = -1L;
Match->UsrCod = -1L;
- Match->TimeUTC[Gam_START_TIME] =
- Match->TimeUTC[Gam_END_TIME ] = (time_t) 0;
+ for (StartEndTime = (Dat_StartEndTime_t) 0;
+ StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
+ StartEndTime++)
+ Match->TimeUTC[StartEndTime] = (time_t) 0;
Match->Title[0] = '\0';
Match->Status.QstInd = 0;
Match->Status.QstCod = -1L;
@@ -376,6 +378,7 @@ static void Mch_ListOneOrMoreMatches (struct Game *Game,
unsigned NumMatch;
unsigned UniqueId;
struct Match Match;
+ Dat_StartEndTime_t StartEndTime;
/***** Write the heading *****/
Tbl_StartTableWideMargin (2);
@@ -443,36 +446,26 @@ static void Mch_ListOneOrMoreMatches (struct Game *Game,
Usr_WriteAuthor1Line (Match.UsrCod,false);
fprintf (Gbl.F.Out,"");
- /***** Start date/time *****/
- fprintf (Gbl.F.Out,"
",
- UniqueId,
- Match.Status.QstInd >= Mch_AFTER_LAST_QUESTION ? "DATE_RED" :
- "DATE_GREEN",
- Gbl.RowEvenOdd);
- fprintf (Gbl.F.Out,""
- " | ",
- UniqueId,Match.TimeUTC[Gam_START_TIME],
- (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
-
- /***** End date/time *****/
- fprintf (Gbl.F.Out,"",
- UniqueId,
- Match.Status.QstInd >= Mch_AFTER_LAST_QUESTION ? "DATE_RED" :
- "DATE_GREEN",
- Gbl.RowEvenOdd);
- fprintf (Gbl.F.Out,"\">"
- ""
- " | ",
- UniqueId,Match.TimeUTC[Gam_END_TIME],
- (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ /***** Start/end date/time *****/
+ for (StartEndTime = (Dat_StartEndTime_t) 0;
+ StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
+ StartEndTime++)
+ {
+ fprintf (Gbl.F.Out,"",
+ (unsigned) StartEndTime,UniqueId,
+ Match.Status.QstInd >= Mch_AFTER_LAST_QUESTION ? "DATE_RED" :
+ "DATE_GREEN",
+ Gbl.RowEvenOdd);
+ fprintf (Gbl.F.Out,""
+ " | ",
+ (unsigned) StartEndTime,UniqueId,
+ Match.TimeUTC[StartEndTime],
+ (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ }
/***** Title and groups *****/
fprintf (Gbl.F.Out,"",Gbl.RowEvenOdd);
@@ -611,6 +604,7 @@ static void Mch_GetMatchDataFromRow (MYSQL_RES *mysql_res,
struct Match *Match)
{
MYSQL_ROW row;
+ Dat_StartEndTime_t StartEndTime;
/***** Get match data *****/
row = mysql_fetch_row (mysql_res);
@@ -634,11 +628,11 @@ static void Mch_GetMatchDataFromRow (MYSQL_RES *mysql_res,
/* Get match teacher (row[2]) */
Match->UsrCod = Str_ConvertStrCodToLongCod (row[2]);
- /* Get start date (row[3] holds the start UTC time) */
- Match->TimeUTC[Gam_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]);
-
- /* Get end date (row[4] holds the end UTC time) */
- Match->TimeUTC[Gam_END_TIME ] = Dat_GetUNIXTimeFromStr (row[4]);
+ /* Get start/end times (row[3], row[4] hold start/end UTC times) */
+ for (StartEndTime = (Dat_StartEndTime_t) 0;
+ StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
+ StartEndTime++)
+ Match->TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[3 + StartEndTime]);
/* Get the title of the game (row[5]) */
if (row[5])
@@ -2741,181 +2735,142 @@ static void Mch_ShowMchResults (struct UsrData *UsrDat)
extern const char *Txt_View_test;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
- unsigned NumExams;
- unsigned NumTest;
+ unsigned NumResults;
+ unsigned NumResult;
static unsigned UniqueId = 0;
- long TstCod;
- unsigned NumQstsInThisTest;
- unsigned NumQstsNotBlankInThisTest;
+ long MchResCod;
+ long MchCod;
+ Dat_StartEndTime_t StartEndTime;
+ unsigned NumQstsInThisResult;
+ unsigned NumQstsNotBlankInThisResult;
unsigned NumTotalQsts = 0;
unsigned NumTotalQstsNotBlank = 0;
- double ScoreInThisTest;
- double TotalScoreOfAllTests = 0.0;
- unsigned NumExamsVisibleByTchs = 0;
- bool ItsMe = Usr_ItsMe (UsrDat->UsrCod);
- bool ICanViewTest;
- bool ICanViewScore;
- time_t TimeUTC;
+ double ScoreInThisResult;
+ double TotalScoreOfAllResults = 0.0;
+ time_t TimeUTC[Dat_NUM_START_END_TIME];
char *ClassDat;
/***** Make database query *****/
- NumExams =
- (unsigned) DB_QuerySELECT (&mysql_res,"can not get test exams of a user",
- "SELECT TstCod," // row[0]
- "AllowTeachers," // row[1]
- "UNIX_TIMESTAMP(TstTime)," // row[2]
- "NumQsts," // row[3]
- "NumQstsNotBlank," // row[4]
- "Score" // row[5]
- " FROM tst_exams"
- " WHERE CrsCod=%ld AND UsrCod=%ld"
- " AND TstTime>=FROM_UNIXTIME(%ld)"
- " AND TstTime<=FROM_UNIXTIME(%ld)"
- " ORDER BY TstCod",
- Gbl.Hierarchy.Crs.CrsCod,
+ NumResults =
+ (unsigned) DB_QuerySELECT (&mysql_res,"can not get matches results of a user",
+ "SELECT mch_results.MchResCod," // row[0]
+ "mch_results.MchCod," // row[1]
+ "UNIX_TIMESTAMP(mch_matches.StartTime)," // row[2]
+ "UNIX_TIMESTAMP(mch_matches.EndTime)," // row[3]
+ "mch_results.NumQsts," // row[4]
+ "mch_results.NumQstsNotBlank," // row[5]
+ "mch_results.Score" // row[6]
+ " FROM mch_results,mch_matches,gam_games"
+ " WHERE 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
+ " AND mch_matches.EndTime>=FROM_UNIXTIME(%ld)"
+ " AND mch_matches.StartTime<=FROM_UNIXTIME(%ld)"
+ " ORDER BY MchResCod",
UsrDat->UsrCod,
- (long) Gbl.DateRange.TimeUTC[0],
- (long) Gbl.DateRange.TimeUTC[1]);
+ Gbl.Hierarchy.Crs.CrsCod,
+ (long) Gbl.DateRange.TimeUTC[Dat_START_TIME],
+ (long) Gbl.DateRange.TimeUTC[Dat_END_TIME]);
/***** Show user's data *****/
fprintf (Gbl.F.Out," | ");
- // Tst_ShowDataUsr (UsrDat,NumExams); // TODO: Change to matches results
+ Usr_ShowTableCellWithUsrData (UsrDat,NumResults);
/***** Get and print test results *****/
- if (NumExams)
+ if (NumResults)
{
- for (NumTest = 0;
- NumTest < NumExams;
- NumTest++)
+ for (NumResult = 0;
+ NumResult < NumResults;
+ NumResult++)
{
row = mysql_fetch_row (mysql_res);
- /* Get test code (row[0]) */
- if ((TstCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
- Lay_ShowErrorAndExit ("Wrong code of test result.");
+ /* Get match result code (row[0]) */
+ if ((MchResCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
+ Lay_ShowErrorAndExit ("Wrong code of result.");
- /* Get if teachers are allowed to see this test result (row[1]) */
- Gbl.Test.AllowTeachers = (row[1][0] == 'Y');
- ClassDat = Gbl.Test.AllowTeachers ? "DAT" :
- "DAT_LIGHT";
+ /* Get match code (row[1]) */
+ if ((MchCod = Str_ConvertStrCodToLongCod (row[1])) < 0)
+ Lay_ShowErrorAndExit ("Wrong code of match.");
- switch (Gbl.Usrs.Me.Role.Logged)
- {
- case Rol_STD:
- ICanViewTest = ItsMe;
- ICanViewScore = ItsMe &&
- Gbl.Test.Config.Feedback != Tst_FEEDBACK_NOTHING;
- break;
- case Rol_NET:
- case Rol_TCH:
- case Rol_DEG_ADM:
- case Rol_CTR_ADM:
- case Rol_INS_ADM:
- ICanViewTest =
- ICanViewScore = ItsMe ||
- Gbl.Test.AllowTeachers;
- break;
- case Rol_SYS_ADM:
- ICanViewTest =
- ICanViewScore = true;
- break;
- default:
- ICanViewTest =
- ICanViewScore = false;
- break;
- }
-
- if (NumTest)
+ if (NumResult)
fprintf (Gbl.F.Out,"
");
- /* Write date and time (row[2] holds UTC date-time) */
- TimeUTC = Dat_GetUNIXTimeFromStr (row[2]);
- UniqueId++;
- fprintf (Gbl.F.Out,""
- ""
- " | ",
- UniqueId,ClassDat,Gbl.RowEvenOdd,
- UniqueId,(long) TimeUTC,
- (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ /* Write start/end times (row[2], row[3] hold UTC start/end times) */
+ for (StartEndTime = (Dat_StartEndTime_t) 0;
+ StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
+ StartEndTime++)
+ {
+ TimeUTC[0] = Dat_GetUNIXTimeFromStr (row[2 + StartEndTime]);
+ UniqueId++;
+ fprintf (Gbl.F.Out,""
+ ""
+ " | ",
+ (unsigned) StartEndTime,UniqueId,
+ ClassDat,Gbl.RowEvenOdd,
+ (unsigned) StartEndTime,UniqueId,
+ (long) TimeUTC[StartEndTime],
+ (unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ }
- /* Get number of questions (row[3]) */
- if (sscanf (row[3],"%u",&NumQstsInThisTest) != 1)
- NumQstsInThisTest = 0;
+ /* Get number of questions (row[4]) */
+ if (sscanf (row[4],"%u",&NumQstsInThisResult) != 1)
+ NumQstsInThisResult = 0;
if (Gbl.Test.AllowTeachers)
- NumTotalQsts += NumQstsInThisTest;
+ NumTotalQsts += NumQstsInThisResult;
- /* Get number of questions not blank (row[4]) */
- if (sscanf (row[4],"%u",&NumQstsNotBlankInThisTest) != 1)
- NumQstsNotBlankInThisTest = 0;
+ /* Get number of questions not blank (row[5]) */
+ if (sscanf (row[5],"%u",&NumQstsNotBlankInThisResult) != 1)
+ NumQstsNotBlankInThisResult = 0;
if (Gbl.Test.AllowTeachers)
- NumTotalQstsNotBlank += NumQstsNotBlankInThisTest;
+ NumTotalQstsNotBlank += NumQstsNotBlankInThisResult;
- /* Get score (row[5]) */
+ /* Get score (row[6]) */
Str_SetDecimalPointToUS (); // To get the decimal point as a dot
- if (sscanf (row[5],"%lf",&ScoreInThisTest) != 1)
- ScoreInThisTest = 0.0;
+ if (sscanf (row[6],"%lf",&ScoreInThisResult) != 1)
+ ScoreInThisResult = 0.0;
Str_SetDecimalPointToLocal (); // Return to local system
- if (Gbl.Test.AllowTeachers)
- TotalScoreOfAllTests += ScoreInThisTest;
+ TotalScoreOfAllResults += ScoreInThisResult;
/* Write number of questions */
- fprintf (Gbl.F.Out,"",
- ClassDat,Gbl.RowEvenOdd);
- if (ICanViewTest)
- fprintf (Gbl.F.Out,"%u",NumQstsInThisTest);
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out,"%u | ",
+ ClassDat,Gbl.RowEvenOdd,NumQstsInThisResult);
/* Write number of questions not blank */
- fprintf (Gbl.F.Out,"",
- ClassDat,Gbl.RowEvenOdd);
- if (ICanViewTest)
- fprintf (Gbl.F.Out,"%u",NumQstsNotBlankInThisTest);
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out,"%u | ",
+ ClassDat,Gbl.RowEvenOdd,NumQstsNotBlankInThisResult);
/* Write score */
- fprintf (Gbl.F.Out,"",
- ClassDat,Gbl.RowEvenOdd);
- if (ICanViewScore)
- fprintf (Gbl.F.Out,"%.2lf",ScoreInThisTest);
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out,"%.2lf | ",
+ ClassDat,Gbl.RowEvenOdd,ScoreInThisResult);
/* Write average score per question */
- fprintf (Gbl.F.Out,"",
- ClassDat,Gbl.RowEvenOdd);
- if (ICanViewScore)
- fprintf (Gbl.F.Out,"%.2lf",
- NumQstsInThisTest ? ScoreInThisTest / (double) NumQstsInThisTest :
- 0.0);
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out,"%.2lf | ",
+ ClassDat,Gbl.RowEvenOdd,
+ NumQstsInThisResult ? ScoreInThisResult / (double) NumQstsInThisResult :
+ 0.0);
/* Write score over Tst_SCORE_MAX */
- fprintf (Gbl.F.Out,"",
- ClassDat,Gbl.RowEvenOdd);
- if (ICanViewScore)
- fprintf (Gbl.F.Out,"%.2lf",
- NumQstsInThisTest ? ScoreInThisTest * Tst_SCORE_MAX / (double) NumQstsInThisTest :
- 0.0);
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out,"%.2lf | ",
+ ClassDat,Gbl.RowEvenOdd,
+ NumQstsInThisResult ? ScoreInThisResult * Tst_SCORE_MAX / (double) NumQstsInThisResult :
+ 0.0);
/* Link to show this result */
fprintf (Gbl.F.Out,"",
Gbl.RowEvenOdd);
- if (ICanViewTest)
- {
- Frm_StartForm (Gbl.Action.Act == ActSeeMyTstRes ? ActSeeOneTstResMe :
- ActSeeOneTstResOth);
- // Tst_PutParamTstCod (TstCod); // TODO: Change to matches results
- Ico_PutIconLink ("tasks.svg",Txt_View_test);
- Frm_EndForm ();
- }
+ Frm_StartForm (Gbl.Action.Act == ActSeeMyMchRes ? ActSeeOneMchResMe :
+ ActSeeOneMchResOth);
+ // Tst_PutParamTstCod (TstCod); // TODO: Change to matches results
+ Ico_PutIconLink ("tasks.svg",Txt_View_test);
+ Frm_EndForm ();
fprintf (Gbl.F.Out," | "
"
");
-
- if (Gbl.Test.AllowTeachers)
- NumExamsVisibleByTchs++;
}
/***** Write totals for this user *****/
@@ -2962,8 +2917,7 @@ void Mch_ShowOneMchResult (void)
extern const char *Txt_Score;
extern const char *Txt_out_of_PART_OF_A_SCORE;
long MchResCod;
- time_t StartTimeUTC = 0; // Match result UTC date-time, initialized to avoid warning
- time_t EndTimeUTC = 0; // Match result UTC date-time, initialized to avoid warning
+ time_t TimeUTC[Dat_NUM_START_END_TIME]; // Match result UTC date-time
unsigned NumQstsNotBlank;
double TotalScore;
bool ShowPhoto;
@@ -2978,8 +2932,7 @@ void Mch_ShowOneMchResult (void)
/***** Get test result data *****/
Mch_GetMatchResultDataByMchCod (MchResCod,
- &StartTimeUTC,
- &EndTimeUTC,
+ TimeUTC,
&Gbl.Test.NumQsts,
&NumQstsNotBlank,
&TotalScore);
@@ -3096,8 +3049,8 @@ void Mch_ShowOneMchResult (void)
""
"",
Txt_Date,
- StartTimeUTC,(unsigned) Gbl.Prefs.DateFormat,Txt_Today,
- EndTimeUTC ,(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
+ TimeUTC[Dat_START_TIME],(unsigned) Gbl.Prefs.DateFormat,Txt_Today,
+ TimeUTC[Dat_END_TIME],(unsigned) Gbl.Prefs.DateFormat,Txt_Today);
/* Number of questions */
fprintf (Gbl.F.Out,""
@@ -3151,14 +3104,14 @@ void Mch_ShowOneMchResult (void)
/*****************************************************************************/
static void Mch_GetMatchResultDataByMchCod (long MchResCod,
- time_t *StartTimeUTC,
- time_t *EndTimeUTC,
+ time_t TimeUTC[Dat_NUM_START_END_TIME],
unsigned *NumQsts,
unsigned *NumQstsNotBlank,
double *Score)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
+ Dat_StartEndTime_t StartEndTime;
/***** Make database query *****/
if (DB_QuerySELECT (&mysql_res,"can not get data"
@@ -3185,8 +3138,10 @@ static void Mch_GetMatchResultDataByMchCod (long MchResCod,
Gbl.Test.AllowTeachers = (row[1][0] == 'Y');
/* Get start time (row[1] and row[2] hold UTC date-times) */
- *StartTimeUTC = Dat_GetUNIXTimeFromStr (row[1]);
- *EndTimeUTC = Dat_GetUNIXTimeFromStr (row[2]);
+ for (StartEndTime = (Dat_StartEndTime_t) 0;
+ StartEndTime <= (Dat_StartEndTime_t) (Dat_NUM_START_END_TIME - 1);
+ StartEndTime++)
+ TimeUTC[StartEndTime] = Dat_GetUNIXTimeFromStr (row[1 + StartEndTime]);
/* Get number of questions (row[3]) */
if (sscanf (row[3],"%u",NumQsts) != 1)
diff --git a/swad_test.c b/swad_test.c
index 68009d50..d7bffc83 100644
--- a/swad_test.c
+++ b/swad_test.c
@@ -290,7 +290,6 @@ static void Tst_StoreScoreOfTestResultInDB (long TstCod,
unsigned NumQstsNotBlank,double Score);
static void Tst_ShowHeaderTestResults (void);
static void Tst_ShowTstResults (struct UsrData *UsrDat);
-static void Tst_ShowDataUsr (struct UsrData *UsrDat,unsigned NumExams);
static void Tst_PutParamTstCod (long TstCod);
static long Tst_GetParamTstCod (void);
static void Tst_ShowTestResultsSummaryRow (bool ItsMe,
@@ -7654,7 +7653,7 @@ static void Tst_ShowTstResults (struct UsrData *UsrDat)
/***** Show user's data *****/
fprintf (Gbl.F.Out,"
");
- Tst_ShowDataUsr (UsrDat,NumExams);
+ Usr_ShowTableCellWithUsrData (UsrDat,NumExams);
/***** Get and print test results *****/
if (NumExams)
@@ -7821,67 +7820,6 @@ static void Tst_ShowTstResults (struct UsrData *UsrDat)
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
}
-/*****************************************************************************/
-/******************** Show a row with the data of a user *********************/
-/*****************************************************************************/
-
-static void Tst_ShowDataUsr (struct UsrData *UsrDat,unsigned NumExams)
- {
- bool ShowPhoto;
- char PhotoURL[PATH_MAX + 1];
- Act_Action_t NextAction;
-
- /***** Show user's photo and name *****/
- fprintf (Gbl.F.Out,"",
- Gbl.RowEvenOdd);
- ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (UsrDat,PhotoURL);
- Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL :
- NULL,
- "PHOTO45x60",Pho_ZOOM,false);
- fprintf (Gbl.F.Out," | ");
-
- /***** Start form to go to user's record card *****/
- fprintf (Gbl.F.Out,"",
- Gbl.RowEvenOdd);
- switch (UsrDat->Roles.InCurrentCrs.Role)
- {
- case Rol_STD:
- NextAction = ActSeeRecOneStd;
- break;
- case Rol_NET:
- case Rol_TCH:
- NextAction = ActSeeRecOneTch;
- break;
- default:
- NextAction = ActUnk;
- Lay_ShowErrorAndExit ("Wrong role.");
- break;
- }
- Frm_StartForm (NextAction);
- Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
- Frm_LinkFormSubmit (UsrDat->FullName,"AUTHOR_TXT",NULL);
-
- /***** Show user's ID *****/
- ID_WriteUsrIDs (UsrDat,NULL);
-
- /***** Show user's name *****/
- fprintf (Gbl.F.Out," %s",UsrDat->Surname1);
- if (UsrDat->Surname2[0])
- fprintf (Gbl.F.Out," %s",UsrDat->Surname2);
- if (UsrDat->FirstName[0])
- fprintf (Gbl.F.Out,", %s",UsrDat->FirstName);
-
- /***** End form *****/
- Frm_EndForm ();
- fprintf (Gbl.F.Out," | ");
- }
-
/*****************************************************************************/
/******************** Write parameter with code of test **********************/
/*****************************************************************************/
diff --git a/swad_user.c b/swad_user.c
index 89f1e9a0..8e1893c1 100644
--- a/swad_user.c
+++ b/swad_user.c
@@ -9728,3 +9728,65 @@ void Usr_WriteAuthor1Line (long UsrCod,bool Hidden)
/***** Free memory used for user's data *****/
Usr_UsrDataDestructor (&UsrDat);
}
+
+/*****************************************************************************/
+/*************** Show a table cell with the data of a user *******************/
+/*****************************************************************************/
+
+void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows)
+ {
+ bool ShowPhoto;
+ char PhotoURL[PATH_MAX + 1];
+ Act_Action_t NextAction;
+
+ /***** Show user's photo and name *****/
+ fprintf (Gbl.F.Out,"",
+ Gbl.RowEvenOdd);
+ ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (UsrDat,PhotoURL);
+ Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL :
+ NULL,
+ "PHOTO45x60",Pho_ZOOM,false);
+ fprintf (Gbl.F.Out," | ");
+
+ /***** Start form to go to user's record card *****/
+ fprintf (Gbl.F.Out,"",
+ Gbl.RowEvenOdd);
+ switch (UsrDat->Roles.InCurrentCrs.Role)
+ {
+ case Rol_STD:
+ NextAction = ActSeeRecOneStd;
+ break;
+ case Rol_NET:
+ case Rol_TCH:
+ NextAction = ActSeeRecOneTch;
+ break;
+ default:
+ NextAction = ActUnk;
+ Lay_ShowErrorAndExit ("Wrong role.");
+ break;
+ }
+ Frm_StartForm (NextAction);
+ Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
+ Frm_LinkFormSubmit (UsrDat->FullName,"AUTHOR_TXT",NULL);
+
+ /***** Show user's ID *****/
+ ID_WriteUsrIDs (UsrDat,NULL);
+
+ /***** Show user's name *****/
+ fprintf (Gbl.F.Out," %s",UsrDat->Surname1);
+ if (UsrDat->Surname2[0])
+ fprintf (Gbl.F.Out," %s",UsrDat->Surname2);
+ if (UsrDat->FirstName[0])
+ fprintf (Gbl.F.Out,", %s",UsrDat->FirstName);
+
+ /***** End form *****/
+ Frm_EndForm ();
+ fprintf (Gbl.F.Out," | ");
+ }
+
diff --git a/swad_user.h b/swad_user.h
index e40d84c7..e0489b40 100644
--- a/swad_user.h
+++ b/swad_user.h
@@ -480,4 +480,6 @@ void Usr_PrintUsrQRCode (void);
void Usr_WriteAuthor1Line (long UsrCod,bool Hidden);
+void Usr_ShowTableCellWithUsrData (struct UsrData *UsrDat,unsigned NumRows);
+
#endif