Version19.169

This commit is contained in:
acanas 2020-04-08 03:06:45 +02:00
parent 19c764abf7
commit d84b913144
25 changed files with 1141 additions and 954 deletions

View File

@ -4939,7 +4939,7 @@ int swad__getMatches (struct soap *soap,
struct swad__getMatchesOutput *getMatchesOut) // output
{
int ReturnCode;
struct Game Game;
struct Gam_Game Game;
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
@ -5119,8 +5119,8 @@ int swad__getMatchStatus (struct soap *soap,
struct swad__getMatchStatusOutput *getMatchStatusOut) // output
{
int ReturnCode;
struct Match Match;
struct Game Game;
struct Mch_Match Match;
struct Gam_Game Game;
bool ICanPlayThisMatchBasedOnGrps;
unsigned NumOptions;
struct Mch_UsrAnswer UsrAnswer;

View File

@ -675,13 +675,13 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActSeeMyMchResCrs ] = {1796,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowMyMchResultsInCrs ,NULL},
[ActSeeMyMchResGam ] = {1810,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowMyMchResultsInGam ,NULL},
[ActSeeMyMchResMch ] = {1812,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowMyMchResultsInMch ,NULL},
[ActSeeOneMchResMe ] = {1797,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowOneMchResult ,NULL},
[ActSeeOneMchResMe ] = {1797,-1,TabUnk,ActSeeAllGam ,0x208,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowOneMchResult ,NULL},
[ActReqSeeAllMchRes ] = {1798,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_SelUsrsToViewMchResults ,NULL},
[ActSeeAllMchResCrs ] = {1799,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowAllMchResultsInCrs ,NULL},
[ActSeeAllMchResGam ] = {1811,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowAllMchResultsInGam ,NULL},
[ActSeeAllMchResMch ] = {1813,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowAllMchResultsInMch ,NULL},
[ActSeeOneMchResOth ] = {1800,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowOneMchResult ,NULL},
[ActSeeOneMchResOth ] = {1800,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,MchRes_ShowOneMchResult ,NULL},
[ActChgVisResMchUsr ] = {1801,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ToggleVisibilResultsMchUsr ,NULL},

View File

@ -108,18 +108,18 @@ static void Agd_PutIconsOtherPublicAgenda (void *EncryptedUsrCod);
static void Agd_PutButtonToCreateNewEvent (void);
static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod);
static void Agd_GetParamEventOrder (void);
static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent,
static void Agd_PutFormsToRemEditOneEvent (struct Agd_Event *AgdEvent,
const char *Anchor);
static void Agd_PutCurrentParamsMyAgenda (void *Agenda);
static void Agd_GetParams (Agd_AgendaType_t AgendaType);
static void Agd_GetListEvents (Agd_AgendaType_t AgendaType);
static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent);
static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,
static void Agd_GetDataOfEventByCod (struct Agd_Event *AgdEvent);
static void Agd_GetEventTxtFromDB (struct Agd_Event *AgdEvent,
char Txt[Cns_MAX_BYTES_TEXT + 1]);
static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt);
static void Agd_UpdateEvent (struct AgendaEvent *AgdEvent,const char *Txt);
static void Agd_CreateEvent (struct Agd_Event *AgdEvent,const char *Txt);
static void Agd_UpdateEvent (struct Agd_Event *AgdEvent,const char *Txt);
/*****************************************************************************/
/********** Put form to log in and then show another user's agenda ***********/
@ -739,7 +739,7 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
char *Anchor = NULL;
static unsigned UniqueId = 0;
char *Id;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
Dat_StartEndTime_t StartEndTime;
char Txt[Cns_MAX_BYTES_TEXT + 1];
@ -845,7 +845,7 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
/******************* Put a link (form) to edit one event *********************/
/*****************************************************************************/
static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent,
static void Agd_PutFormsToRemEditOneEvent (struct Agd_Event *AgdEvent,
const char *Anchor)
{
extern const char *Txt_Event_private_click_to_make_it_visible_to_the_users_of_your_courses;
@ -1145,7 +1145,7 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
/*********************** Get event data using its code ***********************/
/*****************************************************************************/
static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
static void Agd_GetDataOfEventByCod (struct Agd_Event *AgdEvent)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -1240,7 +1240,7 @@ void Agd_FreeListEvents (void)
/*********************** Get event text from database ************************/
/*****************************************************************************/
static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,
static void Agd_GetEventTxtFromDB (struct Agd_Event *AgdEvent,
char Txt[Cns_MAX_BYTES_TEXT + 1])
{
MYSQL_RES *mysql_res;
@ -1289,7 +1289,7 @@ void Agd_AskRemEvent (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_event_X;
extern const char *Txt_Remove_event;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get parameters *****/
Agd_GetParams (Agd_MY_AGENDA);
@ -1321,7 +1321,7 @@ void Agd_AskRemEvent (void)
void Agd_RemoveEvent (void)
{
extern const char *Txt_Event_X_removed;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
@ -1350,7 +1350,7 @@ void Agd_RemoveEvent (void)
void Agd_HideEvent (void)
{
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
@ -1376,7 +1376,7 @@ void Agd_HideEvent (void)
void Agd_UnhideEvent (void)
{
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
@ -1403,7 +1403,7 @@ void Agd_UnhideEvent (void)
void Agd_MakeEventPrivate (void)
{
extern const char *Txt_Event_X_is_now_private;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
@ -1434,7 +1434,7 @@ void Agd_MakeEventPrivate (void)
void Agd_MakeEventPublic (void)
{
extern const char *Txt_Event_X_is_now_visible_to_users_of_your_courses;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
@ -1473,7 +1473,7 @@ void Agd_RequestCreatOrEditEvent (void)
extern const char *Txt_Description;
extern const char *Txt_Create_event;
extern const char *Txt_Save_changes;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
bool ItsANewEvent;
char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
@ -1606,7 +1606,7 @@ void Agd_RecFormEvent (void)
extern const char *Txt_You_must_specify_the_title_of_the_event;
extern const char *Txt_Created_new_event_X;
extern const char *Txt_The_event_has_been_modified;
struct AgendaEvent AgdEvent;
struct Agd_Event AgdEvent;
bool ItsANewEvent;
bool NewEventIsCorrect = true;
char EventTxt[Cns_MAX_BYTES_TEXT + 1];
@ -1684,7 +1684,7 @@ void Agd_RecFormEvent (void)
/************************** Create a new event *******************************/
/*****************************************************************************/
static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt)
static void Agd_CreateEvent (struct Agd_Event *AgdEvent,const char *Txt)
{
/***** Create a new event *****/
AgdEvent->AgdCod =
@ -1706,7 +1706,7 @@ static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt)
/************************ Update an existing event ***************************/
/*****************************************************************************/
static void Agd_UpdateEvent (struct AgendaEvent *AgdEvent,const char *Txt)
static void Agd_UpdateEvent (struct Agd_Event *AgdEvent,const char *Txt)
{
/***** Update the data of the event *****/
DB_QueryUPDATE ("can not update event",

View File

@ -47,7 +47,7 @@ typedef enum
Agd_END_TIME = 1,
} Agd_StartOrEndTime_t;
struct AgendaEvent
struct Agd_Event
{
long AgdCod;
long UsrCod;

View File

@ -83,35 +83,35 @@ static void Asg_ShowAllAssignments (struct Asg_Assignments *Assignments);
static void Asg_PutHeadForSeeing (struct Asg_Assignments *Assignments,
bool PrintView);
static bool Asg_CheckIfICanCreateAssignments (void);
static void Asg_PutIconsListAssignments (void *Args);
static void Asg_PutIconsListAssignments (void *Assignments);
static void Asg_PutIconToCreateNewAsg (void *Assignments);
static void Asg_PutButtonToCreateNewAsg (void *Assignments);
static void Asg_ParamsWhichGroupsToShow (void *Args);
static void Asg_ParamsWhichGroupsToShow (void *Assignments);
static void Asg_ShowOneAssignment (long AsgCod,bool PrintView);
static void Asg_WriteAsgAuthor (struct Assignment *Asg);
static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView);
static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg);
static void Asg_WriteAssignmentFolder (struct Asg_Assignment *Asg,bool PrintView);
static Dat_StartEndTime_t Asg_GetParamAsgOrder (void);
static void Asg_PutFormsToRemEditOneAsg (const struct Assignment *Asg,
static void Asg_PutFormsToRemEditOneAsg (const struct Asg_Assignment *Asg,
const char *Anchor);
static void Asg_PutParams (void *Assignments);
static void Asg_GetListAssignments (struct Asg_Assignments *Assignments);
static void Asg_GetDataOfAssignment (struct Assignment *Asg,
static void Asg_GetDataOfAssignment (struct Asg_Assignment *Asg,
MYSQL_RES **mysql_res,
unsigned long NumRows);
static void Asg_ResetAssignment (struct Assignment *Asg);
static void Asg_ResetAssignment (struct Asg_Assignment *Asg);
static void Asg_FreeListAssignments (struct Asg_Assignments *Assignments);
static void Asg_GetAssignmentTxtFromDB (long AsgCod,char Txt[Cns_MAX_BYTES_TEXT + 1]);
static void Asg_PutParamAsgCod (long AsgCod);
static bool Asg_CheckIfSimilarAssignmentExists (const char *Field,const char *Value,long AsgCod);
static void Asg_ShowLstGrpsToEditAssignment (long AsgCod);
static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigned NumUsrsToBeNotifiedByEMail);
static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt);
static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt);
static void Asg_CreateAssignment (struct Asg_Assignment *Asg,const char *Txt);
static void Asg_UpdateAssignment (struct Asg_Assignment *Asg,const char *Txt);
static bool Asg_CheckIfAsgIsAssociatedToGrps (long AsgCod);
static void Asg_RemoveAllTheGrpsAssociatedToAnAssignment (long AsgCod);
static void Asg_CreateGrps (long AsgCod);
static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Assignment *Asg);
static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *Asg);
static bool Asg_CheckIfIBelongToCrsOrGrpsThisAssignment (long AsgCod);
/*****************************************************************************/
@ -395,7 +395,7 @@ static void Asg_ShowOneAssignment (long AsgCod,bool PrintView)
char *Anchor = NULL;
static unsigned UniqueId = 0;
char *Id;
struct Assignment Asg;
struct Asg_Assignment Asg;
Dat_StartEndTime_t StartEndTime;
char Txt[Cns_MAX_BYTES_TEXT + 1];
@ -521,7 +521,7 @@ static void Asg_ShowOneAssignment (long AsgCod,bool PrintView)
/********************* Write the author of an assignment *********************/
/*****************************************************************************/
static void Asg_WriteAsgAuthor (struct Assignment *Asg)
static void Asg_WriteAsgAuthor (struct Asg_Assignment *Asg)
{
Usr_WriteAuthor1Line (Asg->UsrCod,Asg->Hidden);
}
@ -530,7 +530,7 @@ static void Asg_WriteAsgAuthor (struct Assignment *Asg)
/********************* Write the folder of an assignment *********************/
/*****************************************************************************/
static void Asg_WriteAssignmentFolder (struct Assignment *Asg,bool PrintView)
static void Asg_WriteAssignmentFolder (struct Asg_Assignment *Asg,bool PrintView)
{
extern const char *Txt_Upload_file_or_create_folder;
extern const char *Txt_Folder;
@ -611,7 +611,7 @@ static Dat_StartEndTime_t Asg_GetParamAsgOrder (void)
/***************** Put a link (form) to edit one assignment ******************/
/*****************************************************************************/
static void Asg_PutFormsToRemEditOneAsg (const struct Assignment *Asg,
static void Asg_PutFormsToRemEditOneAsg (const struct Asg_Assignment *Asg,
const char *Anchor)
{
struct Asg_Assignments Assignments;
@ -760,7 +760,7 @@ static void Asg_GetListAssignments (struct Asg_Assignments *Assignments)
/******************* Get assignment data using its code **********************/
/*****************************************************************************/
void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg)
{
MYSQL_RES *mysql_res;
unsigned long NumRows;
@ -793,7 +793,7 @@ void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg)
/*************** Get assignment data using its folder name *******************/
/*****************************************************************************/
void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg)
{
MYSQL_RES *mysql_res;
unsigned long NumRows;
@ -826,7 +826,7 @@ void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg)
/************************* Get assignment data *******************************/
/*****************************************************************************/
static void Asg_GetDataOfAssignment (struct Assignment *Asg,
static void Asg_GetDataOfAssignment (struct Asg_Assignment *Asg,
MYSQL_RES **mysql_res,
unsigned long NumRows)
{
@ -880,7 +880,7 @@ static void Asg_GetDataOfAssignment (struct Assignment *Asg,
/************************* Clear all assignment data **************************/
/*****************************************************************************/
static void Asg_ResetAssignment (struct Assignment *Asg)
static void Asg_ResetAssignment (struct Asg_Assignment *Asg)
{
if (Asg->AsgCod <= 0) // If > 0 ==> keep value
Asg->AsgCod = -1L;
@ -1022,7 +1022,7 @@ void Asg_ReqRemAssignment (void)
extern const char *Txt_Do_you_really_want_to_remove_the_assignment_X;
extern const char *Txt_Remove_assignment;
struct Asg_Assignments Assignments;
struct Assignment Asg;
struct Asg_Assignment Asg;
/***** Reset assignments *****/
Asg_ResetAssignments (&Assignments);
@ -1059,7 +1059,7 @@ void Asg_RemoveAssignment (void)
{
extern const char *Txt_Assignment_X_removed;
struct Asg_Assignments Assignments;
struct Assignment Asg;
struct Asg_Assignment Asg;
/***** Reset assignments *****/
Asg_ResetAssignments (&Assignments);
@ -1101,7 +1101,7 @@ void Asg_RemoveAssignment (void)
void Asg_HideAssignment (void)
{
struct Asg_Assignments Assignments;
struct Assignment Asg;
struct Asg_Assignment Asg;
/***** Reset assignments *****/
Asg_ResetAssignments (&Assignments);
@ -1130,7 +1130,7 @@ void Asg_HideAssignment (void)
void Asg_ShowAssignment (void)
{
struct Asg_Assignments Assignments;
struct Assignment Asg;
struct Asg_Assignment Asg;
/***** Reset assignments *****/
Asg_ResetAssignments (&Assignments);
@ -1184,7 +1184,7 @@ void Asg_RequestCreatOrEditAsg (void)
extern const char *Txt_Create_assignment;
extern const char *Txt_Save_changes;
struct Asg_Assignments Assignments;
struct Assignment Asg;
struct Asg_Assignment Asg;
bool ItsANewAssignment;
char Txt[Cns_MAX_BYTES_TEXT + 1];
static const Dat_SetHMS SetHMS[Dat_NUM_START_END_TIME] =
@ -1398,8 +1398,8 @@ void Asg_RecFormAssignment (void)
extern const char *Txt_The_assignment_has_been_modified;
extern const char *Txt_You_can_not_disable_file_uploading_once_folders_have_been_created;
struct Asg_Assignments Assignments;
struct Assignment OldAsg; // Current assigment data in database
struct Assignment NewAsg; // Assignment data received from form
struct Asg_Assignment OldAsg; // Current assigment data in database
struct Asg_Assignment NewAsg; // Assignment data received from form
bool ItsANewAssignment;
bool NewAssignmentIsCorrect = true;
unsigned NumUsrsToBeNotifiedByEMail;
@ -1557,7 +1557,7 @@ static void Asg_UpdateNumUsrsNotifiedByEMailAboutAssignment (long AsgCod,unsigne
/************************ Create a new assignment ****************************/
/*****************************************************************************/
static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
static void Asg_CreateAssignment (struct Asg_Assignment *Asg,const char *Txt)
{
/***** Create a new assignment *****/
Asg->AsgCod =
@ -1584,7 +1584,7 @@ static void Asg_CreateAssignment (struct Assignment *Asg,const char *Txt)
/********************* Update an existing assignment *************************/
/*****************************************************************************/
static void Asg_UpdateAssignment (struct Assignment *Asg,const char *Txt)
static void Asg_UpdateAssignment (struct Asg_Assignment *Asg,const char *Txt)
{
/***** Update the data of the assignment *****/
DB_QueryUPDATE ("can not update assignment",
@ -1702,7 +1702,7 @@ static void Asg_CreateGrps (long AsgCod)
/********* Get and write the names of the groups of an assignment ************/
/*****************************************************************************/
static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Assignment *Asg)
static void Asg_GetAndWriteNamesOfGrpsAssociatedToAsg (struct Asg_Assignment *Asg)
{
extern const char *Txt_Group;
extern const char *Txt_Groups;

View File

@ -46,7 +46,7 @@ typedef enum
Asg_SEND_WORK = 1,
} Asg_SendWork_t;
struct Assignment
struct Asg_Assignment
{
long AsgCod;
bool Hidden;
@ -72,8 +72,8 @@ void Asg_SeeAssignments (void);
void Asg_PrintOneAssignment (void);
void Asg_RequestCreatOrEditAsg (void);
void Asg_GetDataOfAssignmentByCod (struct Assignment *Asg);
void Asg_GetDataOfAssignmentByFolder (struct Assignment *Asg);
void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg);
void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg);
void Asg_GetNotifAssignment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
char **ContentStr,

View File

@ -171,8 +171,8 @@ static void Att_PutParamsToPrintStdsList (void *Events);
static void Att_PutButtonToShowDetails (const struct Att_Events *Events);
static void Att_ListEventsToSelect (const struct Att_Events *Events,
Att_TypeOfView_t TypeOfView);
static void Att_PutIconToViewAttEvents (void *Args);
static void Att_PutIconToEditAttEvents (void *Args);
static void Att_PutIconToViewAttEvents (void *Events);
static void Att_PutIconToEditAttEvents (void *Events);
static void Att_ListUsrsAttendanceTable (const struct Att_Events *Events,
Att_TypeOfView_t TypeOfView,
unsigned NumUsrsInList,
@ -2733,33 +2733,39 @@ void Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (long AttCod)
/********** Request listing attendance of users to several events ************/
/*****************************************************************************/
void Att_ReqListUsrsAttendanceCrs (void *Args)
void Att_ReqListUsrsAttendanceCrs (void *TypeOfView)
{
extern const char *Hlp_USERS_Attendance_attendance_list;
extern const char *Txt_Attendance_list;
extern const char *Txt_View_attendance;
struct Att_Events Events;
if (!Args)
return;
switch (*(Att_TypeOfView_t *) TypeOfView)
{
case Att_VIEW_SEL_USR:
case Att_PRNT_SEL_USR:
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeLstUsrAtt,
NULL,NULL,
Txt_Attendance_list,
Hlp_USERS_Attendance_attendance_list,
Txt_View_attendance,
false); // Do not put form with date range
/***** List users to select some of them *****/
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeLstUsrAtt,
NULL,NULL,
Txt_Attendance_list,
Hlp_USERS_Attendance_attendance_list,
Txt_View_attendance,
false); // Do not put form with date range
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
break;
default:
Lay_WrongTypeOfViewExit ();
break;
}
}
/*****************************************************************************/
@ -2783,72 +2789,81 @@ static void Att_ListOrPrintMyAttendanceCrs (Att_TypeOfView_t TypeOfView)
struct Att_Events Events;
unsigned NumAttEvent;
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** Get boolean parameter that indicates if details must be shown *****/
Events.ShowDetails = Par_GetParToBool ("ShowDetails");
/***** Get list of groups selected ******/
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get number of students in each event *****/
for (NumAttEvent = 0;
NumAttEvent < Events.Num;
NumAttEvent++)
/* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInAttEvent (Events.Lst[NumAttEvent].AttCod,
&Gbl.Usrs.Me.UsrDat.UsrCod,1);
/***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events);
/***** Begin box *****/
switch (TypeOfView)
{
case Att_VIEW_ONLY_ME:
Box_BoxBegin (NULL,Txt_Attendance,
Att_PutIconsMyAttList,&Gbl,
Hlp_USERS_Attendance_attendance_list,Box_NOT_CLOSABLE);
break;
case Att_PRNT_ONLY_ME:
Box_BoxBegin (NULL,Txt_Attendance,
NULL,NULL,
NULL,Box_NOT_CLOSABLE);
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** Get boolean parameter that indicates if details must be shown *****/
Events.ShowDetails = Par_GetParToBool ("ShowDetails");
/***** Get list of groups selected ******/
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get number of students in each event *****/
for (NumAttEvent = 0;
NumAttEvent < Events.Num;
NumAttEvent++)
/* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInAttEvent (Events.Lst[NumAttEvent].AttCod,
&Gbl.Usrs.Me.UsrDat.UsrCod,1);
/***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events);
/***** Begin box *****/
switch (TypeOfView)
{
case Att_VIEW_ONLY_ME:
Box_BoxBegin (NULL,Txt_Attendance,
Att_PutIconsMyAttList,&Gbl,
Hlp_USERS_Attendance_attendance_list,Box_NOT_CLOSABLE);
break;
case Att_PRNT_ONLY_ME:
Box_BoxBegin (NULL,Txt_Attendance,
NULL,NULL,
NULL,Box_NOT_CLOSABLE);
break;
default:
Lay_WrongTypeOfViewExit ();
break;
}
/***** List events to select *****/
Att_ListEventsToSelect (&Events,TypeOfView);
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
/***** Show table with attendances for every student in list *****/
Att_ListUsrsAttendanceTable (&Events,TypeOfView,1,&Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Show details or put button to show details *****/
if (Events.ShowDetails)
Att_ListStdsWithAttEventsDetails (&Events,1,&Gbl.Usrs.Me.UsrDat.UsrCod);
/***** End box *****/
Box_BoxEnd ();
/***** Free memory for list of attendance events selected *****/
free (Events.StrAttCodsSelected);
/***** Free list of groups selected *****/
Grp_FreeListCodSelectedGrps ();
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
break;
default:
Lay_ShowErrorAndExit ("Wrong type of view.");
Lay_WrongTypeOfViewExit ();
break;
}
/***** List events to select *****/
Att_ListEventsToSelect (&Events,TypeOfView);
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
/***** Show table with attendances for every student in list *****/
Att_ListUsrsAttendanceTable (&Events,TypeOfView,1,&Gbl.Usrs.Me.UsrDat.UsrCod);
/***** Show details or put button to show details *****/
if (Events.ShowDetails)
Att_ListStdsWithAttEventsDetails (&Events,1,&Gbl.Usrs.Me.UsrDat.UsrCod);
/***** End box *****/
Box_BoxEnd ();
/***** Free memory for list of attendance events selected *****/
free (Events.StrAttCodsSelected);
/***** Free list of groups selected *****/
Grp_FreeListCodSelectedGrps ();
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
}
/*****************************************************************************/
@ -2869,7 +2884,7 @@ static void Att_GetUsrsAndListOrPrintAttendanceCrs (Att_TypeOfView_t TypeOfView)
{
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
Att_ListOrPrintUsrsAttendanceCrs,&TypeOfView,
Att_ReqListUsrsAttendanceCrs,&Gbl);
Att_ReqListUsrsAttendanceCrs,&TypeOfView);
}
static void Att_ListOrPrintUsrsAttendanceCrs (void *TypeOfView)
@ -2881,84 +2896,93 @@ static void Att_ListOrPrintUsrsAttendanceCrs (void *TypeOfView)
long *LstSelectedUsrCods;
unsigned NumAttEvent;
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Get parameters *****/
/* Get boolean parameter that indicates if details must be shown */
Events.ShowDetails = Par_GetParToBool ("ShowDetails");
/* Get list of groups selected */
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Count number of valid users in list of encrypted user codes *****/
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
if (NumUsrsInList)
switch (*(Att_TypeOfView_t *) TypeOfView)
{
/***** Get list of students selected to show their attendances *****/
Usr_GetListSelectedUsrCods (&Gbl.Usrs.Selected,NumUsrsInList,&LstSelectedUsrCods);
case Att_VIEW_SEL_USR:
case Att_PRNT_SEL_USR:
/***** Reset attendance events *****/
Att_ResetEvents (&Events);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** Get parameters *****/
/* Get boolean parameter that indicates if details must be shown */
Events.ShowDetails = Par_GetParToBool ("ShowDetails");
/***** Get number of students in each event *****/
for (NumAttEvent = 0;
NumAttEvent < Events.Num;
NumAttEvent++)
/* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInAttEvent (Events.Lst[NumAttEvent].AttCod,
LstSelectedUsrCods,NumUsrsInList);
/* Get list of groups selected */
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events);
/***** Count number of valid users in list of encrypted user codes *****/
NumUsrsInList = Usr_CountNumUsrsInListOfSelectedEncryptedUsrCods (&Gbl.Usrs.Selected);
/***** Begin box *****/
switch (*(Att_TypeOfView_t *) TypeOfView)
{
case Att_VIEW_SEL_USR:
Box_BoxBegin (NULL,Txt_Attendance_list,
Att_PutIconsStdsAttList,&Events,
Hlp_USERS_Attendance_attendance_list,Box_NOT_CLOSABLE);
break;
case Att_PRNT_SEL_USR:
Box_BoxBegin (NULL,Txt_Attendance_list,
NULL,NULL,
NULL,Box_NOT_CLOSABLE);
break;
default:
Lay_ShowErrorAndExit ("Wrong type of view.");
}
if (NumUsrsInList)
{
/***** Get list of students selected to show their attendances *****/
Usr_GetListSelectedUsrCods (&Gbl.Usrs.Selected,NumUsrsInList,&LstSelectedUsrCods);
/***** List events to select *****/
Att_ListEventsToSelect (&Events,*(Att_TypeOfView_t *) TypeOfView);
/***** Get list of attendance events *****/
Att_GetListAttEvents (&Events,Att_OLDEST_FIRST);
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
/***** Get number of students in each event *****/
for (NumAttEvent = 0;
NumAttEvent < Events.Num;
NumAttEvent++)
/* Get number of students in this event */
Events.Lst[NumAttEvent].NumStdsFromList =
Att_GetNumUsrsFromAListWhoAreInAttEvent (Events.Lst[NumAttEvent].AttCod,
LstSelectedUsrCods,NumUsrsInList);
/***** Show table with attendances for every student in list *****/
Att_ListUsrsAttendanceTable (&Events,*(Att_TypeOfView_t *) TypeOfView,NumUsrsInList,LstSelectedUsrCods);
/***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Events);
/***** Show details or put button to show details *****/
if (Events.ShowDetails)
Att_ListStdsWithAttEventsDetails (&Events,NumUsrsInList,LstSelectedUsrCods);
/***** Begin box *****/
switch (*(Att_TypeOfView_t *) TypeOfView)
{
case Att_VIEW_SEL_USR:
Box_BoxBegin (NULL,Txt_Attendance_list,
Att_PutIconsStdsAttList,&Events,
Hlp_USERS_Attendance_attendance_list,Box_NOT_CLOSABLE);
break;
case Att_PRNT_SEL_USR:
Box_BoxBegin (NULL,Txt_Attendance_list,
NULL,NULL,
NULL,Box_NOT_CLOSABLE);
break;
default:
Lay_WrongTypeOfViewExit ();
}
/***** End box *****/
Box_BoxEnd ();
/***** List events to select *****/
Att_ListEventsToSelect (&Events,*(Att_TypeOfView_t *) TypeOfView);
/***** Free memory for list of attendance events selected *****/
free (Events.StrAttCodsSelected);
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
/***** Show table with attendances for every student in list *****/
Att_ListUsrsAttendanceTable (&Events,*(Att_TypeOfView_t *) TypeOfView,NumUsrsInList,LstSelectedUsrCods);
/***** Free list of user codes *****/
Usr_FreeListSelectedUsrCods (LstSelectedUsrCods);
/***** Show details or put button to show details *****/
if (Events.ShowDetails)
Att_ListStdsWithAttEventsDetails (&Events,NumUsrsInList,LstSelectedUsrCods);
/***** End box *****/
Box_BoxEnd ();
/***** Free memory for list of attendance events selected *****/
free (Events.StrAttCodsSelected);
/***** Free list of attendance events *****/
Att_FreeListAttEvents (&Events);
/***** Free list of user codes *****/
Usr_FreeListSelectedUsrCods (LstSelectedUsrCods);
}
/***** Free list of groups selected *****/
Grp_FreeListCodSelectedGrps ();
break;
default:
Lay_WrongTypeOfViewExit ();
break;
}
/***** Free list of groups selected *****/
Grp_FreeListCodSelectedGrps ();
}
/*****************************************************************************/
@ -3178,12 +3202,12 @@ static void Att_ListEventsToSelect (const struct Att_Events *Events,
{
case Att_VIEW_ONLY_ME:
Box_BoxBegin (NULL,Txt_Events,
Att_PutIconToViewAttEvents,&Gbl,
Att_PutIconToViewAttEvents,&Events,
NULL,Box_NOT_CLOSABLE);
break;
case Att_VIEW_SEL_USR:
Box_BoxBegin (NULL,Txt_Events,
Att_PutIconToEditAttEvents,&Gbl,
Att_PutIconToEditAttEvents,&Events,
NULL,Box_NOT_CLOSABLE);
break;
case Att_PRNT_ONLY_ME:
@ -3295,9 +3319,9 @@ static void Att_ListEventsToSelect (const struct Att_Events *Events,
/*********** Put icon to list (without edition) attendance events ************/
/*****************************************************************************/
static void Att_PutIconToViewAttEvents (void *Args)
static void Att_PutIconToViewAttEvents (void *Events)
{
if (Args)
if (Events) // Not used
Ico_PutContextualIconToView (ActSeeAtt,
NULL,NULL);
}
@ -3306,9 +3330,9 @@ static void Att_PutIconToViewAttEvents (void *Args)
/************ Put icon to list (with edition) attendance events **************/
/*****************************************************************************/
static void Att_PutIconToEditAttEvents (void *Args)
static void Att_PutIconToEditAttEvents (void *Events)
{
if (Args)
if (Events) // Not used
Ico_PutContextualIconToEdit (ActSeeAtt,NULL,
NULL,NULL);
}

View File

@ -111,7 +111,7 @@ void Att_RegisterStudentsInAttEvent (void);
void Att_RegUsrInAttEventNotChangingComments (long AttCod,long UsrCod);
void Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (long AttCod);
void Att_ReqListUsrsAttendanceCrs (void *Args);
void Att_ReqListUsrsAttendanceCrs (void *TypeOfView);
void Att_ListMyAttendanceCrs (void);
void Att_PrintMyAttendanceCrs (void);
void Att_ListUsrsAttendanceCrs (void);

View File

@ -58,7 +58,7 @@ extern struct Globals Gbl;
struct Ban_Banners
{
unsigned Num; // Number of banners
struct Banner *Lst; // List of banners
struct Ban_Banner *Lst; // List of banners
long BanCodToEdit; // Used as parameter in contextual links
long BanCodClicked; // Banned clicked, used to log it
};
@ -67,57 +67,57 @@ struct Ban_Banners
/***************************** Private variables *****************************/
/*****************************************************************************/
static struct Banner *Ban_EditingBan;
static struct Ban_Banner *Ban_EditingBan;
static long Ban_BanCodClicked;
/*****************************************************************************/
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void Ban_SetEditingBanner (struct Banner *Ban);
static struct Banner *Ban_GetEditingBanner (void);
static void Ban_SetEditingBanner (struct Ban_Banner *Ban);
static struct Ban_Banner *Ban_GetEditingBanner (void);
static void Ban_WriteListOfBanners (const struct Ban_Banners *Banners);
static void Ban_PutIconsListingBanners (void *Args);
static void Ban_PutIconsListingBanners (void *Banners);
static void Ban_PutIconToEditBanners (void);
static void Ban_EditBannersInternal (struct Ban_Banners *Banners,
const struct Banner *Ban);
const struct Ban_Banner *Ban);
static void Ban_GetListBanners (struct Ban_Banners *Banners,
MYSQL_RES **mysql_res,unsigned long NumRows);
static void Ban_FreeListBanners (struct Ban_Banners *Banners);
static void Ban_PutIconsEditingBanners (void *Args);
static void Ban_PutIconsEditingBanners (void *Banners);
static void Ban_ListBannersForEdition (struct Ban_Banners *Banners);
static void Ban_PutParamBanCodToEdit (void *BanCod);
static void Ban_PutParamBanCod (long BanCod);
static void Ban_ShowOrHideBanner (struct Banner *Ban,bool Hide);
static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide);
static void Ban_RenameBanner (struct Banner *Ban,
static void Ban_RenameBanner (struct Ban_Banner *Ban,
Cns_ShrtOrFullName_t ShrtOrFullName);
static bool Ban_CheckIfBannerNameExists (const char *FieldName,const char *Name,long BanCod);
static void Ban_UpdateBanNameDB (long BanCod,const char *FieldName,
const char *NewBanName);
static void Ban_PutFormToCreateBanner (const struct Banner *Ban);
static void Ban_PutFormToCreateBanner (const struct Ban_Banner *Ban);
static void Ban_PutHeadBanners (void);
static void Ban_CreateBanner (const struct Banner *Ban);
static void Ban_CreateBanner (const struct Ban_Banner *Ban);
static void Ban_SetBanCodClicked (long BanCod);
static void Ban_ResetBanners (struct Ban_Banners *Banners);
static void Ban_ResetBanner (struct Banner *Ban);
static void Ban_ResetBanner (struct Ban_Banner *Ban);
/*****************************************************************************/
/************************** Access to editing banner *************************/
/*****************************************************************************/
static void Ban_SetEditingBanner (struct Banner *Ban)
static void Ban_SetEditingBanner (struct Ban_Banner *Ban)
{
Ban_EditingBan = Ban;
}
static struct Banner *Ban_GetEditingBanner (void)
static struct Ban_Banner *Ban_GetEditingBanner (void)
{
return Ban_EditingBan;
}
@ -149,7 +149,7 @@ void Ban_SeeBanners (void)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Banners,
Ban_PutIconsListingBanners,&Gbl,
Ban_PutIconsListingBanners,&Banners,
Hlp_SYSTEM_Banners,Box_NOT_CLOSABLE);
/***** Write all banners *****/
@ -208,9 +208,9 @@ static void Ban_WriteListOfBanners (const struct Ban_Banners *Banners)
/***************** Put contextual icons in list of banners *******************/
/*****************************************************************************/
static void Ban_PutIconsListingBanners (void *Args)
static void Ban_PutIconsListingBanners (void *Banners)
{
if (Args)
if (Banners) // Not used
{
/***** Put icon to view banners *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)
@ -238,7 +238,7 @@ static void Ban_PutIconToEditBanners (void)
void Ban_EditBanners (void)
{
struct Ban_Banners Banners;
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banners *****/
Ban_ResetBanners (&Banners);
@ -251,7 +251,7 @@ void Ban_EditBanners (void)
}
static void Ban_EditBannersInternal (struct Ban_Banners *Banners,
const struct Banner *Ban)
const struct Ban_Banner *Ban)
{
extern const char *Hlp_SYSTEM_Banners_edit;
extern const char *Txt_Banners;
@ -266,7 +266,7 @@ static void Ban_EditBannersInternal (struct Ban_Banners *Banners,
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Banners,
Ban_PutIconsEditingBanners,&Gbl,
Ban_PutIconsEditingBanners,Banners,
Hlp_SYSTEM_Banners_edit,Box_NOT_CLOSABLE);
/***** Put a form to create a new banner *****/
@ -292,7 +292,7 @@ static void Ban_GetListBanners (struct Ban_Banners *Banners,
{
MYSQL_ROW row;
unsigned NumBan;
struct Banner *Ban;
struct Ban_Banner *Ban;
/***** Get banners from database *****/
if (NumRows) // Banners found...
@ -300,8 +300,8 @@ static void Ban_GetListBanners (struct Ban_Banners *Banners,
Banners->Num = (unsigned) NumRows;
/***** Create list with banners *****/
if ((Banners->Lst = (struct Banner *)
calloc (NumRows,sizeof (struct Banner))) == NULL)
if ((Banners->Lst = (struct Ban_Banner *)
calloc (NumRows,sizeof (struct Ban_Banner))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the banners *****/
@ -349,7 +349,7 @@ static void Ban_GetListBanners (struct Ban_Banners *Banners,
/*************************** Get banner full name ****************************/
/*****************************************************************************/
void Ban_GetDataOfBannerByCod (struct Banner *Ban)
void Ban_GetDataOfBannerByCod (struct Ban_Banner *Ban)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -416,9 +416,9 @@ static void Ban_FreeListBanners (struct Ban_Banners *Banners)
/**************** Put contextual icons in edition of banners *****************/
/*****************************************************************************/
static void Ban_PutIconsEditingBanners (void *Args)
static void Ban_PutIconsEditingBanners (void *Banners)
{
if (Args)
if (Banners) // Not used
{
/***** Put icon to view banners *****/
Ban_PutIconToViewBanners ();
@ -449,7 +449,7 @@ void Ban_PutIconToViewBanners (void)
static void Ban_ListBannersForEdition (struct Ban_Banners *Banners)
{
unsigned NumBan;
struct Banner *Ban;
struct Ban_Banner *Ban;
char *Anchor = NULL;
/***** Begin table *****/
@ -574,7 +574,7 @@ long Ban_GetParamBanCod (void)
void Ban_RemoveBanner (void)
{
extern const char *Txt_Banner_X_removed;
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -606,7 +606,7 @@ void Ban_RemoveBanner (void)
void Ban_ShowBanner (void)
{
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -624,7 +624,7 @@ void Ban_ShowBanner (void)
void Ban_HideBanner (void)
{
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -640,7 +640,7 @@ void Ban_HideBanner (void)
/*************** Change hiddeness of banner in the database ******************/
/*****************************************************************************/
static void Ban_ShowOrHideBanner (struct Banner *Ban,bool Hide)
static void Ban_ShowOrHideBanner (struct Ban_Banner *Ban,bool Hide)
{
/***** Get banner code *****/
if ((Ban->BanCod = Ban_GetParamBanCod ()) == -1L)
@ -665,7 +665,7 @@ static void Ban_ShowOrHideBanner (struct Banner *Ban,bool Hide)
void Ban_RenameBannerShort (void)
{
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -683,7 +683,7 @@ void Ban_RenameBannerShort (void)
void Ban_RenameBannerFull (void)
{
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -699,7 +699,7 @@ void Ban_RenameBannerFull (void)
/*********************** Change the name of a banner *************************/
/*****************************************************************************/
static void Ban_RenameBanner (struct Banner *Ban,
static void Ban_RenameBanner (struct Ban_Banner *Ban,
Cns_ShrtOrFullName_t ShrtOrFullName)
{
extern const char *Txt_The_banner_X_already_exists;
@ -809,7 +809,7 @@ void Ban_ChangeBannerImg (void)
{
extern const char *Txt_The_new_image_is_X;
extern const char *Txt_You_can_not_leave_the_image_empty;
struct Banner Ban;
struct Ban_Banner Ban;
char NewImg[Ban_MAX_BYTES_IMAGE + 1];
/***** Reset banner *****/
@ -858,7 +858,7 @@ void Ban_ChangeBannerImg (void)
void Ban_ChangeBannerWWW (void)
{
extern const char *Txt_The_new_web_address_is_X;
struct Banner Ban;
struct Ban_Banner Ban;
char NewWWW[Cns_MAX_BYTES_WWW + 1];
/***** Reset banner *****/
@ -906,7 +906,7 @@ void Ban_ChangeBannerWWW (void)
void Ban_ContEditAfterChgBan (void)
{
struct Ban_Banners Banners;
struct Banner *Ban = Ban_GetEditingBanner ();
struct Ban_Banner *Ban = Ban_GetEditingBanner ();
/***** Reset banners *****/
Ban_ResetBanners (&Banners);
@ -922,7 +922,7 @@ void Ban_ContEditAfterChgBan (void)
/********************* Put a form to create a new banner *********************/
/*****************************************************************************/
static void Ban_PutFormToCreateBanner (const struct Banner *Ban)
static void Ban_PutFormToCreateBanner (const struct Ban_Banner *Ban)
{
extern const char *Hlp_SYSTEM_Banners_edit;
extern const char *Txt_New_banner;
@ -1019,7 +1019,7 @@ void Ban_RecFormNewBanner (void)
extern const char *Txt_You_must_specify_the_URL_of_the_new_banner;
extern const char *Txt_Created_new_banner_X;
extern const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_banner;
struct Banner Ban;
struct Ban_Banner Ban;
/***** Reset banner *****/
Ban_ResetBanner (&Ban);
@ -1074,7 +1074,7 @@ void Ban_RecFormNewBanner (void)
/**************************** Create a new banner ****************************/
/*****************************************************************************/
static void Ban_CreateBanner (const struct Banner *Ban)
static void Ban_CreateBanner (const struct Ban_Banner *Ban)
{
/***** Create a new banner *****/
DB_QueryINSERT ("can not create banner",
@ -1136,7 +1136,7 @@ void Ban_WriteMenuWithBanners (void)
void Ban_ClickOnBanner (void)
{
struct Banner Ban;
struct Ban_Banner Ban;
/***** Get banner code *****/
if ((Ban.BanCod = Ban_GetParamBanCod ()) == -1L)
@ -1184,7 +1184,7 @@ static void Ban_ResetBanners (struct Ban_Banners *Banners)
/************************* Reset banner/destructor **********************/
/*****************************************************************************/
static void Ban_ResetBanner (struct Banner *Ban)
static void Ban_ResetBanner (struct Ban_Banner *Ban)
{
/***** Reset banner *****/
Ban->BanCod = -1L;

View File

@ -42,7 +42,7 @@
#define Ban_MAX_CHARS_IMAGE NAME_MAX // 255
#define Ban_MAX_BYTES_IMAGE Ban_MAX_CHARS_IMAGE // 255
struct Banner
struct Ban_Banner
{
long BanCod;
bool Hidden;
@ -61,7 +61,7 @@ void Ban_EditBanners (void);
void Ban_PutIconToViewBanners (void);
void Ban_GetDataOfBannerByCod (struct Banner *Ban);
void Ban_GetDataOfBannerByCod (struct Ban_Banner *Ban);
long Ban_GetParamLnkCod (void);
void Ban_RemoveBanner (void);
void Ban_ShowBanner (void);

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.168 (2020-04-07)"
#define Log_PLATFORM_VERSION "SWAD 19.169 (2020-04-08)"
#define CSS_FILE "swad19.146.css"
#define JS_FILE "swad19.153.js"
/*
@ -548,8 +548,7 @@ Funci
// TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores
// TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub
// TODO: Bug en SWADroid: loginByUserPasswordKey falla cuando se le pasa como parámetro un DNI
Version 19.169: Apr 08, 2020 Code refactoring in games and matches. (285024 lines)
Version 19.168: Apr 07, 2020 Code refactoring in forums. (284866 lines)
Version 19.167: Apr 06, 2020 Code refactoring in figures. (284772 lines)
Version 19.166.1: Apr 06, 2020 Fixed bug in API function loginByUserPasswordKey, reported by Javier Bueno López. (? lines)

File diff suppressed because it is too large Load Diff

View File

@ -37,29 +37,6 @@
#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
struct GameSelected
{
long GamCod; // Game code
bool Selected; // Is this game selected when seeing match results?
};
struct Game
{
long GamCod; // Game code
long CrsCod; // Course code
long UsrCod; // Author code
double MaxGrade; // Score range [0...max.score]
// will be converted to
// grade range [0...max.grade]
unsigned Visibility; // Visibility of results
char Title[Gam_MAX_BYTES_TITLE + 1];
time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Hidden; // Game is hidden
unsigned NumQsts; // Number of questions in the game
unsigned NumMchs; // Number of matches in the game
unsigned NumUnfinishedMchs; // Number of unfinished matches in the game
};
#define Gam_NUM_ORDERS 3
typedef enum
{
@ -77,33 +54,74 @@ typedef enum
} Gam_AnswerType_t;
#define Gam_ANSWER_TYPE_DEFAULT Gam_ANS_UNIQUE_CHOICE
struct Gam_GameSelected
{
long GamCod; // Game code
bool Selected; // Is this game selected when seeing match results?
};
struct Gam_Games
{
bool LstIsRead; // Is the list already read from database...
// ...or it needs to be read?
unsigned Num; // Total number of games
unsigned NumSelected; // Number of games selected
struct Gam_GameSelected *Lst;// List of games
Gam_Order_t SelectedOrder;
unsigned CurrentPage;
char *ListQuestions;
char *GamCodsSelected; // String with selected game codes separated by separator multiple
long GamCod; // Selected/current game code
long MchCod; // Selected/current match code
unsigned QstInd; // Current question index
};
struct Gam_Game
{
long GamCod; // Game code
long CrsCod; // Course code
long UsrCod; // Author code
double MaxGrade; // Score range [0...max.score]
// will be converted to
// grade range [0...max.grade]
unsigned Visibility; // Visibility of results
char Title[Gam_MAX_BYTES_TITLE + 1];
time_t TimeUTC[Dat_NUM_START_END_TIME];
bool Hidden; // Game is hidden
unsigned NumQsts; // Number of questions in the game
unsigned NumMchs; // Number of matches in the game
unsigned NumUnfinishedMchs; // Number of unfinished matches in the game
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void Gam_ResetGames (struct Gam_Games *Games);
void Gam_SeeAllGames (void);
void Gam_SeeOneGame (void);
void Gam_ShowOnlyOneGame (struct Game *Game,
void Gam_ShowOnlyOneGame (struct Gam_Games *Games,
struct Gam_Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch);
void Gam_ShowOnlyOneGameBegin (struct Game *Game,
void Gam_ShowOnlyOneGameBegin (struct Gam_Games *Games,
struct Gam_Game *Game,
bool ListGameQuestions,
bool PutFormNewMatch);
void Gam_ShowOnlyOneGameEnd (void);
void Gam_PutHiddenParamGameOrder (void);
void Gam_RequestCreatOrEditGame (void);
void Gam_SetCurrentGamCod (long GamCod);
void Gam_PutParams (void *Args);
void Gam_PutParams (void *Games);
void Gam_PutParamGameCod (long GamCod);
long Gam_GetParamGameCod (void);
long Gam_GetParams (void);
long Gam_GetParams (struct Gam_Games *Games);
void Gam_GetListGames (Gam_Order_t SelectedOrder);
void Gam_GetListSelectedGamCods (void);
void Gam_GetDataOfGameByCod (struct Game *Gam);
void Gam_GetDataOfGameByFolder (struct Game *Gam);
void Gam_FreeListGames (void);
void Gam_GetListGames (struct Gam_Games *Games,Gam_Order_t SelectedOrder);
void Gam_GetListSelectedGamCods (struct Gam_Games *Games);
void Gam_GetDataOfGameByCod (struct Gam_Game *Gam);
void Gam_GetDataOfGameByFolder (struct Gam_Game *Gam);
void Gam_FreeListGames (struct Gam_Games *Games);
void Gam_AskRemGame (void);
void Gam_RemoveGame (void);
@ -111,8 +129,11 @@ void Gam_RemoveGamesCrs (long CrsCod);
void Gam_HideGame (void);
void Gam_UnhideGame (void);
void Gam_RequestCreatOrEditGame (void);
void Gam_RecFormGame (void);
bool Gam_CheckIfMatchIsAssociatedToGrp (long MchCod,long GrpCod);
bool Mch_CheckIfMatchIsAssociatedToGrp (long MchCod,long GrpCod);
unsigned Gam_GetNumQstsGame (long GamCod);
@ -133,7 +154,7 @@ void Gam_RemoveQst (void);
void Gam_MoveUpQst (void);
void Gam_MoveDownQst (void);
void Gam_PutButtonNewMatch (long GamCod);
void Gam_PutButtonNewMatch (struct Gam_Games *Games,long GamCod);
void Gam_RequestNewMatch (void);
unsigned Gam_GetNumCoursesWithGames (Hie_Level_t Scope);

View File

@ -337,9 +337,6 @@ void Gbl_InitializeGlobals (void)
Gbl.Usrs.Connected.TimeToRefreshInMs = Con_MAX_TIME_TO_REFRESH_CONNECTED_IN_MS;
/* Games for remote control */
Gbl.Games.ListQuestions = NULL;
/* Public activity */
Gbl.Timeline.Who = TL_DEFAULT_WHO;

View File

@ -513,7 +513,7 @@ struct Globals
bool HiddenLevels[1 + Brw_MAX_DIR_LEVELS];
const char *TxtStyle;
const char *InputStyle;
struct Assignment Asg; // Data of assignment when browsing level 1 or an assignment zone
struct Asg_Assignment Asg; // Data of assignment when browsing level 1 or an assignment zone
struct
{
bool CreateZIP;
@ -603,19 +603,6 @@ struct Globals
struct DateTime DateEnd; // TODO: Remove in future versions
time_t TimeUTC[Dat_NUM_START_END_TIME];
} DateRange;
struct
{
bool LstIsRead; // Is the list already read from database...
// ...or it needs to be read?
unsigned Num; // Total number of games
unsigned NumSelected; // Number of games selected
struct GameSelected *Lst; // List of games
Gam_Order_t SelectedOrder;
unsigned CurrentPage;
char *ListQuestions;
long MchCodBeingPlayed; // Used to refresh game via AJAX
char *GamCodsSelected; // String with selected game codes separated by separator multiple
} Games;
struct
{
bool LstIsRead; // Is the list already read from database, or it needs to be read?

View File

@ -1718,7 +1718,7 @@ void Grp_ListGrpsToEditAsgAttSvyMch (struct GroupType *GrpTyp,long Cod,
AssociatedToGrp = Svy_CheckIfSvyIsAssociatedToGrp (Cod,Grp->GrpCod);
break;
case Grp_MATCH:
AssociatedToGrp = Gam_CheckIfMatchIsAssociatedToGrp (Cod,Grp->GrpCod);
AssociatedToGrp = Mch_CheckIfMatchIsAssociatedToGrp (Cod,Grp->GrpCod);
break;
}

View File

@ -48,6 +48,7 @@
#include "swad_language.h"
#include "swad_log.h"
#include "swad_logo.h"
#include "swad_match.h"
#include "swad_MFU.h"
#include "swad_notice.h"
#include "swad_notification.h"
@ -898,7 +899,7 @@ static void Lay_WriteScriptParamsAJAX (void)
HTM_TxtF ("var RefreshParamNxtActMch = \"act=%ld\";\n"
"var RefreshParamMchCod = \"MchCod=%ld\";\n",
Act_GetActCod (ActRefMchStd),
Gbl.Games.MchCodBeingPlayed);
Mch_GetMchCodBeingPlayed ());
break;
/* Parameters related with match refreshing (for teachers) */
case ActNewMch:
@ -915,7 +916,7 @@ static void Lay_WriteScriptParamsAJAX (void)
HTM_TxtF ("var RefreshParamNxtActMch = \"act=%ld\";\n"
"var RefreshParamMchCod = \"MchCod=%ld\";\n",
Act_GetActCod (ActRefMchTch),
Gbl.Games.MchCodBeingPlayed);
Mch_GetMchCodBeingPlayed ());
break;
/* Parameter related with clicks refreshing */
case ActLstClk:
@ -1389,6 +1390,15 @@ void Lay_WrongOrderExit (void)
Lay_ShowErrorAndExit ("Wrong order.");
}
/*****************************************************************************/
/************* Write error message and exit when wrong order *****************/
/*****************************************************************************/
void Lay_WrongTypeOfViewExit (void)
{
Lay_ShowErrorAndExit ("Wrong type of view.");
}
/*****************************************************************************/
/******* Write error message, close files, remove lock file, and exit ********/
/*****************************************************************************/

View File

@ -72,6 +72,7 @@ void Lay_PutContextualCheckbox (Act_Action_t NextAction,
void Lay_NotEnoughMemoryExit (void);
void Lay_WrongScopeExit (void);
void Lay_WrongOrderExit (void);
void Lay_WrongTypeOfViewExit (void);
void Lay_NoPermissionExit (void);
void Lay_ShowErrorAndExit (const char *Txt);

File diff suppressed because it is too large Load Diff

View File

@ -48,7 +48,7 @@ typedef enum
} Mch_Showing_t;
#define Mch_SHOWING_DEFAULT Mch_START
struct Match
struct Mch_Match
{
long MchCod;
long GamCod;
@ -82,8 +82,12 @@ struct Mch_UsrAnswer
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void Mch_ListMatches (struct Game *Game,bool PutFormNewMatch);
void Mch_GetDataOfMatchByCod (struct Match *Match);
long Mch_GetMchCodBeingPlayed (void);
void Mch_ListMatches (struct Gam_Games *Games,
struct Gam_Game *Game,
bool PutFormNewMatch);
void Mch_GetDataOfMatchByCod (struct Mch_Match *Match);
void Mch_ToggleVisibilResultsMchUsr (void);
@ -94,8 +98,10 @@ void Mch_RemoveMatchesInGameFromAllTables (long GamCod);
void Mch_RemoveMatchInCourseFromAllTables (long CrsCod);
void Mch_RemoveUsrFromMatchTablesInCrs (long UsrCod,long CrsCod);
void Mch_PutParamsEdit (void *Args);
void Mch_GetAndCheckParameters (struct Game *Game,struct Match *Match);
void Mch_PutParamsEdit (void *Games);
void Mch_GetAndCheckParameters (struct Gam_Games *Games,
struct Gam_Game *Game,
struct Mch_Match *Match);
long Mch_GetParamMchCod (void);
void Mch_CreateNewMatchTch (void);
@ -115,13 +121,13 @@ void Mch_ForwardMatch (void);
unsigned Mch_GetNumMchsInGame (long GamCod);
unsigned Mch_GetNumUnfinishedMchsInGame (long GamCod);
bool Mch_CheckIfICanPlayThisMatchBasedOnGrps (const struct Match *Match);
bool Mch_CheckIfICanPlayThisMatchBasedOnGrps (const struct Mch_Match *Match);
void Mch_WriteChoiceAnsViewMatch (const struct Match *Match,
void Mch_WriteChoiceAnsViewMatch (const struct Mch_Match *Match,
const struct Tst_Question *Question,
const char *Class,bool ShowResult);
bool Mch_RegisterMeAsPlayerInMatch (struct Match *Match);
bool Mch_RegisterMeAsPlayerInMatch (struct Mch_Match *Match);
void Mch_GetMatchBeingPlayed (void);
void Mch_JoinMatchAsStd (void);
@ -139,6 +145,4 @@ unsigned Mch_GetNumUsrsWhoAnsweredQst (long MchCod,unsigned QstInd);
unsigned Mch_GetNumUsrsWhoHaveChosenAns (long MchCod,unsigned QstInd,unsigned AnsInd);
void Mch_DrawBarNumUsrs (unsigned NumRespondersAns,unsigned NumRespondersQst,bool Correct);
void Mch_SetCurrentMchCod (long MchCod);
#endif

View File

@ -70,56 +70,41 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void MchRes_ListMyMchResultsInCrs (void);
static void MchRes_ListMyMchResultsInGam (long GamCod);
static void MchRes_ListMyMchResultsInMch (long MchCod);
static void MchRes_ShowAllMchResultsInSelectedGames (void *Args);
static void MchRes_ListAllMchResultsInSelectedGames (void);
static void MchRes_ListAllMchResultsInGam (long GamCod);
static void MchRes_ListAllMchResultsInMch (long MchCod);
static void MchRes_PutFormToSelUsrsToViewMchResults (void *Games);
static void MchRes_ShowResultsBegin (const char *Title,bool ListGamesToSelect);
static void MchRes_ListMyMchResultsInCrs (struct Gam_Games *Games);
static void MchRes_ListMyMchResultsInGam (struct Gam_Games *Games,long GamCod);
static void MchRes_ListMyMchResultsInMch (struct Gam_Games *Games,long MchCod);
static void MchRes_ShowAllMchResultsInSelectedGames (void *Games);
static void MchRes_ListAllMchResultsInSelectedGames (struct Gam_Games *Games);
static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod);
static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod);
static void MchRes_ShowResultsBegin (struct Gam_Games *Games,
const char *Title,bool ListGamesToSelect);
static void MchRes_ShowResultsEnd (void);
static void MchRes_ListGamesToSelect (void);
static void MchRes_ListGamesToSelect (struct Gam_Games *Games);
static void MchRes_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther);
static void MchRes_BuildGamesSelectedCommas (char **GamesSelectedCommas);
static void MchRes_ShowMchResults (Usr_MeOrOther_t MeOrOther,
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas);
static void MchRes_BuildGamesSelectedCommas (struct Gam_Games *Games,
char **GamesSelectedCommas);
static void MchRes_ShowMchResults (struct Gam_Games *Games,
Usr_MeOrOther_t MeOrOther,
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas);
static void MchRes_ShowMchResultsSummaryRow (unsigned NumResults,
unsigned NumTotalQsts,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
double TotalGrade);
unsigned NumTotalQsts,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
double TotalGrade);
static void MchRes_GetMatchResultDataByMchCod (long MchCod,long UsrCod,
struct TstExa_Exam *Exam);
static bool MchRes_CheckIfICanSeeMatchResult (struct Match *Match,long UsrCod);
static bool MchRes_CheckIfICanSeeMatchResult (struct Mch_Match *Match,long UsrCod);
static bool MchRes_CheckIfICanViewScore (bool ICanViewResult,unsigned Visibility);
/*****************************************************************************/
/*********** Select users and dates to show their matches results ************/
/*****************************************************************************/
void MchRes_SelUsrsToViewMchResults (void *Args)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
extern const char *Txt_View_matches_results;
if (Args)
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeAllMchResCrs,
NULL,NULL,
Txt_Results,
Hlp_ASSESSMENT_Games_results,
Txt_View_matches_results,
false); // Do not put form with date range
}
/*****************************************************************************/
/*************************** Show my matches results *************************/
/*****************************************************************************/
@ -127,22 +112,26 @@ void MchRes_SelUsrsToViewMchResults (void *Args)
void MchRes_ShowMyMchResultsInCrs (void)
{
extern const char *Txt_Results;
struct Gam_Games Games;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get list of games *****/
Gam_GetListGames (Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods ();
Gam_GetListGames (&Games,Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods (&Games);
/***** List my matches results in the current course *****/
MchRes_ShowResultsBegin (Txt_Results,true); // List games to select
MchRes_ListMyMchResultsInCrs ();
MchRes_ShowResultsBegin (&Games,Txt_Results,true); // List games to select
MchRes_ListMyMchResultsInCrs (&Games);
MchRes_ShowResultsEnd ();
/***** Free list of games *****/
free (Gbl.Games.GamCodsSelected);
Gam_FreeListGames ();
free (Games.GamCodsSelected);
Gam_FreeListGames (&Games);
}
static void MchRes_ListMyMchResultsInCrs (void)
static void MchRes_ListMyMchResultsInCrs (struct Gam_Games *Games)
{
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
@ -151,8 +140,8 @@ static void MchRes_ListMyMchResultsInCrs (void)
/***** List my matches results in the current course *****/
TstCfg_GetConfigFromDB (); // Get feedback type
MchRes_BuildGamesSelectedCommas (&GamesSelectedCommas);
MchRes_ShowMchResults (Usr_ME,-1L,-1L,GamesSelectedCommas);
MchRes_BuildGamesSelectedCommas (Games,&GamesSelectedCommas);
MchRes_ShowMchResults (Games,Usr_ME,-1L,-1L,GamesSelectedCommas);
free (GamesSelectedCommas);
}
@ -163,37 +152,42 @@ static void MchRes_ListMyMchResultsInCrs (void)
void MchRes_ShowMyMchResultsInGam (void)
{
extern const char *Txt_Results_of_game_X;
struct Game Game;
struct Gam_Games Games;
struct Gam_Game Game;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams (&Games)) <= 0)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
Gam_ShowOnlyOneGameBegin (&Games,&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List my matches results in game *****/
MchRes_ShowResultsBegin (Str_BuildStringStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select
MchRes_ShowResultsBegin (&Games,
Str_BuildStringStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select
Str_FreeString ();
MchRes_ListMyMchResultsInGam (Game.GamCod);
MchRes_ListMyMchResultsInGam (&Games,Game.GamCod);
MchRes_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void MchRes_ListMyMchResultsInGam (long GamCod)
static void MchRes_ListMyMchResultsInGam (struct Gam_Games *Games,long GamCod)
{
/***** Table header *****/
MchRes_ShowHeaderMchResults (Usr_ME);
/***** List my matches results in game *****/
TstCfg_GetConfigFromDB (); // Get feedback type
MchRes_ShowMchResults (Usr_ME,-1L,GamCod,NULL);
MchRes_ShowMchResults (Games,Usr_ME,-1L,GamCod,NULL);
}
/*****************************************************************************/
@ -203,41 +197,45 @@ static void MchRes_ListMyMchResultsInGam (long GamCod)
void MchRes_ShowMyMchResultsInMch (void)
{
extern const char *Txt_Results_of_match_X;
struct Game Game;
struct Match Match;
struct Gam_Games Games;
struct Gam_Game Game;
struct Mch_Match Match;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams (&Games)) <= 0)
Lay_ShowErrorAndExit ("Code of game is missing.");
if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L)
if ((Match.MchCod = Mch_GetParamMchCod ()) <= 0)
Lay_ShowErrorAndExit ("Code of match is missing.");
Gam_GetDataOfGameByCod (&Game);
Mch_GetDataOfMatchByCod (&Match);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
Gam_ShowOnlyOneGameBegin (&Games,&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List my matches results in match *****/
MchRes_ShowResultsBegin (Str_BuildStringStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select
MchRes_ShowResultsBegin (&Games,Str_BuildStringStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select
Str_FreeString ();
MchRes_ListMyMchResultsInMch (Match.MchCod);
MchRes_ListMyMchResultsInMch (&Games,Match.MchCod);
MchRes_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void MchRes_ListMyMchResultsInMch (long MchCod)
static void MchRes_ListMyMchResultsInMch (struct Gam_Games *Games,long MchCod)
{
/***** Table header *****/
MchRes_ShowHeaderMchResults (Usr_ME);
/***** List my matches results in game *****/
TstCfg_GetConfigFromDB (); // Get feedback type
MchRes_ShowMchResults (Usr_ME,MchCod,-1L,NULL);
MchRes_ShowMchResults (Games,Usr_ME,MchCod,-1L,NULL);
}
/*****************************************************************************/
@ -246,37 +244,45 @@ static void MchRes_ListMyMchResultsInMch (long MchCod)
void MchRes_ShowAllMchResultsInCrs (void)
{
struct Gam_Games Games;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get users and show their matches results *****/
Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected,
MchRes_ShowAllMchResultsInSelectedGames,&Gbl,
MchRes_SelUsrsToViewMchResults,&Gbl);
MchRes_ShowAllMchResultsInSelectedGames,&Games,
MchRes_PutFormToSelUsrsToViewMchResults,&Games);
}
/*****************************************************************************/
/****************** Show matches results for several users *******************/
/*****************************************************************************/
static void MchRes_ShowAllMchResultsInSelectedGames (void *Args)
static void MchRes_ShowAllMchResultsInSelectedGames (void *Games)
{
extern const char *Txt_Results;
if (!Args)
if (!Games)
return;
/***** Get list of games *****/
Gam_GetListGames (Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods ();
Gam_GetListGames ((struct Gam_Games *) Games,Gam_ORDER_BY_TITLE);
Gam_GetListSelectedGamCods ((struct Gam_Games *) Games);
/***** List the matches results of the selected users *****/
MchRes_ShowResultsBegin (Txt_Results,true); // List games to select
MchRes_ListAllMchResultsInSelectedGames ();
MchRes_ShowResultsBegin ((struct Gam_Games *) Games,
Txt_Results,
true); // List games to select
MchRes_ListAllMchResultsInSelectedGames ((struct Gam_Games *) Games);
MchRes_ShowResultsEnd ();
/***** Free list of games *****/
free (Gbl.Games.GamCodsSelected);
Gam_FreeListGames ();
free (((struct Gam_Games *) Games)->GamCodsSelected);
Gam_FreeListGames ((struct Gam_Games *) Games);
}
static void MchRes_ListAllMchResultsInSelectedGames (void)
static void MchRes_ListAllMchResultsInSelectedGames (struct Gam_Games *Games)
{
char *GamesSelectedCommas = NULL; // Initialized to avoid warning
const char *Ptr;
@ -285,7 +291,7 @@ static void MchRes_ListAllMchResultsInSelectedGames (void)
MchRes_ShowHeaderMchResults (Usr_OTHER);
/***** List the matches results of the selected users *****/
MchRes_BuildGamesSelectedCommas (&GamesSelectedCommas);
MchRes_BuildGamesSelectedCommas (Games,&GamesSelectedCommas);
Ptr = Gbl.Usrs.Selected.List[Rol_UNK];
while (*Ptr)
{
@ -297,12 +303,43 @@ static void MchRes_ListAllMchResultsInSelectedGames (void)
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
MchRes_ShowMchResults (Usr_OTHER,-1L,-1L,GamesSelectedCommas);
MchRes_ShowMchResults (Games,Usr_OTHER,-1L,-1L,GamesSelectedCommas);
}
}
free (GamesSelectedCommas);
}
/*****************************************************************************/
/**************** Select users to show their matches results *****************/
/*****************************************************************************/
void MchRes_SelUsrsToViewMchResults (void)
{
struct Gam_Games Games;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Put form to select users *****/
MchRes_PutFormToSelUsrsToViewMchResults (&Games);
}
static void MchRes_PutFormToSelUsrsToViewMchResults (void *Games)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *Txt_Results;
extern const char *Txt_View_matches_results;
if (Games) // Not used
Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected,
ActSeeAllMchResCrs,
NULL,NULL,
Txt_Results,
Hlp_ASSESSMENT_Games_results,
Txt_View_matches_results,
false); // Do not put form with date range
}
/*****************************************************************************/
/*** Show matches results of a game for the users who answered in that game **/
/*****************************************************************************/
@ -310,30 +347,35 @@ static void MchRes_ListAllMchResultsInSelectedGames (void)
void MchRes_ShowAllMchResultsInGam (void)
{
extern const char *Txt_Results_of_game_X;
struct Game Game;
struct Gam_Games Games;
struct Gam_Game Game;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams (&Games)) <= 0)
Lay_ShowErrorAndExit ("Code of game is missing.");
Gam_GetDataOfGameByCod (&Game);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
Gam_ShowOnlyOneGameBegin (&Games,&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List matches results in game *****/
MchRes_ShowResultsBegin (Str_BuildStringStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select
MchRes_ShowResultsBegin (&Games,
Str_BuildStringStr (Txt_Results_of_game_X,Game.Title),
false); // Do not list games to select
Str_FreeString ();
MchRes_ListAllMchResultsInGam (Game.GamCod);
MchRes_ListAllMchResultsInGam (&Games,Game.GamCod);
MchRes_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void MchRes_ListAllMchResultsInGam (long GamCod)
static void MchRes_ListAllMchResultsInGam (struct Gam_Games *Games,long GamCod)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -375,7 +417,7 @@ static void MchRes_ListAllMchResultsInGam (long GamCod)
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
MchRes_ShowMchResults (Usr_OTHER,-1L,GamCod,NULL);
MchRes_ShowMchResults (Games,Usr_OTHER,-1L,GamCod,NULL);
}
}
}
@ -391,34 +433,39 @@ static void MchRes_ListAllMchResultsInGam (long GamCod)
void MchRes_ShowAllMchResultsInMch (void)
{
extern const char *Txt_Results_of_match_X;
struct Game Game;
struct Match Match;
struct Gam_Games Games;
struct Gam_Game Game;
struct Mch_Match Match;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get parameters *****/
if ((Game.GamCod = Gam_GetParams ()) == -1L)
if ((Game.GamCod = Gam_GetParams (&Games)) <= 0)
Lay_ShowErrorAndExit ("Code of game is missing.");
if ((Match.MchCod = Mch_GetParamMchCod ()) == -1L)
if ((Match.MchCod = Mch_GetParamMchCod ()) <= 0)
Lay_ShowErrorAndExit ("Code of match is missing.");
Gam_GetDataOfGameByCod (&Game);
Mch_GetDataOfMatchByCod (&Match);
/***** Game begin *****/
Gam_ShowOnlyOneGameBegin (&Game,
Gam_ShowOnlyOneGameBegin (&Games,&Game,
false, // Do not list game questions
false); // Do not put form to start new match
/***** List matches results in match *****/
MchRes_ShowResultsBegin (Str_BuildStringStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select
MchRes_ShowResultsBegin (&Games,
Str_BuildStringStr (Txt_Results_of_match_X,Match.Title),
false); // Do not list games to select
Str_FreeString ();
MchRes_ListAllMchResultsInMch (Match.MchCod);
MchRes_ListAllMchResultsInMch (&Games,Match.MchCod);
MchRes_ShowResultsEnd ();
/***** Game end *****/
Gam_ShowOnlyOneGameEnd ();
}
static void MchRes_ListAllMchResultsInMch (long MchCod)
static void MchRes_ListAllMchResultsInMch (struct Gam_Games *Games,long MchCod)
{
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -460,7 +507,7 @@ static void MchRes_ListAllMchResultsInMch (long MchCod)
{
/***** Show matches results *****/
Gbl.Usrs.Other.UsrDat.Accepted = Usr_CheckIfUsrHasAcceptedInCurrentCrs (&Gbl.Usrs.Other.UsrDat);
MchRes_ShowMchResults (Usr_OTHER,MchCod,-1L,NULL);
MchRes_ShowMchResults (Games,Usr_OTHER,MchCod,-1L,NULL);
}
}
}
@ -473,7 +520,8 @@ static void MchRes_ListAllMchResultsInMch (long MchCod)
/************************ Show results (begin / end) *************************/
/*****************************************************************************/
static void MchRes_ShowResultsBegin (const char *Title,bool ListGamesToSelect)
static void MchRes_ShowResultsBegin (struct Gam_Games *Games,
const char *Title,bool ListGamesToSelect)
{
extern const char *Hlp_ASSESSMENT_Games_results;
@ -485,7 +533,7 @@ static void MchRes_ShowResultsBegin (const char *Title,bool ListGamesToSelect)
/***** List games to select *****/
if (ListGamesToSelect)
MchRes_ListGamesToSelect ();
MchRes_ListGamesToSelect (Games);
/***** Begin match results table *****/
HTM_SECTION_Begin (MchRes_RESULTS_TABLE_ID);
@ -507,7 +555,7 @@ static void MchRes_ShowResultsEnd (void)
/********** Write list of those attendance events that have students *********/
/*****************************************************************************/
static void MchRes_ListGamesToSelect (void)
static void MchRes_ListGamesToSelect (struct Gam_Games *Games)
{
extern const char *Hlp_ASSESSMENT_Games_results;
extern const char *The_ClassFormLinkInBoxBold[The_NUM_THEMES];
@ -516,7 +564,7 @@ static void MchRes_ListGamesToSelect (void)
extern const char *Txt_Update_results;
unsigned UniqueId;
unsigned NumGame;
struct Game Game;
struct Gam_Game Game;
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Games,
@ -542,11 +590,11 @@ static void MchRes_ListGamesToSelect (void)
/***** List the events *****/
for (NumGame = 0, UniqueId = 1, Gbl.RowEvenOdd = 0;
NumGame < Gbl.Games.Num;
NumGame < Games->Num;
NumGame++, UniqueId++, Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd)
{
/* Get data of this game */
Game.GamCod = Gbl.Games.Lst[NumGame].GamCod;
Game.GamCod = Games->Lst[NumGame].GamCod;
Gam_GetDataOfGameByCod (&Game);
/* Write a row for this event */
@ -555,9 +603,9 @@ static void MchRes_ListGamesToSelect (void)
HTM_TD_Begin ("class=\"DAT CT COLOR%u\"",Gbl.RowEvenOdd);
HTM_INPUT_CHECKBOX ("GamCod",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Gam%u\" value=\"%ld\"%s",
NumGame,Gbl.Games.Lst[NumGame].GamCod,
Gbl.Games.Lst[NumGame].Selected ? " checked=\"checked\"" :
"");
NumGame,Games->Lst[NumGame].GamCod,
Games->Lst[NumGame].Selected ? " checked=\"checked\"" :
"");
HTM_TD_End ();
HTM_TD_Begin ("class=\"DAT RT COLOR%u\"",Gbl.RowEvenOdd);
@ -633,25 +681,26 @@ static void MchRes_ShowHeaderMchResults (Usr_MeOrOther_t MeOrOther)
/******* from list of selected games ********/
/*****************************************************************************/
static void MchRes_BuildGamesSelectedCommas (char **GamesSelectedCommas)
static void MchRes_BuildGamesSelectedCommas (struct Gam_Games *Games,
char **GamesSelectedCommas)
{
size_t MaxLength;
unsigned NumGame;
char LongStr[Cns_MAX_DECIMAL_DIGITS_LONG + 1];
/***** Allocate memory for subquery of games selected *****/
MaxLength = (size_t) Gbl.Games.NumSelected * (Cns_MAX_DECIMAL_DIGITS_LONG + 1);
MaxLength = (size_t) Games->NumSelected * (Cns_MAX_DECIMAL_DIGITS_LONG + 1);
if ((*GamesSelectedCommas = (char *) malloc (MaxLength + 1)) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Build subquery with list of selected games *****/
(*GamesSelectedCommas)[0] = '\0';
for (NumGame = 0;
NumGame < Gbl.Games.Num;
NumGame < Games->Num;
NumGame++)
if (Gbl.Games.Lst[NumGame].Selected)
if (Games->Lst[NumGame].Selected)
{
sprintf (LongStr,"%ld",Gbl.Games.Lst[NumGame].GamCod);
sprintf (LongStr,"%ld",Games->Lst[NumGame].GamCod);
if ((*GamesSelectedCommas)[0])
Str_Concat (*GamesSelectedCommas,",",MaxLength);
Str_Concat (*GamesSelectedCommas,LongStr,MaxLength);
@ -662,10 +711,11 @@ static void MchRes_BuildGamesSelectedCommas (char **GamesSelectedCommas)
/********* Show the matches results of a user in the current course **********/
/*****************************************************************************/
static void MchRes_ShowMchResults (Usr_MeOrOther_t MeOrOther,
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas)
static void MchRes_ShowMchResults (struct Gam_Games *Games,
Usr_MeOrOther_t MeOrOther,
long MchCod, // <= 0 ==> any
long GamCod, // <= 0 ==> any
const char *GamesSelectedCommas)
{
extern const char *Txt_Match_result;
char *MchSubQuery;
@ -679,7 +729,7 @@ static void MchRes_ShowMchResults (Usr_MeOrOther_t MeOrOther,
unsigned NumResult;
static unsigned UniqueId = 0;
char *Id;
struct Match Match;
struct Mch_Match Match;
Dat_StartEndTime_t StartEndTime;
unsigned NumQstsInThisResult;
unsigned NumQstsNotBlankInThisResult;
@ -888,17 +938,17 @@ static void MchRes_ShowMchResults (Usr_MeOrOther_t MeOrOther,
HTM_TD_Begin ("class=\"RT COLOR%u\"",Gbl.RowEvenOdd);
if (ICanViewResult)
{
Gam_SetCurrentGamCod (Match.GamCod); // Used to pass parameter
Mch_SetCurrentMchCod (Match.MchCod); // Used to pass parameter
Games->GamCod = Match.GamCod;
Games->MchCod = Match.MchCod;
switch (MeOrOther)
{
case Usr_ME:
Frm_StartForm (ActSeeOneMchResMe);
Mch_PutParamsEdit (&Gbl);
Mch_PutParamsEdit (Games);
break;
case Usr_OTHER:
Frm_StartForm (ActSeeOneMchResOth);
Mch_PutParamsEdit (&Gbl);
Mch_PutParamsEdit (Games);
Usr_PutParamOtherUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
break;
}
@ -935,10 +985,10 @@ static void MchRes_ShowMchResults (Usr_MeOrOther_t MeOrOther,
/*****************************************************************************/
static void MchRes_ShowMchResultsSummaryRow (unsigned NumResults,
unsigned NumTotalQsts,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
double TotalGrade)
unsigned NumTotalQsts,
unsigned NumTotalQstsNotBlank,
double TotalScoreOfAllResults,
double TotalGrade)
{
extern const char *Txt_Matches;
@ -1003,8 +1053,9 @@ void MchRes_ShowOneMchResult (void)
extern const char *Txt_Score;
extern const char *Txt_Grade;
extern const char *Txt_Tags;
struct Game Game;
struct Match Match;
struct Gam_Games Games;
struct Gam_Game Game;
struct Mch_Match Match;
Usr_MeOrOther_t MeOrOther;
struct UsrData *UsrDat;
Dat_StartEndTime_t StartEndTime;
@ -1015,8 +1066,11 @@ void MchRes_ShowOneMchResult (void)
bool ICanViewResult;
bool ICanViewScore;
/***** Reset games *****/
Gam_ResetGames (&Games);
/***** Get and check parameters *****/
Mch_GetAndCheckParameters (&Game,&Match);
Mch_GetAndCheckParameters (&Games,&Game,&Match);
/***** Pointer to user's data *****/
MeOrOther = (Gbl.Action.Act == ActSeeOneMchResMe) ? Usr_ME :
@ -1353,7 +1407,7 @@ static void MchRes_GetMatchResultDataByMchCod (long MchCod,long UsrCod,
/********************** Get if I can see match result ************************/
/*****************************************************************************/
static bool MchRes_CheckIfICanSeeMatchResult (struct Match *Match,long UsrCod)
static bool MchRes_CheckIfICanSeeMatchResult (struct Mch_Match *Match,long UsrCod)
{
bool ItsMe;

View File

@ -40,13 +40,12 @@
/***************************** Public prototypes *****************************/
/*****************************************************************************/
void MchRes_SelUsrsToViewMchResults (void *Args);
void MchRes_ShowMyMchResultsInCrs (void);
void MchRes_ShowMyMchResultsInGam (void);
void MchRes_ShowMyMchResultsInMch (void);
void MchRes_ShowAllMchResultsInCrs (void);
void MchRes_SelUsrsToViewMchResults (void);
void MchRes_ShowAllMchResultsInGam (void);
void MchRes_ShowAllMchResultsInMch (void);

View File

@ -3182,7 +3182,7 @@ static void Sta_ShowNumHitsPerBanner (unsigned long NumRows,
double MaxClicks = 0.0;
double TotalClicks = 0.0;
MYSQL_ROW row;
struct Banner Ban;
struct Ban_Banner Ban;
/***** Write heading *****/
HTM_TR_Begin (NULL);

View File

@ -159,7 +159,8 @@ static void Tst_IncreaseMyNumAccessTst (void);
static void Tst_UpdateLastAccTst (unsigned NumQsts);
static void Tst_ShowFormRequestEditTests (struct Tst_Test *Test);
static void Tst_ShowFormRequestSelectTestsForGame (struct Tst_Test *Test);
static void Tst_ShowFormRequestSelectTestsForGame (struct Gam_Games *Games,
struct Tst_Test *Test);
static bool Tst_CheckIfICanEditTests (void);
static void Tst_PutIconsTests (void *TestPtr);
static void Tst_PutButtonToAddQuestion (void);
@ -192,7 +193,8 @@ static void Tst_ListOneOrMoreQuestionsForEdition (struct Tst_Test *Test,
MYSQL_RES *mysql_res);
static void Tst_WriteHeadingRowQuestionsForEdition (const struct Tst_Test *Test);
static void Tst_WriteQuestionListing (struct Tst_Test *Test,unsigned NumQst);
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned NumQsts,
static void Tst_ListOneOrMoreQuestionsForSelection (struct Gam_Games *Games,
unsigned NumQsts,
MYSQL_RES *mysql_res);
static void Tst_WriteQuestionRowForSelection (unsigned NumQst,
struct Tst_Question *Question);
@ -1285,7 +1287,7 @@ static void Tst_ShowFormRequestEditTests (struct Tst_Test *Test)
/******************* Select test questions for a game ************************/
/*****************************************************************************/
void Tst_RequestSelectTestsForGame (void)
void Tst_RequestSelectTestsForGame (struct Gam_Games *Games)
{
struct Tst_Test Test;
@ -1293,7 +1295,7 @@ void Tst_RequestSelectTestsForGame (void)
Tst_TstConstructor (&Test);
/***** Show form to select test for game *****/
Tst_ShowFormRequestSelectTestsForGame (&Test); // No tags selected
Tst_ShowFormRequestSelectTestsForGame (Games,&Test); // No tags selected
/***** Destroy test *****/
Tst_TstDestructor (&Test);
@ -1303,7 +1305,8 @@ void Tst_RequestSelectTestsForGame (void)
/************** Show form to select test questions for a game ****************/
/*****************************************************************************/
static void Tst_ShowFormRequestSelectTestsForGame (struct Tst_Test *Test)
static void Tst_ShowFormRequestSelectTestsForGame (struct Gam_Games *Games,
struct Tst_Test *Test)
{
extern const char *Hlp_ASSESSMENT_Games_questions;
extern const char *Txt_No_test_questions;
@ -1325,7 +1328,7 @@ static void Tst_ShowFormRequestSelectTestsForGame (struct Tst_Test *Test)
if ((Test->Tags.Num = Tst_GetAllTagsFromCurrentCrs (&mysql_res)))
{
Frm_StartForm (ActGamLstTstQst);
Gam_PutParams (&Gbl);
Gam_PutParams (Games);
HTM_TABLE_BeginPadding (2);
@ -2215,7 +2218,7 @@ void Tst_ListQuestionsToEdit (void)
/**************** List several test questions for selection ******************/
/*****************************************************************************/
void Tst_ListQuestionsToSelect (void)
void Tst_ListQuestionsToSelect (struct Gam_Games *Games)
{
struct Tst_Test Test;
MYSQL_RES *mysql_res;
@ -2229,14 +2232,14 @@ void Tst_ListQuestionsToSelect (void)
Tst_GetQuestions (&Test,&mysql_res); // Query database
if (Test.NumQsts)
/* Show the table with the questions */
Tst_ListOneOrMoreQuestionsForSelection (Test.NumQsts,mysql_res);
Tst_ListOneOrMoreQuestionsForSelection (Games,Test.NumQsts,mysql_res);
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
else
/* Show the form again */
Tst_ShowFormRequestSelectTestsForGame (&Test);
Tst_ShowFormRequestSelectTestsForGame (Games,&Test);
/***** Destroy test *****/
Tst_TstDestructor (&Test);
@ -2926,7 +2929,8 @@ static void Tst_WriteQuestionListing (struct Tst_Test *Test,unsigned NumQst)
/*************** List for selection one or more test questions ***************/
/*****************************************************************************/
static void Tst_ListOneOrMoreQuestionsForSelection (unsigned NumQsts,
static void Tst_ListOneOrMoreQuestionsForSelection (struct Gam_Games *Games,
unsigned NumQsts,
MYSQL_RES *mysql_res)
{
extern const char *Hlp_ASSESSMENT_Games_questions;
@ -2950,7 +2954,7 @@ static void Tst_ListOneOrMoreQuestionsForSelection (unsigned NumQsts,
/***** Begin form *****/
Frm_StartForm (ActAddTstQstToGam);
Gam_PutParams (&Gbl);
Gam_PutParams (Games);
/***** Write the heading *****/
HTM_TABLE_BeginWideMarginPadding (2);

View File

@ -166,10 +166,10 @@ void Tst_WriteQstStem (const char *Stem,const char *ClassStem,bool Visible);
void Tst_WriteQstFeedback (const char *Feedback,const char *ClassFeedback);
void Tst_RequestEditTests (void);
void Tst_RequestSelectTestsForGame (void);
void Tst_RequestSelectTestsForGame (struct Gam_Games *Games);
void Tst_ListQuestionsToEdit (void);
void Tst_ListQuestionsToSelect (void);
void Tst_ListQuestionsToSelect (struct Gam_Games *Games);
void Tst_WriteParamEditQst (const struct Tst_Test *Test);
unsigned Tst_GetNumAnswersQst (long QstCod);