Version 23.55: Jan 16, 2024 Responsive design in exams. Changes in exam sessions and matches.

This commit is contained in:
acanas 2024-01-16 17:06:02 +01:00
parent 1ae3517481
commit 3a5446a560
18 changed files with 303 additions and 417 deletions

View File

@ -1779,7 +1779,7 @@ a:hover img.CENTER_PHOTO_SHOW
.PRG_DATE
{
box-sizing:border-box;
max-width:80px;
max-width:72px;
overflow:hidden;
text-overflow:ellipsis;
}
@ -1798,7 +1798,7 @@ a:hover img.CENTER_PHOTO_SHOW
.PRG_DATE
{
box-sizing:border-box;
max-width:132px;
max-width:120px;
overflow:hidden;
text-overflow:ellipsis;
}
@ -1813,7 +1813,7 @@ a:hover img.CENTER_PHOTO_SHOW
.PRG_DATE
{
box-sizing:border-box;
max-width:132px;
max-width:120px;
overflow:hidden;
text-overflow:ellipsis;
}
@ -2216,7 +2216,6 @@ a:hover img.CENTER_PHOTO_SHOW
box-sizing:border-box;
width:100%;
text-align:center;
vertical-align:middle;
}
.FRAME
@ -3258,21 +3257,21 @@ table.CELLS_PAD_10 > tbody > tr > td {padding:10px;}
.REC_C1_BOT
{
box-sizing:border-box;
width:170px;
max-width:170px;
width:150px;
max-width:150px;
overflow:hidden;
}
.REC_C2_BOT
{
box-sizing:border-box;
width:366px;
max-width:366px;
width:386px;
max-width:386px;
overflow:hidden;
}
.REC_C2_BOT_INPUT
{
box-sizing:border-box;
width:362px;
width:382px;
}
}
@ -3427,48 +3426,48 @@ legend {font-size:12pt;}
.DATE_RED_PURPLE,
.DATE_RED_BLUE,
.DATE_RED_YELLOW,
.DATE_RED_PINK {color:#660000; font-size:12pt;}
.DATE_RED_DARK {color:#f98a8a; font-size:12pt;}
.DATE_RED_PINK {color:#660000; font-size:10pt;}
.DATE_RED_DARK {color:#f98a8a; font-size:10pt;}
.DATE_RED_LIGHT_WHITE,
.DATE_RED_LIGHT_GREY,
.DATE_RED_LIGHT_PURPLE,
.DATE_RED_LIGHT_BLUE,
.DATE_RED_LIGHT_YELLOW,
.DATE_RED_LIGHT_PINK {color:rgba(102, 0, 0,0.3); font-size:12pt;}
.DATE_RED_LIGHT_DARK {color:rgba(249,138,138,0.3); font-size:12pt;}
.DATE_RED_LIGHT_PINK {color:rgba(102, 0, 0,0.3); font-size:10pt;}
.DATE_RED_LIGHT_DARK {color:rgba(249,138,138,0.3); font-size:10pt;}
.DATE_GREEN_WHITE,
.DATE_GREEN_GREY,
.DATE_GREEN_PURPLE,
.DATE_GREEN_BLUE,
.DATE_GREEN_YELLOW,
.DATE_GREEN_PINK {color:#246600; font-size:12pt;}
.DATE_GREEN_DARK {color:#80c040; font-size:12pt;}
.DATE_GREEN_PINK {color:#246600; font-size:10pt;}
.DATE_GREEN_DARK {color:#80c040; font-size:10pt;}
.DATE_GREEN_LIGHT_WHITE,
.DATE_GREEN_LIGHT_GREY,
.DATE_GREEN_LIGHT_PURPLE,
.DATE_GREEN_LIGHT_BLUE,
.DATE_GREEN_LIGHT_YELLOW,
.DATE_GREEN_LIGHT_PINK {color:rgba( 36,100, 0,0.3); font-size:12pt;}
.DATE_GREEN_LIGHT_DARK {color:rgba(128,196, 64,0.3); font-size:12pt;}
.DATE_GREEN_LIGHT_PINK {color:rgba( 36,100, 0,0.3); font-size:10pt;}
.DATE_GREEN_LIGHT_DARK {color:rgba(128,196, 64,0.3); font-size:10pt;}
.DATE_BLUE_WHITE,
.DATE_BLUE_GREY,
.DATE_BLUE_PURPLE,
.DATE_BLUE_BLUE,
.DATE_BLUE_YELLOW,
.DATE_BLUE_PINK {color:#4d88a1; font-size:12pt;}
.DATE_BLUE_DARK {color:#afc4cc; font-size:12pt;}
.DATE_BLUE_PINK {color:#4d88a1; font-size:10pt;}
.DATE_BLUE_DARK {color:#afc4cc; font-size:10pt;}
.DATE_BLUE_LIGHT_WHITE,
.DATE_BLUE_LIGHT_GREY,
.DATE_BLUE_LIGHT_PURPLE,
.DATE_BLUE_LIGHT_BLUE,
.DATE_BLUE_LIGHT_YELLOW,
.DATE_BLUE_LIGHT_PINK {color:rgba( 77,136,161,0.3); font-size:12pt;}
.DATE_BLUE_LIGHT_DARK {color:rgba(175,196,204,0.3); font-size:12pt;}
.DATE_BLUE_LIGHT_PINK {color:rgba( 77,136,161,0.3); font-size:10pt;}
.DATE_BLUE_LIGHT_DARK {color:rgba(175,196,204,0.3); font-size:10pt;}
.ASG_LST_DATE_GREEN_WHITE,
.ASG_LST_DATE_GREEN_GREY,

View File

@ -2073,7 +2073,7 @@ void HTM_TD_Txt_Right (const char *Txt)
void HTM_TD_TxtColon (const char *Txt)
{
HTM_TD_Begin ("class=\"REC_C1_BOT RT FORM_IN_%s\"",The_GetSuffix ());
HTM_TD_Begin ("class=\"RT FORM_IN_%s\"",The_GetSuffix ());
HTM_TxtColon (Txt);
HTM_TD_End ();
}

View File

@ -762,7 +762,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActInvSetQst ] = {1910,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_InvalidateQst ,NULL},
[ActReqNewExaSes ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes ,NULL},
[ActEdiOneExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes ,NULL},
[ActReqChgExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes ,NULL},
[ActNewExaSes ] = {1853,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReceiveFormSession ,NULL},
[ActChgExaSes ] = {1903,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReceiveFormSession ,NULL},
[ActReqRemExaSes ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqRemSession ,NULL},
@ -789,12 +789,12 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeOneGam ] = {1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL},
[ActReqNewMch ] = {1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ReqCreatOrEditMatch ,NULL},
[ActReqChgMch ] = {1913,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ReqCreatOrEditMatch ,NULL},
[ActNewMch ] = {1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_CreateNewMatch ,Mch_ResumeMatch ,NULL},
[ActChgMch ] = {1914,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ChangeMatch ,NULL},
[ActReqRemMch ] = {1783,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ReqRemMatch ,NULL},
[ActRemMch ] = {1784,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_RemoveMatch ,NULL},
[ActEdiMch ] = {1913,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_EditMatch ,NULL},
[ActChgMch ] = {1914,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ChangeMatch ,NULL},
[ActReqNewMch ] = {1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReqNewMatch ,NULL},
[ActNewMch ] = {1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_CreateNewMatch ,Mch_ResumeMatch ,NULL},
[ActResMch ] = {1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_GetMatchBeingPlayed ,Mch_ResumeMatch ,NULL},
[ActBckMch ] = {1790,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_BackMatch ,NULL},
[ActPlyPauMch ] = {1789,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_PlayPauseMatch ,NULL},
@ -3797,7 +3797,7 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActChgNumQstExaSet, // #1899
ActHidExaSes, // #1900
ActUnhExaSes, // #1901
ActEdiOneExaSes, // #1902
ActReqChgExaSes, // #1902
ActChgExaSes, // #1903
ActSeeExaPrn, // #1904
-1, // #1905 (obsolete action)
@ -3808,7 +3808,7 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActInvSetQst, // #1910
ActChgRooMAC, // #1911
ActLstOneGam, // #1912
ActEdiMch, // #1913
ActReqChgMch, // #1913
ActChgMch, // #1914
-1, // #1915 (obsolete action)
-1, // #1916 (obsolete action)

View File

@ -687,7 +687,7 @@
#define ActInvSetQst (ActChgCrsTT1stDay + 153)
#define ActReqNewExaSes (ActChgCrsTT1stDay + 154)
#define ActEdiOneExaSes (ActChgCrsTT1stDay + 155)
#define ActReqChgExaSes (ActChgCrsTT1stDay + 155)
#define ActNewExaSes (ActChgCrsTT1stDay + 156)
#define ActChgExaSes (ActChgCrsTT1stDay + 157)
#define ActReqRemExaSes (ActChgCrsTT1stDay + 158)
@ -711,12 +711,12 @@
#define ActChgVisExaRes (ActChgCrsTT1stDay + 174)
#define ActSeeOneGam (ActChgCrsTT1stDay + 175)
#define ActReqRemMch (ActChgCrsTT1stDay + 176)
#define ActRemMch (ActChgCrsTT1stDay + 177)
#define ActEdiMch (ActChgCrsTT1stDay + 178)
#define ActReqNewMch (ActChgCrsTT1stDay + 176)
#define ActReqChgMch (ActChgCrsTT1stDay + 177)
#define ActNewMch (ActChgCrsTT1stDay + 178)
#define ActChgMch (ActChgCrsTT1stDay + 179)
#define ActReqNewMch (ActChgCrsTT1stDay + 180)
#define ActNewMch (ActChgCrsTT1stDay + 181)
#define ActReqRemMch (ActChgCrsTT1stDay + 180)
#define ActRemMch (ActChgCrsTT1stDay + 181)
#define ActResMch (ActChgCrsTT1stDay + 182)
#define ActBckMch (ActChgCrsTT1stDay + 183)
#define ActPlyPauMch (ActChgCrsTT1stDay + 184)

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/
#define Log_PLATFORM_VERSION "SWAD 23.54 (2023-12-20)"
#define CSS_FILE "swad23.54.css"
#define Log_PLATFORM_VERSION "SWAD 23.55 (2024-01-16)"
#define CSS_FILE "swad23.55.css"
#define JS_FILE "swad23.53.6.js"
/*
Version 23.55: Jan 16, 2024 Responsive design in exams. Changes in exam sessions and matches. (335819 lines)
Version 23.54: Dec 20, 2023 Responsive design in games and matches. (335906 lines)
Version 23.53.7: Dec 20, 2023 Layout changes in hierarchy edition. (335883 lines)
Version 23.53.6: Dec 19, 2023 Responsive design in questions. (335874 lines)

View File

@ -1793,7 +1793,7 @@ void Dat_WriteLocalDateHMSFromUTC (const char *Id,time_t TimeUTC,
static const char *SeparatorStr[Dat_NUM_SEPARATORS] =
{
[Dat_SEPARATOR_NONE ] = "",
[Dat_SEPARATOR_COMMA] = ", ",
[Dat_SEPARATOR_COMMA] = ", ",
[Dat_SEPARATOR_BREAK] = "<br />",
};

View File

@ -239,7 +239,7 @@ void Exa_ListAllExams (struct Exa_Exams *Exams)
Exams->CurrentPage = (unsigned) Pagination.CurrentPage;
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Exams,
Box_BoxBegin (NULL,Txt_Exams,
Exa_PutIconsListExams,Exams,
Hlp_ASSESSMENT_Exams,Box_NOT_CLOSABLE);
@ -250,7 +250,7 @@ void Exa_ListAllExams (struct Exa_Exams *Exams)
if (Exams->Num)
{
/***** Table head *****/
HTM_TABLE_BeginWideMarginPadding (5);
HTM_TABLE_Begin ("TBL_SCROLL");
HTM_TR_Begin (NULL);
HTM_TH_Span (NULL,HTM_HEAD_CENTER,1,1,"CONTEXT_COL"); // Column for contextual icons
@ -406,23 +406,20 @@ void Exa_SeeOneExam (void)
Exa_GetExamDataByCod (&Exams.Exam);
/***** Show exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/
/******************************* Show one exam *******************************/
/*****************************************************************************/
void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession)
void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,Frm_PutForm_t PutFormSession)
{
Exa_ShowOnlyOneExamBegin (Exams,Session,PutFormSession);
Exa_ShowOnlyOneExamBegin (Exams,PutFormSession);
Exa_ShowOnlyOneExamEnd ();
}
void Exa_ShowOnlyOneExamBegin (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession)
{
extern const char *Hlp_ASSESSMENT_Exams;
@ -439,7 +436,7 @@ void Exa_ShowOnlyOneExamBegin (struct Exa_Exams *Exams,
true); // Show only this exam
/***** List sessions *****/
ExaSes_ListSessions (Exams,Session,PutFormSession);
ExaSes_ListSessions (Exams,PutFormSession);
}
void Exa_ShowOnlyOneExamEnd (void)
@ -472,7 +469,7 @@ static void Exa_ShowOneExam (struct Exa_Exams *Exams,bool ShowOnlyThisExam)
/***** Begin box and table *****/
if (ShowOnlyThisExam)
HTM_TABLE_BeginWidePadding (2);
HTM_TABLE_Begin ("TBL_SCROLL");
/***** Begin first row of this exam *****/
HTM_TR_Begin (NULL);

View File

@ -42,11 +42,8 @@ void Exa_ListAllExams (struct Exa_Exams *Exams);
bool Exa_CheckIfICanEditExams (void);
void Exa_SeeOneExam (void);
void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession);
void Exa_ShowOnlyOneExam (struct Exa_Exams *Exams,Frm_PutForm_t PutFormSession);
void Exa_ShowOnlyOneExamBegin (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession);
void Exa_ShowOnlyOneExamEnd (void);

View File

@ -79,7 +79,7 @@ struct ExaRes_ICanView
static void ExaRes_ListMyResultsInCrs (struct Exa_Exams *Exams);
static void ExaRes_ListMyResultsInExa (struct Exa_Exams *Exams);
static void ExaRes_ListMyResultsInSes (struct Exa_Exams *Exams,long SesCod);
static void ExaRes_ListMyResultsInSes (struct Exa_Exams *Exams);
static void ExaRes_PutFormToSelUsrsToViewResults (__attribute__((unused)) void *Args);
static void ExaRes_ShowAllResultsInSelectedExams (void *Exams);
@ -186,13 +186,11 @@ void ExaRes_ShowMyResultsInExa (void)
{
extern const char *Txt_Results_of_exam_X;
struct Exa_Exams Exams;
struct ExaSes_Session Session;
char *Title;
/***** Reset exams context *****/
Exa_ResetExams (&Exams);
Exa_ResetExam (&Exams.Exam);
ExaSes_ResetSession (&Session);
/***** Get parameters *****/
Exa_GetPars (&Exams,Exa_CHECK_EXA_COD);
@ -201,7 +199,7 @@ void ExaRes_ShowMyResultsInExa (void)
Exa_GetExamDataByCod (&Exams.Exam);
/***** Exam begin *****/
Exa_ShowOnlyOneExamBegin (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExamBegin (&Exams,Frm_DONT_PUT_FORM);
/***** List my sessions results in exam *****/
if (asprintf (&Title,Txt_Results_of_exam_X,Exams.Exam.Title) < 0)
@ -243,33 +241,33 @@ void ExaRes_ShowMyResultsInSes (void)
/***** Get parameters *****/
Exa_GetPars (&Exams,Exa_CHECK_EXA_COD);
Session.SesCod = ParCod_GetAndCheckPar (ParCod_Ses);
Exams.SesCod = Session.SesCod = ParCod_GetAndCheckPar (ParCod_Ses);
Exa_GetExamDataByCod (&Exams.Exam);
ExaSes_GetSessionDataByCod (&Session);
/***** Exam begin *****/
Exa_ShowOnlyOneExamBegin (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExamBegin (&Exams,Frm_DONT_PUT_FORM);
/***** List my sessions results in session *****/
if (asprintf (&Title,Txt_Results_of_session_X,Session.Title) < 0)
Err_NotEnoughMemoryExit ();
ExaRes_ShowResultsBegin (&Exams,Title,false); // Do not list exams to select
free (Title);
ExaRes_ListMyResultsInSes (&Exams,Session.SesCod);
ExaRes_ListMyResultsInSes (&Exams);
ExaRes_ShowResultsEnd ();
/***** Exam end *****/
Exa_ShowOnlyOneExamEnd ();
}
static void ExaRes_ListMyResultsInSes (struct Exa_Exams *Exams,long SesCod)
static void ExaRes_ListMyResultsInSes (struct Exa_Exams *Exams)
{
/***** Table header *****/
ExaRes_ShowHeaderResults (Usr_ME);
/***** List my sessions results in exam *****/
TstCfg_GetConfig (); // Get feedback type
ExaRes_ShowResults (Exams,Usr_ME,SesCod,-1L,NULL);
ExaRes_ShowResults (Exams,Usr_ME,Exams->SesCod,-1L,NULL);
}
/*****************************************************************************/
@ -391,7 +389,7 @@ void ExaRes_ShowAllResultsInExa (void)
Exa_GetExamDataByCod (&Exams.Exam);
/***** Exam begin *****/
Exa_ShowOnlyOneExamBegin (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExamBegin (&Exams,Frm_DONT_PUT_FORM);
/***** List sessions results in exam *****/
if (asprintf (&Title,Txt_Results_of_exam_X,Exams.Exam.Title) < 0)
@ -455,14 +453,14 @@ void ExaRes_ShowAllResultsInSes (void)
/***** Get parameters *****/
Exa_GetPars (&Exams,Exa_CHECK_EXA_COD);
Session.SesCod = ParCod_GetAndCheckPar (ParCod_Ses);
Exams.SesCod = Session.SesCod = ParCod_GetAndCheckPar (ParCod_Ses);
/***** Get exam data and session *****/
Exa_GetExamDataByCod (&Exams.Exam);
ExaSes_GetSessionDataByCod (&Session);
/***** Exam begin *****/
Exa_ShowOnlyOneExamBegin (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExamBegin (&Exams,Frm_DONT_PUT_FORM);
/***** List sessions results in session *****/
if (asprintf (&Title,Txt_Results_of_session_X,Session.Title) < 0)

View File

@ -69,7 +69,7 @@ static void ExaSes_PutIconsInListOfSessions (void *Exams);
static void ExaSes_PutIconToCreateNewSession (struct Exa_Exams *Exams);
static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
long SesCodToBeEdited,
Frm_PutForm_t PutFormSession,
unsigned NumSessions,
MYSQL_RES *mysql_res);
static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions);
@ -136,7 +136,6 @@ void ExaSes_ResetSession (struct ExaSes_Session *Session)
/*****************************************************************************/
void ExaSes_ListSessions (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession)
{
extern const char *Hlp_ASSESSMENT_Exams_sessions;
@ -144,61 +143,28 @@ void ExaSes_ListSessions (struct Exa_Exams *Exams,
MYSQL_RES *mysql_res;
unsigned NumSessions;
/***** Get data of sessions from database *****/
NumSessions = Exa_DB_GetSessions (&mysql_res,Exams->Exam.ExaCod);
/***** Begin box *****/
Box_BoxBegin ("100%",Txt_Sessions,
Box_BoxBegin (NULL,Txt_Sessions,
ExaSes_PutIconsInListOfSessions,Exams,
Hlp_ASSESSMENT_Exams_sessions,Box_NOT_CLOSABLE);
/***** Select whether show only my groups or all groups *****/
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
if (Gbl.Crs.Grps.NumGrps)
{
Set_BeginSettingsHead ();
/***** Select whether show only my groups or all groups *****/
if (Gbl.Crs.Grps.NumGrps && ExaSes_CheckIfICanEditSessions ())
{
Set_BeginSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeOneExa,Exa_PutPars,Exams);
Set_EndSettingsHead ();
}
break;
default:
break;
}
Set_EndSettingsHead ();
}
/***** Show the table with the sessions *****/
if ((NumSessions = Exa_DB_GetSessions (&mysql_res,Exams->Exam.ExaCod)))
ExaSes_ListOneOrMoreSessions (Exams,
PutFormSession &&
Session->SesCod > 0 ? Session->SesCod :
-1L,
NumSessions,mysql_res);
/***** Show the table with the sessions *****/
ExaSes_ListOneOrMoreSessions (Exams,PutFormSession,
NumSessions,mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
/***** Put button to create a new exam session in this exam *****/
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
if (PutFormSession == Frm_PUT_FORM && Session->SesCod <= 0)
{
/* Reset session */
ExaSes_ResetSession (Session);
Session->ExaCod = Exams->Exam.ExaCod;
Session->TimeUTC[Dat_STR_TIME] = Dat_GetStartExecutionTimeUTC (); // Now
Session->TimeUTC[Dat_END_TIME] = Session->TimeUTC[Dat_STR_TIME] + (1 * 60 * 60); // Now + 1 hour
Str_Copy (Session->Title,Exams->Exam.Title,sizeof (Session->Title) - 1);
/* Put form to create new session */
ExaSes_PutFormSession (Session); // Form to create session
}
break;
default:
break;
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
/***** End box *****/
Box_BoxEnd ();
@ -264,28 +230,28 @@ static void ExaSes_PutIconToCreateNewSession (struct Exa_Exams *Exams)
/*****************************************************************************/
static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
long SesCodToBeEdited,
Frm_PutForm_t PutFormSession,
unsigned NumSessions,
MYSQL_RES *mysql_res)
{
unsigned NumSession;
unsigned UniqueId;
char *Anchor;
struct ExaSes_Session Session;
char *Anchor;
bool ICanEditSessions = ExaSes_CheckIfICanEditSessions ();
/***** Trivial check *****/
if (!NumSessions)
return;
long SesCodToBeEdited = PutFormSession == Frm_PUT_FORM &&
Exams->SesCod > 0 ? Exams->SesCod :
-1L;
/***** Reset session *****/
ExaSes_ResetSession (&Session);
/***** Begin table with sessions *****/
HTM_TABLE_BeginWidePadding (2);
HTM_TABLE_Begin ("TBL_SCROLL");
/***** Write the heading *****/
ExaSes_ListOneOrMoreSessionsHeading (ICanEditSessions);
if (NumSessions)
ExaSes_ListOneOrMoreSessionsHeading (ICanEditSessions);
/***** Write rows *****/
for (NumSession = 0, UniqueId = 1, The_ResetRowColor ();
@ -301,16 +267,13 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
if (asprintf (&Anchor,"evt_%ld_%ld",Exams->Exam.ExaCod,Session.SesCod) < 0)
Err_NotEnoughMemoryExit ();
/***** Begin row for this exam session ****/
/***** First row for this session ****/
HTM_TR_Begin (NULL);
/* Icons */
if (ICanEditSessions)
ExaSes_ListOneOrMoreSessionsIcons (Exams,&Session,Anchor);
/* Session participant */
ExaSes_ListOneOrMoreSessionsAuthor (&Session);
/* Start/end date/time */
ExaSes_ListOneOrMoreSessionsTimes (&Session,UniqueId);
@ -320,16 +283,21 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
/* Session result visible? */
ExaSes_ListOneOrMoreSessionsResult (Exams,&Session);
/***** End row for this session ****/
HTM_TR_End ();
/***** For to edit this session ****/
if (Session.SesCod == SesCodToBeEdited)
/***** Second row: session author */
HTM_TR_Begin (NULL);
ExaSes_ListOneOrMoreSessionsAuthor (&Session);
HTM_TR_End ();
/***** Third row: form to edit this session ****/
if (ICanEditSessions && PutFormSession == Frm_PUT_FORM && // Editing...
Session.SesCod == SesCodToBeEdited) // ...this session
{
HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"6\" class=\"CT %s\"",
HTM_TD_Begin ("colspan=\"5\" class=\"LT %s\"",
The_GetColorRows ());
ExaSes_PutFormSession (&Session); // Form to edit existing session
ExaSes_PutFormSession (&Session); // Form to edit this session
HTM_TD_End ();
HTM_TR_End ();
}
@ -339,6 +307,25 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
}
}
/***** Put form to create a new exam session in this exam *****/
if (ICanEditSessions && PutFormSession == Frm_PUT_FORM &&
SesCodToBeEdited <= 0)
{
/* Reset session */
ExaSes_ResetSession (&Session);
Session.ExaCod = Exams->Exam.ExaCod;
Session.TimeUTC[Dat_STR_TIME] = Dat_GetStartExecutionTimeUTC (); // Now
Session.TimeUTC[Dat_END_TIME] = Session.TimeUTC[Dat_STR_TIME] + (1 * 60 * 60); // Now + 1 hour
Str_Copy (Session.Title,Exams->Exam.Title,sizeof (Session.Title) - 1);
/* Put form to create new session */
HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"5\" class=\"LT %s\"",The_GetColorRows ());
ExaSes_PutFormSession (&Session); // Form to create session
HTM_TD_End ();
HTM_TR_End ();
}
/***** End table with sessions *****/
HTM_TABLE_End ();
}
@ -349,7 +336,6 @@ static void ExaSes_ListOneOrMoreSessions (struct Exa_Exams *Exams,
static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions)
{
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME];
extern const char *Txt_Session;
extern const char *Txt_Results;
@ -362,7 +348,6 @@ static void ExaSes_ListOneOrMoreSessionsHeading (bool ICanEditSessions)
HTM_TH_Empty (1);
/***** The rest of columns *****/
HTM_TH (Txt_ROLES_SINGUL_Abc[Rol_TCH][Usr_SEX_UNKNOWN],HTM_HEAD_LEFT );
HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_START_DATE] ,HTM_HEAD_LEFT );
HTM_TH (Txt_START_END_TIME[Exa_ORDER_BY_END_DATE ] ,HTM_HEAD_LEFT );
HTM_TH (Txt_Session ,HTM_HEAD_LEFT );
@ -438,7 +423,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
Exams->SesCod = Session->SesCod;
/***** Begin cell *****/
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ());
if (ExaSes_CheckIfICanEditThisSession (Session->UsrCod))
{
@ -452,7 +437,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
Session->HiddenOrVisible);
/***** Icon to edit the exam session *****/
Ico_PutContextualIconToEdit (ActEdiOneExaSes,Anchor,
Ico_PutContextualIconToEdit (ActReqChgExaSes,Anchor,
ExaSes_PutParsEdit,Exams);
}
@ -467,7 +452,7 @@ static void ExaSes_ListOneOrMoreSessionsIcons (struct Exa_Exams *Exams,
static void ExaSes_ListOneOrMoreSessionsAuthor (const struct ExaSes_Session *Session)
{
/***** Session author (teacher) *****/
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
HTM_TD_Begin ("colspan=\"2\" class=\"LT %s\"",The_GetColorRows ());
Usr_WriteAuthor1Line (Session->UsrCod,Session->HiddenOrVisible);
HTM_TD_End ();
}
@ -516,7 +501,7 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
extern const char *Txt_Resume;
extern const char *HidVis_TitleClass[HidVis_NUM_HIDDEN_VISIBLE];
HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
HTM_TD_Begin ("rowspan=\"2\" class=\"LT %s\"",The_GetColorRows ());
/***** Session title *****/
HTM_ARTICLE_Begin (Anchor);
@ -627,7 +612,7 @@ static void ExaSes_ListOneOrMoreSessionsResult (struct Exa_Exams *Exams,
[Rol_SYS_ADM] = ExaSes_ListOneOrMoreSessionsResultTch,
};
HTM_TD_Begin ("class=\"CT DAT_%s %s\"",
HTM_TD_Begin ("rowspan=\"2\" class=\"CT DAT_%s %s\"",
The_GetSuffix (),The_GetColorRows ());
if (Function[Gbl.Usrs.Me.Role.Logged])
@ -720,7 +705,7 @@ void ExaSes_ToggleVisResultsSesUsr (void)
Exa_DB_ToggleVisResultsSesUsr (&Session);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/
@ -808,7 +793,7 @@ void ExaSes_ReqRemSession (void)
Session.Title);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/
@ -853,7 +838,7 @@ void ExaSes_RemoveSession (void)
Exa_GetExamDataByCod (&Exams.Exam);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/
@ -891,7 +876,7 @@ static void ExaSes_HideUnhideSession (HidVis_HiddenOrVisible_t HiddenOrVisible)
Exa_DB_HideUnhideSession (&Session,HiddenOrVisible);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/
@ -945,10 +930,10 @@ static void ExaSes_PutFormSession (struct ExaSes_Session *Session)
};
bool ItsANewSession = (Session->SesCod <= 0);
/***** Begin section for a new exam session *****/
/***** Begin section for exam session *****/
HTM_SECTION_Begin (ExaSes_NEW_SESSION_SECTION_ID);
/***** Begin form to create *****/
/***** Begin form to create/edit *****/
Frm_BeginFormTable (ItsANewSession ? ActNewExaSes :
ActChgExaSes,
ExaSes_NEW_SESSION_SECTION_ID,
@ -964,7 +949,7 @@ static void ExaSes_PutFormSession (struct ExaSes_Session *Session)
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",ExaSes_MAX_CHARS_TITLE,Session->Title,
HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Title\" size=\"45\" class=\"INPUT_%s\""
"id=\"Title\" class=\"REC_C2_BOT_INPUT INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
@ -983,7 +968,7 @@ static void ExaSes_PutFormSession (struct ExaSes_Session *Session)
Frm_EndFormTable (ItsANewSession ? Btn_CREATE_BUTTON :
Btn_CONFIRM_BUTTON);
/***** End section for a new exam session *****/
/***** End section for exam session *****/
HTM_SECTION_End ();
}
@ -1012,7 +997,7 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
HTM_TR_Begin (NULL);
HTM_TD_TxtColon (Txt_Groups);
HTM_TD_Begin ("class=\"LT\"");
Box_BoxTableBegin ("95%",NULL,
Box_BoxTableBegin ("100%",NULL,
NULL,NULL,
NULL,Box_NOT_CLOSABLE,0);
@ -1055,7 +1040,7 @@ static void ExaSes_ShowLstGrpsToCreateSession (long SesCod)
}
/*****************************************************************************/
/****************** Request the creation of a new session ********************/
/*************** Request the creation or edition of a session ****************/
/*****************************************************************************/
void ExaSes_ReqCreatOrEditSes (void)
@ -1094,7 +1079,7 @@ void ExaSes_ReqCreatOrEditSes (void)
}
/***** Show exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_PUT_FORM); // Put form for session
Exa_ShowOnlyOneExam (&Exams,Frm_PUT_FORM); // Put form for session
}
/*****************************************************************************/
@ -1176,7 +1161,7 @@ void ExaSes_ReceiveFormSession (void)
Exa_GetExamDataByCod (&Exams.Exam);
/***** Show current exam *****/
Exa_ShowOnlyOneExam (&Exams,&Session,Frm_DONT_PUT_FORM);
Exa_ShowOnlyOneExam (&Exams,Frm_DONT_PUT_FORM);
}
/*****************************************************************************/

View File

@ -51,7 +51,6 @@ struct ExaSes_UsrAnswer
void ExaSes_ResetSession (struct ExaSes_Session *Session);
void ExaSes_ListSessions (struct Exa_Exams *Exams,
struct ExaSes_Session *Session,
Frm_PutForm_t PutFormSession);
void ExaSes_GetSessionDataByCod (struct ExaSes_Session *Session);

View File

@ -180,8 +180,7 @@ void Gam_ResetGames (struct Gam_Games *Games)
Games->ListQuestions = NULL;
Games->GamCodsSelected = NULL; // String with selected game codes separated by separator multiple
Games->Game.GamCod = -1L; // Current/selected game code
Games->MchCod.Current =
Games->MchCod.Selected = -1L; // Current/selected match code
Games->MchCod = -1L; // Current/selected match code
Games->QstInd = 0; // Current question index
}
@ -2158,31 +2157,6 @@ static bool Gam_CheckIfEditable (const struct Gam_Game *Game)
return false; // Questions are not editable
}
/*****************************************************************************/
/************* Request the creation of a new match as a teacher **************/
/*****************************************************************************/
void Gam_ReqNewMatch (void)
{
struct Gam_Games Games;
/***** Reset games context *****/
Gam_ResetGames (&Games);
/***** Reset game *****/
Gam_ResetGame (&Games.Game);
/***** Get parameters *****/
if ((Games.Game.GamCod = Gam_GetPars (&Games)) <= 0)
Err_WrongGameExit ();
Gam_GetGameDataByCod (&Games.Game);
/***** Show game *****/
Gam_ShowOnlyOneGame (&Games,
false, // Do not list game questions
Frm_PUT_FORM);
}
/*****************************************************************************/
/************************* Show test tags in a game **************************/
/*****************************************************************************/

View File

@ -97,11 +97,7 @@ struct Gam_Games
char *ListQuestions;
char *GamCodsSelected; // String with selected game codes separated by separator multiple
struct Gam_Game Game; // Selected/current game
struct
{
long Selected; // Current match code
long Current;
} MchCod;
long MchCod; // Selected/current match
unsigned QstInd; // Current question index
};
@ -160,8 +156,6 @@ void Gam_RemoveQstFromGame (void);
void Gam_MoveUpQst (void);
void Gam_MoveDownQst (void);
void Gam_ReqNewMatch (void);
void Gam_ShowTstTagsPresentInAGame (long GamCod);
void Gam_GetScoreRange (long GamCod,double *MinScore,double *MaxScore);

