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