View File

@ -100,6 +100,7 @@ static void Mch_PutIconsInListOfMatches (void *Games);
static void Mch_PutIconToCreateNewMatch (struct Gam_Games *Games);
static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
Frm_PutForm_t PutFormMatch,
unsigned NumMatches,
MYSQL_RES *mysql_res);
static void Mch_ListOneOrMoreMatchesHeading (bool ICanEditMatches);
@ -135,10 +136,8 @@ static void Mch_ListOneOrMoreMatchesResultTch (struct Gam_Games *Games,
static void Mch_GetMatchDataFromRow (MYSQL_RES *mysql_res,
struct Mch_Match *Match);
static void Mch_PutFormExistingMatch (struct Gam_Games *Games,
const struct Mch_Match *Match,
const char *Anchor);
static void Mch_PutFormNewMatch (const struct Gam_Game *Game);
static void Mch_PutFormMatch (struct Mch_Match *Match);
static void Mch_ParsFormMatch (void *Match);
static void Mch_ShowLstGrpsToEditMatch (long MchCod);
static void Mch_UpdateMatchTitleAndGrps (const struct Mch_Match *Match);
@ -269,7 +268,8 @@ void Mch_ResetMatch (struct Mch_Match *Match)
/************************* List the matches of a game ************************/
/*****************************************************************************/
void Mch_ListMatches (struct Gam_Games *Games,Frm_PutForm_t PutFormNewMatch)
void Mch_ListMatches (struct Gam_Games *Games,
Frm_PutForm_t PutFormNewMatch)
{
extern const char *Hlp_ASSESSMENT_Games_matches;
extern const char *Txt_Matches;
@ -285,33 +285,20 @@ void Mch_ListMatches (struct Gam_Games *Games,Frm_PutForm_t PutFormNewMatch)
Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE);
/***** Select whether show only my groups or all groups *****/
switch (Gbl.Usrs.Me.Role.Logged)
if (Gbl.Crs.Grps.NumGrps && Mch_CheckIfICanEditMatches ())
{
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
if (Gbl.Crs.Grps.NumGrps)
{
Set_BeginSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeOneGam,Gam_PutPars,Games);
Set_EndSettingsHead ();
}
break;
default:
break;
Set_BeginSettingsHead ();
Grp_ShowFormToSelWhichGrps (ActSeeOneGam,Gam_PutPars,Games);
Set_EndSettingsHead ();
}
/***** Show the table with the matches *****/
if (NumMatches)
Mch_ListOneOrMoreMatches (Games,NumMatches,mysql_res);
Mch_ListOneOrMoreMatches (Games,PutFormNewMatch,
NumMatches,mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
/***** Put button to play a new match in this game *****/
if (PutFormNewMatch == Frm_PUT_FORM)
Mch_PutFormNewMatch (&Games->Game); // Form to fill in data and start playing a new match
/***** End box *****/
Box_BoxEnd ();
}
@ -368,6 +355,7 @@ static void Mch_PutIconToCreateNewMatch (struct Gam_Games *Games)
/*****************************************************************************/
static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
Frm_PutForm_t PutFormMatch,
unsigned NumMatches,
MYSQL_RES *mysql_res)
{
@ -376,10 +364,9 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
struct Mch_Match Match;
char *Anchor;
bool ICanEditMatches = Mch_CheckIfICanEditMatches ();
/***** Trivial check *****/
if (!NumMatches)
return;
long MchCodToBeEdited = PutFormMatch == Frm_PUT_FORM &&
Games->MchCod > 0 ? Games->MchCod :
-1L;
/***** Reset match *****/
Mch_ResetMatch (&Match);
@ -388,7 +375,8 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
HTM_TABLE_Begin ("TBL_SCROLL");
/***** Write the heading *****/
Mch_ListOneOrMoreMatchesHeading (ICanEditMatches);
if (NumMatches)
Mch_ListOneOrMoreMatchesHeading (ICanEditMatches);
/***** Write rows *****/
for (NumMatch = 0, UniqueId = 1, The_ResetRowColor ();
@ -405,7 +393,6 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
Err_NotEnoughMemoryExit ();
/***** First row for this match with match data ****/
/* Begin first row */
HTM_TR_Begin (NULL);
/* Icons */
@ -427,35 +414,24 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
/* Match result visible? */
Mch_ListOneOrMoreMatchesResult (Games,&Match);
/* End first row */
HTM_TR_End ();
/***** Second row for this match with author ****/
/* Begin second row */
/***** Second row: match author ****/
HTM_TR_Begin (NULL);
/* Match author */
Mch_ListOneOrMoreMatchesAuthor (Games,&Match);
/* End second row */
HTM_TR_End ();
/***** Third row for this match used for edition ****/
if (Gbl.Action.Act == ActEdiMch && // Editing...
Match.MchCod == Games->MchCod.Selected) // ...this match
if (ICanEditMatches && PutFormMatch == Frm_PUT_FORM && // Editing...
Match.MchCod == MchCodToBeEdited) // ...this match
/***** Check if I can edit this match *****/
if (Mch_CheckIfICanEditThisMatch (&Match))
{
/* Begin third row */
HTM_TR_Begin (NULL);
/* Form to edit match */
HTM_TD_Begin ("colspan=\"7\" class=\"LT %s\"",
The_GetColorRows ());
Mch_PutFormExistingMatch (Games,&Match,Anchor); // Form to fill in data and edit this match
Mch_PutFormMatch (&Match); // Form to edit this match
HTM_TD_End ();
/* End third row */
HTM_TR_End ();
}
@ -464,6 +440,23 @@ static void Mch_ListOneOrMoreMatches (struct Gam_Games *Games,
}
}
/***** Put button to play a new match in this game *****/
if (ICanEditMatches && PutFormMatch == Frm_PUT_FORM &&
MchCodToBeEdited <= 0)
{
/* Reset match */
Mch_ResetMatch (&Match);
Match.GamCod = Games->Game.GamCod;
Str_Copy (Match.Title,Games->Game.Title,sizeof (Match.Title) - 1);
/* Put form to create new match */
HTM_TR_Begin (NULL);
HTM_TD_Begin ("colspan=\"7\" class=\"LT %s\"",The_GetColorRows ());
Mch_PutFormMatch (&Match); // Form to create match
HTM_TD_End ();
HTM_TR_End ();
}
/***** End table *****/
HTM_TABLE_End ();
}
@ -523,6 +516,9 @@ static bool Mch_CheckIfICanEditMatches (void)
static bool Mch_CheckIfICanEditThisMatch (const struct Mch_Match *Match)
{
if (Match->MchCod <= 0)
return true;
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
@ -561,15 +557,14 @@ static void Mch_ListOneOrMoreMatchesIcons (struct Gam_Games *Games,
if (Mch_CheckIfICanEditThisMatch (Match))
{
// Games->Game.GamCod = Match->GamCod;
Games->MchCod.Current = Match->MchCod;
Games->MchCod = Match->MchCod;
/***** Put icon to remove the match *****/
Ico_PutContextualIconToRemove (ActReqRemMch,NULL,
Mch_PutParsEdit,Games);
/***** Put icon to edit the match *****/
Ico_PutContextualIconToEdit (ActEdiMch,Anchor,
Ico_PutContextualIconToEdit (ActReqChgMch,Anchor,
Mch_PutParsEdit,Games);
}
else
@ -820,16 +815,14 @@ static void Mch_ListOneOrMoreMatchesResult (struct Gam_Games *Games,
static void Mch_ListOneOrMoreMatchesResultStd (struct Gam_Games *Games,
const struct Mch_Match *Match)
{
Games->MchCod = Match->MchCod;
/***** Is match result visible or hidden? *****/
if (Match->Status.ShowUsrResults)
{
/* Result is visible by me */
Games->Game.GamCod = Match->GamCod;
Games->MchCod.Current = Match->MchCod;
Lay_PutContextualLinkOnlyIcon (ActSeeMyMchResMch,MchRes_RESULTS_BOX_ID,
Mch_PutParsEdit,Games,
"trophy.svg",Ico_BLACK);
}
else
/* Result is forbidden to me */
Ico_PutIconNotVisible ();
@ -841,8 +834,7 @@ static void Mch_ListOneOrMoreMatchesResultTch (struct Gam_Games *Games,
extern const char *Txt_Visible_results;
extern const char *Txt_Hidden_results;
Games->Game.GamCod = Match->GamCod;
Games->MchCod.Current = Match->MchCod;
Games->MchCod = Match->MchCod;
/***** Show match results *****/
if (Mch_CheckIfICanEditThisMatch (Match))
@ -1118,10 +1110,10 @@ void Mch_RemoveMatchesMadeByUsrInCrs (long UsrCod,long CrsCod)
}
/*****************************************************************************/
/************************ Edit a match (game instance) ***********************/
/**************** Request the creation or edition of a match *****************/
/*****************************************************************************/
void Mch_EditMatch (void)
void Mch_ReqCreatOrEditMatch (void)
{
struct Gam_Games Games;
struct Mch_Match Match;
@ -1138,10 +1130,10 @@ void Mch_EditMatch (void)
if (!Mch_CheckIfICanEditThisMatch (&Match))
Err_NoPermissionExit ();
/***** Show current game *****/
/***** Show game *****/
Gam_ShowOnlyOneGame (&Games,
false, // Do not list game questions
Frm_DONT_PUT_FORM);
Frm_PUT_FORM);
}
/*****************************************************************************/
@ -1153,7 +1145,7 @@ void Mch_PutParsEdit (void *Games)
if (Games)
{
Gam_PutPars (Games);
ParCod_PutPar (ParCod_Mch,((struct Gam_Games *) Games)->MchCod.Current);
ParCod_PutPar (ParCod_Mch,((struct Gam_Games *) Games)->MchCod);
}
}
@ -1162,7 +1154,7 @@ void Mch_PutParsEdit (void *Games)
/*****************************************************************************/
void Mch_GetAndCheckPars (struct Gam_Games *Games,
struct Mch_Match *Match)
struct Mch_Match *Match)
{
/***** Get parameters *****/
/* Get parameters of game */
@ -1170,150 +1162,76 @@ void Mch_GetAndCheckPars (struct Gam_Games *Games,
Err_WrongGameExit ();
Grp_GetParWhichGroups ();
Gam_GetGameDataByCod (&Games->Game);
/* Get match code */
Match->MchCod = ParCod_GetAndCheckPar (ParCod_Mch);
Mch_GetMatchDataByCod (Match);
/***** Ensure parameters are correct *****/
if (Games->Game.GamCod != Match->GamCod)
Err_WrongGameExit ();
if (Games->Game.CrsCod != Gbl.Hierarchy.Node[Hie_CRS].HieCod)
Err_WrongGameExit ();
/* Get match code */
if ((Match->MchCod = ParCod_GetPar (ParCod_Mch)) > 0)
{
Mch_GetMatchDataByCod (Match);
if (Games->Game.GamCod != Match->GamCod)
Err_WrongGameExit ();
}
else
Mch_ResetMatch (Match);
/***** Initialize context *****/
Games->MchCod.Current =
Games->MchCod.Selected = Match->MchCod;
Games->MchCod = Match->MchCod;
}
/*****************************************************************************/
/******************* Put a form to change and existing match *****************/
/*****************************************************************************/
static void Mch_PutFormExistingMatch (struct Gam_Games *Games,
const struct Mch_Match *Match,
const char *Anchor)
static void Mch_PutFormMatch (struct Mch_Match *Match)
{
extern const char *Hlp_ASSESSMENT_Games_matches;
extern const char *Txt_Title;
extern const char *Txt_Save_changes;
bool ItsANewMatch = (Match->MchCod <= 0);
/***** Begin form *****/
Frm_BeginFormAnchor (ActChgMch,Anchor);
Mch_PutParsEdit (Games);
/***** Begin box and table *****/
Box_BoxTableBegin (NULL,Match->Title,
NULL,NULL,
Hlp_ASSESSMENT_Games_matches,Box_CLOSABLE,2);
/***** Match title *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("RT","Title",Txt_Title);
/* Data */
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",Mch_MAX_CHARS_TITLE,Match->Title,
HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Title\" size=\"45\" class=\"INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
HTM_TR_End ();
/***** Groups *****/
Mch_ShowLstGrpsToEditMatch (Match->MchCod);
/***** End table *****/
HTM_TABLE_End ();
/***** Put button to submit the form *****/
Btn_PutConfirmButton (Txt_Save_changes);
/***** End box *****/
Box_BoxEnd ();
/***** End form *****/
Frm_EndForm ();
}
/*****************************************************************************/
/********************** Put a form to create a new match *********************/
/*****************************************************************************/
static void Mch_PutFormNewMatch (const struct Gam_Game *Game)
{
extern const char *Hlp_ASSESSMENT_Games_matches;
extern const char *Txt_Match;
extern const char *Txt_Title;
extern const char *Txt_Play;
/***** Trivial check: roles allowed *****/
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
break;
default:
Err_NoPermissionExit ();
break;
}
/***** Begin section for a new match *****/
/***** Begin section for match *****/
HTM_SECTION_Begin (Mch_NEW_MATCH_SECTION_ID);
/***** Begin form *****/
Frm_BeginForm (ActNewMch);
ParCod_PutPar (ParCod_Gam,Game->GamCod);
Gam_PutParQstInd (0); // Start by first question in game
/***** Begin form to create/edit *****/
Frm_BeginFormTable (ItsANewMatch ? ActNewMch :
ActChgMch,
Mch_NEW_MATCH_SECTION_ID,
Mch_ParsFormMatch,Match);
/***** Begin box and table *****/
Box_BoxTableBegin (NULL,Txt_Match,
NULL,NULL,
Hlp_ASSESSMENT_Games_matches,Box_NOT_CLOSABLE,2);
/***** Match title *****/
HTM_TR_Begin (NULL);
/***** Match title *****/
HTM_TR_Begin (NULL);
/* Label */
Frm_LabelColumn ("RT","Title",Txt_Title);
/* Label */
Frm_LabelColumn ("RT","Title",Txt_Title);
/* Data */
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",Mch_MAX_CHARS_TITLE,Game->Title,
/* Data */
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_TEXT ("Title",Mch_MAX_CHARS_TITLE,Match->Title,
HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Title\" size=\"45\" class=\"INPUT_%s\""
" required=\"required\"",
The_GetSuffix ());
HTM_TD_End ();
HTM_TD_End ();
HTM_TR_End ();
HTM_TR_End ();
/***** Groups *****/
Mch_ShowLstGrpsToEditMatch (-1L);
/***** Groups *****/
Mch_ShowLstGrpsToEditMatch (Match->MchCod);
/***** End table *****/
HTM_TABLE_End ();
/***** End form to create *****/
Frm_EndFormTable (ItsANewMatch ? Btn_CREATE_BUTTON :
Btn_CONFIRM_BUTTON);
/***** Put icon to submit the form *****/
HTM_INPUT_IMAGE (Cfg_URL_ICON_PUBLIC,"play.svg",
Txt_Play,
"class=\"CONTEXT_OPT ICO_HIGHLIGHT ICO64x64\"");
/***** End box *****/
Box_BoxEnd ();
/***** End form *****/
Frm_EndForm ();
/***** End section for a new match *****/
/***** End section for exam session *****/
HTM_SECTION_End ();
}
static void Mch_ParsFormMatch (void *Match)
{
ParCod_PutPar (ParCod_Gam,((struct Mch_Match *) Match)->GamCod);
ParCod_PutPar (ParCod_Mch,((struct Mch_Match *) Match)->MchCod);
}
/*****************************************************************************/
/***************** Show list of groups to create a new match *****************/
/*****************************************************************************/
@ -1334,7 +1252,7 @@ static void Mch_ShowLstGrpsToEditMatch (long MchCod)
HTM_TD_TxtColon (Txt_Groups);
HTM_TD_Begin ("class=\"LT\"");
Box_BoxTableBegin ("95%",NULL,
Box_BoxTableBegin ("100%",NULL,
NULL,NULL,
NULL,Box_NOT_CLOSABLE,0);
@ -2759,7 +2677,7 @@ static void Mch_PutIfAnswered (const struct Mch_Match *Match,bool Answered)
}
/*****************************************************************************/
/***************** Put checkbox to select if show results ********************/
/******************** Put checkbox to remove my answer ***********************/
/*****************************************************************************/
static void Mch_PutIconToRemoveMyAnswer (const struct Mch_Match *Match)
@ -2771,7 +2689,7 @@ static void Mch_PutIconToRemoveMyAnswer (const struct Mch_Match *Match)
/***** Begin form *****/
Frm_BeginForm (ActRemMchAnsQstStd);
ParCod_PutPar (ParCod_Mch,Match->MchCod); // Current match being played
ParCod_PutPar (ParCod_Mch,Match->MchCod); // Current match being played
Gam_PutParQstInd (Match->Status.QstInd); // Current question index shown
/***** Put icon with link *****/
@ -3027,9 +2945,9 @@ static void Mch_ShowQuestionAndAnswersStd (const struct Mch_Match *Match,
is necessary in order to be fast
and not lose clicks due to refresh */
Frm_BeginForm (ActAnsMchQstStd);
ParCod_PutPar (ParCod_Mch,Match->MchCod); // Current match being played
ParCod_PutPar (ParCod_Mch,Match->MchCod); // Current match being played
Gam_PutParQstInd (Match->Status.QstInd); // Current question index shown
Mch_PutParNumOpt (NumOpt); // Number of button
Mch_PutParNumOpt (NumOpt); // Number of button
HTM_BUTTON_Submit_Begin (NULL,
"class=\"MCH_STD_BUTTON%s BT_%c\""

View File

@ -94,7 +94,8 @@ long Mch_GetMchCodBeingPlayed (void);
void Mch_ResetMatch (struct Mch_Match *Match);
void Mch_ListMatches (struct Gam_Games *Games,Frm_PutForm_t PutFormNewMatch);
void Mch_ListMatches (struct Gam_Games *Games,
Frm_PutForm_t PutFormNewMatch);
void Mch_GetMatchDataByCod (struct Mch_Match *Match);
void Mch_ToggleVisResultsMchUsr (void);
@ -107,11 +108,11 @@ void Mch_RemoveMatchesInCourseFromAllTables (long CrsCod);
void Mch_RemoveMatchesMadeByUsrInAllCrss (long UsrCod);
void Mch_RemoveMatchesMadeByUsrInCrs (long UsrCod,long CrsCod);
void Mch_EditMatch (void);
void Mch_ReqCreatOrEditMatch (void);
void Mch_PutParsEdit (void *Games);
void Mch_GetAndCheckPars (struct Gam_Games *Games,
struct Mch_Match *Match);
struct Mch_Match *Match);
void Mch_CreateNewMatch (void);
void Mch_ChangeMatch (void);

View File

@ -874,8 +874,8 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
The_GetColorRows ());
if (ICanView.Result)
{
Games->Game.GamCod = Match.GamCod;
Games->MchCod.Current = Match.MchCod;
Games->Game.GamCod = Match.GamCod;
Games->MchCod = Match.MchCod;
switch (MeOrOther)
{
case Usr_ME:

View File

@ -1822,7 +1822,7 @@ static void Svy_ShowLstGrpsToEditSurvey (long SvyCod)
HTM_TR_Begin (NULL);
HTM_TD_TxtColon (Txt_Groups);
HTM_TD_Begin ("class=\"LT\"");
Box_BoxTableBegin ("95%",NULL,
Box_BoxTableBegin ("100%",NULL,
NULL,NULL,
NULL,Box_NOT_CLOSABLE,0);

View File

@ -12459,7 +12459,7 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Request new exam session" // Çeviri lazim!
#endif
,
[ActEdiOneExaSes] =
[ActReqChgExaSes] =
#if L==1 // ca
"Edit exam session" // Necessita traducció
#elif L==2 // de
@ -12940,52 +12940,6 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"See game" // Precisa de tradução
#elif L==10 // tr
"See game" // Çeviri lazim!
#endif
,
[ActReqRemMch] =
#if L==1 // ca
"Request removal of match" // Necessita traducció
#elif L==2 // de
"Request removal of match" // Need Übersetzung
#elif L==3 // en
"Request removal of match"
#elif L==4 // es
"Solicitar eliminaci&oacute;n de partida"
#elif L==5 // fr
"Request removal of match" // Besoin de traduction
#elif L==6 // gn
"Solicitar eliminaci&oacute;n de partida" // Okoteve traducción
#elif L==7 // it
"Request removal of match" // Bisogno di traduzione
#elif L==8 // pl
"Request removal of match" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Request removal of match" // Precisa de tradução
#elif L==10 // tr
"Request removal of match" // Çeviri lazim!
#endif
,
[ActRemMch] =
#if L==1 // ca
"Eliminar partida"
#elif L==2 // de
"Spiel entfernen"
#elif L==3 // en
"Remove match"
#elif L==4 // es
"Eliminar partida"
#elif L==5 // fr
"Supprimer match"
#elif L==6 // gn
"Eliminar partida" // Okoteve traducción
#elif L==7 // it
"Rimuovere partita"
#elif L==8 // pl
"Usu&nacute; mecz"
#elif L==9 // pt
"Remover jogo"
#elif L==10 // tr
"E&scedil;le&scedil;meyi kald&inodot;r"
#endif
,
[ActReqNewMch] =
@ -13009,6 +12963,29 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Request creation of new match" // Precisa de tradução
#elif L==10 // tr
"Request creation of new match" // Çeviri lazim!
#endif
,
[ActReqChgMch] =
#if L==1 // ca
"Request edition of match" // Necessita traducció
#elif L==2 // de
"Request edition of match" // Need Übersetzung
#elif L==3 // en
"Request edition of match"
#elif L==4 // es
"Solicitar creaci&oacute;n de nueva partida"
#elif L==5 // fr
"Request edition of match" // Besoin de traduction
#elif L==6 // gn
"Solicitar creaci&oacute;n de nueva partida" // Okoteve traducción
#elif L==7 // it
"Request edition of match" // Bisogno di traduzione
#elif L==8 // pl
"Request edition of match" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Request edition of match" // Precisa de tradução
#elif L==10 // tr
"Request edition of match" // Çeviri lazim!
#endif
,
[ActNewMch] =
@ -13055,6 +13032,52 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] =
"Change match" // Precisa de tradução
#elif L==10 // tr
"Change match" // Çeviri lazim!
#endif
,
[ActReqRemMch] =
#if L==1 // ca
"Request removal of match" // Necessita traducció
#elif L==2 // de
"Request removal of match" // Need Übersetzung
#elif L==3 // en
"Request removal of match"
#elif L==4 // es
"Solicitar eliminaci&oacute;n de partida"
#elif L==5 // fr
"Request removal of match" // Besoin de traduction
#elif L==6 // gn
"Solicitar eliminaci&oacute;n de partida" // Okoteve traducción
#elif L==7 // it
"Request removal of match" // Bisogno di traduzione
#elif L==8 // pl
"Request removal of match" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"Request removal of match" // Precisa de tradução
#elif L==10 // tr
"Request removal of match" // Çeviri lazim!
#endif
,
[ActRemMch] =
#if L==1 // ca
"Eliminar partida"
#elif L==2 // de
"Spiel entfernen"
#elif L==3 // en
"Remove match"
#elif L==4 // es
"Eliminar partida"
#elif L==5 // fr
"Supprimer match"
#elif L==6 // gn
"Eliminar partida" // Okoteve traducción
#elif L==7 // it
"Rimuovere partita"
#elif L==8 // pl
"Usu&nacute; mecz"
#elif L==9 // pt
"Remover jogo"
#elif L==10 // tr
"E&scedil;le&scedil;meyi kald&inodot;r"
#endif
,
[ActResMch] =