diff --git a/swad_action.c b/swad_action.c
index 2f19d4b65..8d0197e72 100644
--- a/swad_action.c
+++ b/swad_action.c
@@ -902,9 +902,11 @@ Users:
744. ActReqEnrSevStd Request the enrollment/removing of several users to / from current course
745. ActReqEnrSevTch Request the enrollment/removing of several users to / from current course
- 746. ActReqLstAttStd Request listing of attendance of several students to several events
- 747. ActSeeLstAttStd List attendance of several students to several events
- 748. ActPrnLstAttStd Print attendance of several students to several events
+ 746. ActReqLstStdAtt Request listing of attendance of several students to several events
+------> 746. ActSeeLstMyAtt List my attendance as student to several events
+------> 746. ActPrnLstMyAtt Print my attendance as student to several events
+ 747. ActSeeLstStdAtt List attendance of several students to several events
+ 748. ActPrnLstStdAtt Print attendance of several students to several events
749. ActFrmNewAtt Form to create a new attendance event
750. ActEdiOneAtt Edit one attendance event
751. ActNewAtt Create new attendance event
@@ -2324,9 +2326,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqEnrSevStd */{1426,-1,TabUsr,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ReqAdminStds ,NULL},
/* ActReqEnrSevTch */{1427,-1,TabUsr,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ReqAdminTchs ,NULL},
- /* ActReqLstAttStd */{1073,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ReqListAttendanceStdsCrs ,NULL},
- /* ActSeeLstAttStd */{1074,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ListAttendanceStdsCrs ,NULL},
- /* ActPrnLstAttStd */{1075,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Usr_ListAttendanceStdsCrs ,NULL},
+ /* ActReqLstStdAtt */{1073,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ReqListStdsAttendanceCrs ,NULL},
+ /* ActSeeLstMyAtt */{1473,-1,TabUsr,ActSeeAtt ,0x008,0x000,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ListMyAttendanceCrs ,NULL},
+ /* ActPrnLstMyAtt */{1474,-1,TabUsr,ActSeeAtt ,0x008,0x000,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Usr_PrintMyAttendanceCrs ,NULL},
+ /* ActSeeLstStdAtt */{1074,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Usr_ListStdsAttendanceCrs ,NULL},
+ /* ActPrnLstStdAtt */{1075,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Usr_PrintStdsAttendanceCrs ,NULL},
/* ActFrmNewAtt */{1063,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Att_RequestCreatOrEditAttEvent ,NULL},
/* ActEdiOneAtt */{1064,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Att_RequestCreatOrEditAttEvent ,NULL},
/* ActNewAtt */{1065,-1,TabUsr,ActSeeAtt ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Att_RecFormAttEvent ,NULL},
@@ -3841,9 +3845,9 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActShoAtt, // #1070
ActSeeOneAtt, // #1071
ActRecAttStd, // #1072
- ActReqLstAttStd, // #1073
- ActSeeLstAttStd, // #1074
- ActPrnLstAttStd, // #1075
+ ActReqLstStdAtt, // #1073
+ ActSeeLstStdAtt, // #1074
+ ActPrnLstStdAtt, // #1075
ActRecAttMe, // #1076
ActAutUsrChgLan, // #1077
ActSeeDocCrs, // #1078
@@ -4244,6 +4248,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActHidAnn, // #1470
ActRevAnn, // #1471
ActReqRemNot, // #1472
+ ActSeeLstMyAtt, // #1473
+ ActPrnLstMyAtt, // #1474
};
/*****************************************************************************/
diff --git a/swad_action.h b/swad_action.h
index fcff9ea98..30c201c03 100644
--- a/swad_action.h
+++ b/swad_action.h
@@ -70,9 +70,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
-#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+143+171+27+79)
+#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+145+171+27+79)
-#define Act_MAX_ACTION_COD 1472
+#define Act_MAX_ACTION_COD 1474
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@@ -929,107 +929,109 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActReqEnrSevStd (ActChgNumRowFooGrp+ 54)
#define ActReqEnrSevTch (ActChgNumRowFooGrp+ 55)
-#define ActReqLstAttStd (ActChgNumRowFooGrp+ 56)
-#define ActSeeLstAttStd (ActChgNumRowFooGrp+ 57)
-#define ActPrnLstAttStd (ActChgNumRowFooGrp+ 58)
-#define ActFrmNewAtt (ActChgNumRowFooGrp+ 59)
-#define ActEdiOneAtt (ActChgNumRowFooGrp+ 60)
-#define ActNewAtt (ActChgNumRowFooGrp+ 61)
-#define ActChgAtt (ActChgNumRowFooGrp+ 62)
-#define ActReqRemAtt (ActChgNumRowFooGrp+ 63)
-#define ActRemAtt (ActChgNumRowFooGrp+ 64)
-#define ActHidAtt (ActChgNumRowFooGrp+ 65)
-#define ActShoAtt (ActChgNumRowFooGrp+ 66)
-#define ActSeeOneAtt (ActChgNumRowFooGrp+ 67)
-#define ActRecAttStd (ActChgNumRowFooGrp+ 68)
-#define ActRecAttMe (ActChgNumRowFooGrp+ 69)
+#define ActReqLstStdAtt (ActChgNumRowFooGrp+ 56)
+#define ActSeeLstMyAtt (ActChgNumRowFooGrp+ 57)
+#define ActPrnLstMyAtt (ActChgNumRowFooGrp+ 58)
+#define ActSeeLstStdAtt (ActChgNumRowFooGrp+ 59)
+#define ActPrnLstStdAtt (ActChgNumRowFooGrp+ 60)
+#define ActFrmNewAtt (ActChgNumRowFooGrp+ 61)
+#define ActEdiOneAtt (ActChgNumRowFooGrp+ 62)
+#define ActNewAtt (ActChgNumRowFooGrp+ 63)
+#define ActChgAtt (ActChgNumRowFooGrp+ 64)
+#define ActReqRemAtt (ActChgNumRowFooGrp+ 65)
+#define ActRemAtt (ActChgNumRowFooGrp+ 66)
+#define ActHidAtt (ActChgNumRowFooGrp+ 67)
+#define ActShoAtt (ActChgNumRowFooGrp+ 68)
+#define ActSeeOneAtt (ActChgNumRowFooGrp+ 69)
+#define ActRecAttStd (ActChgNumRowFooGrp+ 70)
+#define ActRecAttMe (ActChgNumRowFooGrp+ 71)
-#define ActSignUp (ActChgNumRowFooGrp+ 70)
-#define ActReqRejSignUp (ActChgNumRowFooGrp+ 71)
-#define ActRejSignUp (ActChgNumRowFooGrp+ 72)
+#define ActSignUp (ActChgNumRowFooGrp+ 72)
+#define ActReqRejSignUp (ActChgNumRowFooGrp+ 73)
+#define ActRejSignUp (ActChgNumRowFooGrp+ 74)
-#define ActReqMdfOneOth (ActChgNumRowFooGrp+ 73)
-#define ActReqMdfOneStd (ActChgNumRowFooGrp+ 74)
-#define ActReqMdfOneTch (ActChgNumRowFooGrp+ 75)
+#define ActReqMdfOneOth (ActChgNumRowFooGrp+ 75)
+#define ActReqMdfOneStd (ActChgNumRowFooGrp+ 76)
+#define ActReqMdfOneTch (ActChgNumRowFooGrp+ 77)
-#define ActReqMdfOth (ActChgNumRowFooGrp+ 76)
-#define ActReqMdfStd (ActChgNumRowFooGrp+ 77)
-#define ActReqMdfTch (ActChgNumRowFooGrp+ 78)
+#define ActReqMdfOth (ActChgNumRowFooGrp+ 78)
+#define ActReqMdfStd (ActChgNumRowFooGrp+ 79)
+#define ActReqMdfTch (ActChgNumRowFooGrp+ 80)
-#define ActReqOthPho (ActChgNumRowFooGrp+ 79)
-#define ActReqStdPho (ActChgNumRowFooGrp+ 80)
-#define ActReqTchPho (ActChgNumRowFooGrp+ 81)
-#define ActDetOthPho (ActChgNumRowFooGrp+ 82)
-#define ActDetStdPho (ActChgNumRowFooGrp+ 83)
-#define ActDetTchPho (ActChgNumRowFooGrp+ 84)
-#define ActUpdOthPho (ActChgNumRowFooGrp+ 85)
-#define ActUpdStdPho (ActChgNumRowFooGrp+ 86)
-#define ActUpdTchPho (ActChgNumRowFooGrp+ 87)
-#define ActRemOthPho (ActChgNumRowFooGrp+ 88)
-#define ActRemStdPho (ActChgNumRowFooGrp+ 89)
-#define ActRemTchPho (ActChgNumRowFooGrp+ 90)
-#define ActCreOth (ActChgNumRowFooGrp+ 91)
-#define ActCreStd (ActChgNumRowFooGrp+ 92)
-#define ActCreTch (ActChgNumRowFooGrp+ 93)
-#define ActUpdOth (ActChgNumRowFooGrp+ 94)
-#define ActUpdStd (ActChgNumRowFooGrp+ 95)
-#define ActUpdTch (ActChgNumRowFooGrp+ 96)
+#define ActReqOthPho (ActChgNumRowFooGrp+ 81)
+#define ActReqStdPho (ActChgNumRowFooGrp+ 82)
+#define ActReqTchPho (ActChgNumRowFooGrp+ 83)
+#define ActDetOthPho (ActChgNumRowFooGrp+ 84)
+#define ActDetStdPho (ActChgNumRowFooGrp+ 85)
+#define ActDetTchPho (ActChgNumRowFooGrp+ 86)
+#define ActUpdOthPho (ActChgNumRowFooGrp+ 87)
+#define ActUpdStdPho (ActChgNumRowFooGrp+ 88)
+#define ActUpdTchPho (ActChgNumRowFooGrp+ 89)
+#define ActRemOthPho (ActChgNumRowFooGrp+ 90)
+#define ActRemStdPho (ActChgNumRowFooGrp+ 91)
+#define ActRemTchPho (ActChgNumRowFooGrp+ 92)
+#define ActCreOth (ActChgNumRowFooGrp+ 93)
+#define ActCreStd (ActChgNumRowFooGrp+ 94)
+#define ActCreTch (ActChgNumRowFooGrp+ 95)
+#define ActUpdOth (ActChgNumRowFooGrp+ 96)
+#define ActUpdStd (ActChgNumRowFooGrp+ 97)
+#define ActUpdTch (ActChgNumRowFooGrp+ 98)
-#define ActReqAccEnrStd (ActChgNumRowFooGrp+ 97)
-#define ActReqAccEnrTch (ActChgNumRowFooGrp+ 98)
-#define ActAccEnrStd (ActChgNumRowFooGrp+ 99)
-#define ActAccEnrTch (ActChgNumRowFooGrp+100)
-#define ActRemMe_Std (ActChgNumRowFooGrp+101)
-#define ActRemMe_Tch (ActChgNumRowFooGrp+102)
+#define ActReqAccEnrStd (ActChgNumRowFooGrp+ 99)
+#define ActReqAccEnrTch (ActChgNumRowFooGrp+100)
+#define ActAccEnrStd (ActChgNumRowFooGrp+101)
+#define ActAccEnrTch (ActChgNumRowFooGrp+102)
+#define ActRemMe_Std (ActChgNumRowFooGrp+103)
+#define ActRemMe_Tch (ActChgNumRowFooGrp+104)
-#define ActNewAdmIns (ActChgNumRowFooGrp+103)
-#define ActRemAdmIns (ActChgNumRowFooGrp+104)
-#define ActNewAdmCtr (ActChgNumRowFooGrp+105)
-#define ActRemAdmCtr (ActChgNumRowFooGrp+106)
-#define ActNewAdmDeg (ActChgNumRowFooGrp+107)
-#define ActRemAdmDeg (ActChgNumRowFooGrp+108)
+#define ActNewAdmIns (ActChgNumRowFooGrp+105)
+#define ActRemAdmIns (ActChgNumRowFooGrp+106)
+#define ActNewAdmCtr (ActChgNumRowFooGrp+107)
+#define ActRemAdmCtr (ActChgNumRowFooGrp+108)
+#define ActNewAdmDeg (ActChgNumRowFooGrp+109)
+#define ActRemAdmDeg (ActChgNumRowFooGrp+110)
-#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+109)
-#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+110)
+#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+111)
+#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+112)
-#define ActFrmIDsOth (ActChgNumRowFooGrp+111)
-#define ActFrmIDsStd (ActChgNumRowFooGrp+112)
-#define ActFrmIDsTch (ActChgNumRowFooGrp+113)
-#define ActRemID_Oth (ActChgNumRowFooGrp+114)
-#define ActRemID_Std (ActChgNumRowFooGrp+115)
-#define ActRemID_Tch (ActChgNumRowFooGrp+116)
-#define ActNewID_Oth (ActChgNumRowFooGrp+117)
-#define ActNewID_Std (ActChgNumRowFooGrp+118)
-#define ActNewID_Tch (ActChgNumRowFooGrp+119)
-#define ActFrmPwdOth (ActChgNumRowFooGrp+120)
-#define ActFrmPwdStd (ActChgNumRowFooGrp+121)
-#define ActFrmPwdTch (ActChgNumRowFooGrp+122)
-#define ActChgPwdOth (ActChgNumRowFooGrp+123)
-#define ActChgPwdStd (ActChgNumRowFooGrp+124)
-#define ActChgPwdTch (ActChgNumRowFooGrp+125)
-#define ActRemStdCrs (ActChgNumRowFooGrp+126)
-#define ActRemTchCrs (ActChgNumRowFooGrp+127)
-#define ActRemUsrGbl (ActChgNumRowFooGrp+128)
+#define ActFrmIDsOth (ActChgNumRowFooGrp+113)
+#define ActFrmIDsStd (ActChgNumRowFooGrp+114)
+#define ActFrmIDsTch (ActChgNumRowFooGrp+115)
+#define ActRemID_Oth (ActChgNumRowFooGrp+116)
+#define ActRemID_Std (ActChgNumRowFooGrp+117)
+#define ActRemID_Tch (ActChgNumRowFooGrp+118)
+#define ActNewID_Oth (ActChgNumRowFooGrp+119)
+#define ActNewID_Std (ActChgNumRowFooGrp+120)
+#define ActNewID_Tch (ActChgNumRowFooGrp+121)
+#define ActFrmPwdOth (ActChgNumRowFooGrp+122)
+#define ActFrmPwdStd (ActChgNumRowFooGrp+123)
+#define ActFrmPwdTch (ActChgNumRowFooGrp+124)
+#define ActChgPwdOth (ActChgNumRowFooGrp+125)
+#define ActChgPwdStd (ActChgNumRowFooGrp+126)
+#define ActChgPwdTch (ActChgNumRowFooGrp+127)
+#define ActRemStdCrs (ActChgNumRowFooGrp+128)
+#define ActRemTchCrs (ActChgNumRowFooGrp+129)
+#define ActRemUsrGbl (ActChgNumRowFooGrp+130)
-#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+129)
-#define ActRemAllStdCrs (ActChgNumRowFooGrp+130)
+#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+131)
+#define ActRemAllStdCrs (ActChgNumRowFooGrp+132)
-#define ActReqRemOldUsr (ActChgNumRowFooGrp+131)
-#define ActRemOldUsr (ActChgNumRowFooGrp+132)
+#define ActReqRemOldUsr (ActChgNumRowFooGrp+133)
+#define ActRemOldUsr (ActChgNumRowFooGrp+134)
-#define ActLstClk (ActChgNumRowFooGrp+133)
+#define ActLstClk (ActChgNumRowFooGrp+135)
-#define ActSeePubPrf (ActChgNumRowFooGrp+134)
-#define ActCal1stClkTim (ActChgNumRowFooGrp+135)
-#define ActCalNumClk (ActChgNumRowFooGrp+136)
-#define ActCalNumFilVie (ActChgNumRowFooGrp+137)
-#define ActCalNumForPst (ActChgNumRowFooGrp+138)
-#define ActCalNumMsgSnt (ActChgNumRowFooGrp+139)
+#define ActSeePubPrf (ActChgNumRowFooGrp+136)
+#define ActCal1stClkTim (ActChgNumRowFooGrp+137)
+#define ActCalNumClk (ActChgNumRowFooGrp+138)
+#define ActCalNumFilVie (ActChgNumRowFooGrp+139)
+#define ActCalNumForPst (ActChgNumRowFooGrp+140)
+#define ActCalNumMsgSnt (ActChgNumRowFooGrp+141)
-#define ActFolUsr (ActChgNumRowFooGrp+140)
-#define ActUnfUsr (ActChgNumRowFooGrp+141)
-#define ActSeeFlg (ActChgNumRowFooGrp+142)
-#define ActSeeFlr (ActChgNumRowFooGrp+143)
+#define ActFolUsr (ActChgNumRowFooGrp+142)
+#define ActUnfUsr (ActChgNumRowFooGrp+143)
+#define ActSeeFlg (ActChgNumRowFooGrp+144)
+#define ActSeeFlr (ActChgNumRowFooGrp+145)
/*****************************************************************************/
/******************************* Messages tab ********************************/
diff --git a/swad_attendance.c b/swad_attendance.c
index 9610f6859..65e358e38 100644
--- a/swad_attendance.c
+++ b/swad_attendance.c
@@ -55,6 +55,12 @@ extern struct Globals Gbl;
/******************************** Private types ******************************/
/*****************************************************************************/
+typedef enum
+ {
+ Att_NORMAL_VIEW,
+ Att_PRINT_VIEW,
+ } Att_TypeOfView_t;
+
/*****************************************************************************/
/****************************** Private variables ****************************/
/*****************************************************************************/
@@ -69,7 +75,8 @@ static void Att_ShowOneAttEvent (struct AttendanceEvent *Att,bool ShowOnlyThisAt
static void Att_WriteAttEventAuthor (struct AttendanceEvent *Att);
static void Att_GetParamAttOrderType (void);
-static void Att_PutFormToListStds (void);
+static void Att_PutFormToListMyAttendance (void);
+static void Att_PutFormToListStdsAttendance (void);
static void Att_PutFormToListStdsParams (void);
static void Att_PutFormToCreateNewAttEvent (void);
@@ -98,15 +105,20 @@ static void Att_RegUsrInAttEventChangingComments (long AttCod,long UsrCod,bool P
const char *CommentStd,const char *CommentTch);
static void Att_RemoveUsrFromAttEvent (long AttCod,long UsrCod);
+static void Usr_ListOrPrintMyAttendanceCrs (Att_TypeOfView_t TypeOfView);
+static void Usr_ListOrPrintStdsAttendanceCrs (Att_TypeOfView_t TypeOfView);
+
static void Att_GetListSelectedUsrCods (unsigned NumStdsInList,long **LstSelectedUsrCods);
static void Att_GetListSelectedAttCods (char **StrAttCodsSelected);
-static void Att_PutFormToPrintListStds (void);
-static void Att_PutFormToPrintListStdsParams (void);
+static void Att_PutFormToPrintMyList (void);
+static void Att_PutFormToPrintMyListParams (void);
+static void Att_PutFormToPrintStdsList (void);
+static void Att_PutFormToPrintStdsListParams (void);
static void Att_PutButtonToShowDetails (void);
-static void Att_ListEventsToSelect (void);
-static void Att_ListStdsAttendanceTable (unsigned NumStdsInList,long *LstSelectedUsrCods);
+static void Att_ListEventsToSelect (Att_TypeOfView_t TypeOfView);
+static void Att_ListStdsAttendanceTable (Att_TypeOfView_t TypeOfView,unsigned NumStdsInList,long *LstSelectedUsrCods);
static void Att_WriteTableHeadSeveralAttEvents (void);
static void Att_WriteRowStdSeveralAttEvents (unsigned NumStd,struct UsrData *UsrDat);
static void Att_ListStdsWithAttEventsDetails (unsigned NumStdsInList,long *LstSelectedUsrCods);
@@ -118,21 +130,31 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat);
void Att_SeeAttEvents (void)
{
+ extern const char *Txt_No_events;
+
/***** Get parameters *****/
Att_GetParamAttOrderType ();
Grp_GetParamWhichGrps ();
Pag_GetParamPagNum (Pag_ATT_EVENTS);
+ /***** Get list of attendance events *****/
+ Att_GetListAttEvents (Att_NEWEST_FIRST);
+
/***** Show contextual menu *****/
fprintf (Gbl.F.Out,"
");
/***** Show all the attendance events *****/
- Att_ShowAllAttEvents ();
+ if (Gbl.AttEvents.Num)
+ Att_ShowAllAttEvents ();
+ else
+ Lay_ShowAlert (Lay_INFO,Txt_No_events);
+
+ /***** Free list of attendance events *****/
+ Att_FreeListAttEvents ();
}
/*****************************************************************************/
@@ -163,78 +191,72 @@ static void Att_ShowAllAttEvents (void)
struct Pagination Pagination;
unsigned NumAttEvent;
- /***** Get list of attendance events *****/
- Att_GetListAttEvents (Att_NEWEST_FIRST);
+ /***** Compute variables related to pagination *****/
+ Pagination.NumItems = Gbl.AttEvents.Num;
+ Pagination.CurrentPage = (int) Gbl.Pag.CurrentPage;
+ Pag_CalculatePagination (&Pagination);
+ Gbl.Pag.CurrentPage = (unsigned) Pagination.CurrentPage;
- /***** Compute variables related to pagination *****/
- Pagination.NumItems = Gbl.AttEvents.Num;
- Pagination.CurrentPage = (int) Gbl.Pag.CurrentPage;
- Pag_CalculatePagination (&Pagination);
- Gbl.Pag.CurrentPage = (unsigned) Pagination.CurrentPage;
+ /***** Write links to pages *****/
+ if (Pagination.MoreThanOnePage)
+ Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,0,&Pagination);
- /***** Write links to pages *****/
- if (Pagination.MoreThanOnePage)
- Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,0,&Pagination);
+ /***** Table start *****/
+ Lay_StartRoundFrameTable (NULL,2,Txt_Events);
- /***** Table start *****/
- Lay_StartRoundFrameTable (NULL,2,Txt_Events);
+ /***** Select whether show only my groups or all groups *****/
+ if (Gbl.CurrentCrs.Grps.NumGrps)
+ {
+ fprintf (Gbl.F.Out,""
+ "");
+ Att_PutFormToSelectWhichGroupsToShow ();
+ fprintf (Gbl.F.Out," | "
+ "
");
+ }
- /***** Select whether show only my groups or all groups *****/
- if (Gbl.CurrentCrs.Grps.NumGrps)
- {
- fprintf (Gbl.F.Out,""
- "");
- Att_PutFormToSelectWhichGroupsToShow ();
- fprintf (Gbl.F.Out," | "
- "
");
- }
+ /***** Table head *****/
+ fprintf (Gbl.F.Out,"");
+ for (Order = Att_ORDER_BY_START_DATE;
+ Order <= Att_ORDER_BY_END_DATE;
+ Order++)
+ {
+ fprintf (Gbl.F.Out,"");
+ Act_FormStart (ActSeeAtt);
+ Grp_PutParamWhichGrps ();
+ Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
+ Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
+ Act_LinkFormSubmit (Txt_ASG_ATT_OR_SVY_HELP_ORDER[Order],"TIT_TBL");
+ if (Order == Gbl.AttEvents.SelectedOrderType)
+ fprintf (Gbl.F.Out,"");
+ fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_OR_SVY_ORDER[Order]);
+ if (Order == Gbl.AttEvents.SelectedOrderType)
+ fprintf (Gbl.F.Out,"");
+ fprintf (Gbl.F.Out,"");
+ Act_FormEnd ();
+ fprintf (Gbl.F.Out," | ");
+ }
+ fprintf (Gbl.F.Out,""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ "
",
+ Txt_Event,
+ Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
- /***** Table head *****/
- fprintf (Gbl.F.Out,"");
- for (Order = Att_ORDER_BY_START_DATE;
- Order <= Att_ORDER_BY_END_DATE;
- Order++)
- {
- fprintf (Gbl.F.Out,"");
- Act_FormStart (ActSeeAtt);
- Grp_PutParamWhichGrps ();
- Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
- Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
- Act_LinkFormSubmit (Txt_ASG_ATT_OR_SVY_HELP_ORDER[Order],"TIT_TBL");
- if (Order == Gbl.AttEvents.SelectedOrderType)
- fprintf (Gbl.F.Out,"");
- fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_OR_SVY_ORDER[Order]);
- if (Order == Gbl.AttEvents.SelectedOrderType)
- fprintf (Gbl.F.Out,"");
- fprintf (Gbl.F.Out,"");
- Act_FormEnd ();
- fprintf (Gbl.F.Out," | ");
- }
- fprintf (Gbl.F.Out,""
- "%s"
- " | "
- ""
- "%s"
- " | "
- "
",
- Txt_Event,
- Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
+ /***** Write all the attendance events *****/
+ for (NumAttEvent = Pagination.FirstItemVisible, Gbl.RowEvenOdd = 0;
+ NumAttEvent <= Pagination.LastItemVisible;
+ NumAttEvent++)
+ Att_ShowOneAttEvent (&Gbl.AttEvents.Lst[NumAttEvent-1],false);
- /***** Write all the attendance events *****/
- for (NumAttEvent = Pagination.FirstItemVisible, Gbl.RowEvenOdd = 0;
- NumAttEvent <= Pagination.LastItemVisible;
- NumAttEvent++)
- Att_ShowOneAttEvent (&Gbl.AttEvents.Lst[NumAttEvent-1],false);
+ /***** Table end *****/
+ Lay_EndRoundFrameTable ();
- /***** Table end *****/
- Lay_EndRoundFrameTable ();
-
- /***** Write again links to pages *****/
- if (Pagination.MoreThanOnePage)
- Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,0,&Pagination);
-
- /***** Free list of attendance events *****/
- Att_FreeListAttEvents ();
+ /***** Write again links to pages *****/
+ if (Pagination.MoreThanOnePage)
+ Pag_WriteLinksToPagesCentered (Pag_ATT_EVENTS,0,&Pagination);
}
/*****************************************************************************/
@@ -440,12 +462,23 @@ void Att_PutHiddenParamAttOrderType (void)
/**** Put a link (form) to list assistance of students to several events *****/
/*****************************************************************************/
-static void Att_PutFormToListStds (void)
+static void Att_PutFormToListMyAttendance (void)
{
extern const char *Txt_Attendance_list;
- /***** Put form to create a new attendance event *****/
- Act_PutContextualLink (ActReqLstAttStd,Att_PutFormToListStdsParams,
+ Act_PutContextualLink (ActSeeLstMyAtt,NULL,
+ "list",Txt_Attendance_list);
+ }
+
+/*****************************************************************************/
+/** Put a link (form) to list my assistance (as student) to several events ***/
+/*****************************************************************************/
+
+static void Att_PutFormToListStdsAttendance (void)
+ {
+ extern const char *Txt_Attendance_list;
+
+ Act_PutContextualLink (ActReqLstStdAtt,Att_PutFormToListStdsParams,
"list",Txt_Attendance_list);
}
@@ -607,7 +640,6 @@ static void Att_GetListAttEvents (Att_OrderTime_t Order)
Gbl.AttEvents.LstIsRead = true;
}
-
/*****************************************************************************/
/********* Get attendance event data using its code and check course *********/
/*****************************************************************************/
@@ -1096,7 +1128,10 @@ void Att_RequestCreatOrEditAttEvent (void)
Act_FormEnd ();
/***** Show current attendance events *****/
- Att_ShowAllAttEvents ();
+ Att_GetListAttEvents (Att_NEWEST_FIRST);
+ if (Gbl.AttEvents.Num)
+ Att_ShowAllAttEvents ();
+ Att_FreeListAttEvents ();
}
/*****************************************************************************/
@@ -2262,7 +2297,6 @@ static unsigned Att_GetNumStdsFromAListWhoAreInAttEvent (long AttCod,long LstSel
strcat (Query,SubQuery);
}
strcat (Query,") AND Present='Y'");
- // Lay_ShowAlert (Lay_INFO,Query);
NumStdsInAttEvent = (unsigned) DB_QueryCOUNT (Query,"can not get number of students from a list who are registered in an event");
@@ -2449,18 +2483,21 @@ void Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (long AttCod)
/********* Request listing attendance of students to several events **********/
/*****************************************************************************/
-void Usr_ReqListAttendanceStdsCrs (void)
+void Usr_ReqListStdsAttendanceCrs (void)
{
extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_Show_list;
+ /***** Get list of attendance events *****/
+ Att_GetListAttEvents (Att_OLDEST_FIRST);
+
/***** Get and update type of list,
- number of columns in class photo
- and preference about view photos *****/
+ number of columns in class photo
+ and preference about view photos *****/
Usr_GetAndUpdatePrefsAboutUsrList ();
/***** Form to select groups *****/
- Grp_ShowFormToSelectSeveralGroups (ActReqLstAttStd);
+ Grp_ShowFormToSelectSeveralGroups (ActReqLstStdAtt);
/***** Get and order lists of users from current course *****/
Usr_GetUsrsLst (Rol_STUDENT,Sco_SCOPE_CRS,NULL,false);
@@ -2468,38 +2505,38 @@ void Usr_ReqListAttendanceStdsCrs (void)
if (Gbl.Usrs.LstStds.NumUsrs)
{
if (Usr_GetIfShowBigList (Gbl.Usrs.LstStds.NumUsrs))
- {
- /***** Get list of selected users *****/
- Usr_GetListsSelectedUsrs ();
+ {
+ /***** Get list of selected users *****/
+ Usr_GetListsSelectedUsrs ();
- /***** Draw a class photo with students of the course *****/
- /* Start frame */
- Lay_StartRoundFrame (NULL,Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
+ /***** Draw a class photo with students of the course *****/
+ /* Start frame */
+ Lay_StartRoundFrame (NULL,Txt_ROLES_PLURAL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
/* Form to select type of list used for select several users */
- Usr_ShowFormsToSelectUsrListType (ActReqLstAttStd);
+ Usr_ShowFormsToSelectUsrListType (ActReqLstStdAtt);
- /* Start form */
- Act_FormStart (ActSeeLstAttStd);
- Grp_PutParamsCodGrps ();
+ /* Start form */
+ Act_FormStart (ActSeeLstStdAtt);
+ Grp_PutParamsCodGrps ();
- /* Write list of students to select some of them */
- fprintf (Gbl.F.Out,"");
- Usr_ListUsersToSelect (Rol_STUDENT);
- fprintf (Gbl.F.Out,"
");
+ /* Write list of students to select some of them */
+ fprintf (Gbl.F.Out,"");
+ Usr_ListUsersToSelect (Rol_STUDENT);
+ fprintf (Gbl.F.Out,"
");
- /* Send button */
+ /* Send button */
Lay_PutConfirmButton (Txt_Show_list);
- /* End form */
- Act_FormEnd ();
+ /* End form */
+ Act_FormEnd ();
- /* End frame */
- Lay_EndRoundFrame ();
+ /* End frame */
+ Lay_EndRoundFrame ();
- /***** Free memory used for by the list of users *****/
- Usr_FreeListsSelectedUsrCods ();
- }
+ /***** Free memory used for by the list of users *****/
+ Usr_FreeListsSelectedUsrCods ();
+ }
}
else
Usr_ShowWarningNoUsersFound (Rol_STUDENT);
@@ -2509,13 +2546,93 @@ void Usr_ReqListAttendanceStdsCrs (void)
/***** Free memory for list of selected groups *****/
Grp_FreeListCodSelectedGrps ();
+
+ /***** Free list of attendance events *****/
+ Att_FreeListAttEvents ();
+ }
+
+/*****************************************************************************/
+/********** List my attendance (I am a student) to several events ************/
+/*****************************************************************************/
+
+void Usr_ListMyAttendanceCrs (void)
+ {
+ Usr_ListOrPrintMyAttendanceCrs (Att_NORMAL_VIEW);
+ }
+
+void Usr_PrintMyAttendanceCrs (void)
+ {
+ Usr_ListOrPrintMyAttendanceCrs (Att_PRINT_VIEW);
+ }
+
+static void Usr_ListOrPrintMyAttendanceCrs (Att_TypeOfView_t TypeOfView)
+ {
+ unsigned NumAttEvent;
+ char YN[1+1];
+
+ /***** Get list of attendance events *****/
+ Att_GetListAttEvents (Att_OLDEST_FIRST);
+
+ /***** Get boolean parameter that indicates if details must be shown *****/
+ Par_GetParToText ("ShowDetails",YN,1);
+ Gbl.AttEvents.ShowDetails = (Str_ConvertToUpperLetter (YN[0]) == 'Y');
+
+ /***** Get list of groups selected ******/
+ Grp_GetParCodsSeveralGrpsToShowUsrs ();
+
+ /***** Get number of students in each event *****/
+ for (NumAttEvent = 0;
+ NumAttEvent < Gbl.AttEvents.Num;
+ NumAttEvent++)
+ /* Get number of students in this event */
+ Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList = Att_GetNumStdsFromAListWhoAreInAttEvent (Gbl.AttEvents.Lst[NumAttEvent].AttCod,
+ &Gbl.Usrs.Me.UsrDat.UsrCod,1);
+
+ /***** Get list of attendance events selected *****/
+ Att_GetListSelectedAttCods (&Gbl.AttEvents.StrAttCodsSelected);
+
+ /***** Put link to print *****/
+ if (TypeOfView == Att_NORMAL_VIEW)
+ Att_PutFormToPrintMyList ();
+
+ /***** List events to select *****/
+ Att_ListEventsToSelect (TypeOfView);
+
+ /***** Get my preference about photos in users' list for current course *****/
+ Usr_GetMyPrefAboutListWithPhotosFromDB ();
+
+ /***** Show table with attendances for every student in list *****/
+ Att_ListStdsAttendanceTable (TypeOfView,1,&Gbl.Usrs.Me.UsrDat.UsrCod);
+
+ /***** Show details or put button to show details *****/
+ if (Gbl.AttEvents.ShowDetails)
+ Att_ListStdsWithAttEventsDetails (1,&Gbl.Usrs.Me.UsrDat.UsrCod);
+
+ /***** Free memory for list of attendance events selected *****/
+ free ((void *) Gbl.AttEvents.StrAttCodsSelected);
+
+ /***** Free list of groups selected *****/
+ Grp_FreeListCodSelectedGrps ();
+
+ /***** Free list of attendance events *****/
+ Att_FreeListAttEvents ();
}
/*****************************************************************************/
/************* List attendance of students to several events *****************/
/*****************************************************************************/
-void Usr_ListAttendanceStdsCrs (void)
+void Usr_ListStdsAttendanceCrs (void)
+ {
+ Usr_ListOrPrintStdsAttendanceCrs (Att_NORMAL_VIEW);
+ }
+
+void Usr_PrintStdsAttendanceCrs (void)
+ {
+ Usr_ListOrPrintStdsAttendanceCrs (Att_PRINT_VIEW);
+ }
+
+static void Usr_ListOrPrintStdsAttendanceCrs (Att_TypeOfView_t TypeOfView)
{
extern const char *Txt_You_must_select_one_ore_more_students;
unsigned NumStdsInList;
@@ -2548,27 +2665,27 @@ void Usr_ListAttendanceStdsCrs (void)
NumAttEvent++)
/* Get number of students in this event */
Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList = Att_GetNumStdsFromAListWhoAreInAttEvent (Gbl.AttEvents.Lst[NumAttEvent].AttCod,
- LstSelectedUsrCods,NumStdsInList);
+ LstSelectedUsrCods,NumStdsInList);
/***** Get list of attendance events selected *****/
Att_GetListSelectedAttCods (&Gbl.AttEvents.StrAttCodsSelected);
/***** Put link to print *****/
- if (Gbl.CurrentAct == ActSeeLstAttStd)
- Att_PutFormToPrintListStds ();
+ if (TypeOfView == Att_NORMAL_VIEW)
+ Att_PutFormToPrintStdsList ();
/***** List events to select *****/
- Att_ListEventsToSelect ();
+ Att_ListEventsToSelect (TypeOfView);
/***** Get my preference about photos in users' list for current course *****/
Usr_GetMyPrefAboutListWithPhotosFromDB ();
/***** Show table with attendances for every student in list *****/
- Att_ListStdsAttendanceTable (NumStdsInList,LstSelectedUsrCods);
+ Att_ListStdsAttendanceTable (TypeOfView,NumStdsInList,LstSelectedUsrCods);
/***** Show details or put button to show details *****/
if (Gbl.AttEvents.ShowDetails)
- Att_ListStdsWithAttEventsDetails (NumStdsInList,LstSelectedUsrCods);
+ Att_ListStdsWithAttEventsDetails (NumStdsInList,LstSelectedUsrCods);
/***** Free memory for list of attendance events selected *****/
free ((void *) Gbl.AttEvents.StrAttCodsSelected);
@@ -2582,7 +2699,7 @@ void Usr_ListAttendanceStdsCrs (void)
else // No students selected
{
Lay_ShowAlert (Lay_WARNING,Txt_You_must_select_one_ore_more_students);
- Usr_ReqListAttendanceStdsCrs (); // ...show again the form
+ Usr_ReqListStdsAttendanceCrs (); // ...show again the form
}
/***** Free memory used for by the list of users *****/
@@ -2734,26 +2851,49 @@ static void Att_GetListSelectedAttCods (char **StrAttCodsSelected)
}
/*****************************************************************************/
-/**** Put a link (form) to list assistance of students to several events *****/
+/** Put a link (form) to print my assistance (as student) to several events **/
/*****************************************************************************/
-static void Att_PutFormToPrintListStds (void)
+static void Att_PutFormToPrintMyList (void)
{
extern const char *Txt_Print;
/***** Link to print view *****/
fprintf (Gbl.F.Out,"");
}
-static void Att_PutFormToPrintListStdsParams (void)
+static void Att_PutFormToPrintMyListParams (void)
+ {
+ if (Gbl.AttEvents.ShowDetails)
+ Par_PutHiddenParamChar ("ShowDetails",'Y');
+ if (Gbl.AttEvents.StrAttCodsSelected[0])
+ Par_PutHiddenParamString ("AttCods",Gbl.AttEvents.StrAttCodsSelected);
+ }
+
+/*****************************************************************************/
+/**** Put a link (form) to print assistance of students to several events ****/
+/*****************************************************************************/
+
+static void Att_PutFormToPrintStdsList (void)
+ {
+ extern const char *Txt_Print;
+
+ /***** Link to print view *****/
+ fprintf (Gbl.F.Out,"");
+ }
+
+static void Att_PutFormToPrintStdsListParams (void)
{
if (Gbl.AttEvents.ShowDetails)
Par_PutHiddenParamChar ("ShowDetails",'Y');
Grp_PutParamsCodGrps ();
- Usr_PutHiddenParUsrCodAll (ActPrnLstAttStd,Gbl.Usrs.Select.All);
+ Usr_PutHiddenParUsrCodAll (ActPrnLstStdAtt,Gbl.Usrs.Select.All);
if (Gbl.AttEvents.StrAttCodsSelected[0])
Par_PutHiddenParamString ("AttCods",Gbl.AttEvents.StrAttCodsSelected);
}
@@ -2768,10 +2908,10 @@ static void Att_PutButtonToShowDetails (void)
/***** Button to show more details *****/
fprintf (Gbl.F.Out,"");
- Act_FormStart (ActSeeLstAttStd);
+ Act_FormStart (Gbl.CurrentAct);
Par_PutHiddenParamChar ("ShowDetails",'Y');
Grp_PutParamsCodGrps ();
- Usr_PutHiddenParUsrCodAll (ActSeeLstAttStd,Gbl.Usrs.Select.All);
+ Usr_PutHiddenParUsrCodAll (Gbl.CurrentAct,Gbl.Usrs.Select.All);
if (Gbl.AttEvents.StrAttCodsSelected[0])
Par_PutHiddenParamString ("AttCods",Gbl.AttEvents.StrAttCodsSelected);
Lay_PutConfirmButton (Txt_Show_more_details);
@@ -2783,7 +2923,7 @@ static void Att_PutButtonToShowDetails (void)
/********** Write list of those attendance events that have students *********/
/*****************************************************************************/
-static void Att_ListEventsToSelect (void)
+static void Att_ListEventsToSelect (Att_TypeOfView_t TypeOfView)
{
extern const char *The_ClassFormBold[The_NUM_THEMES];
extern const char *Txt_Events;
@@ -2796,11 +2936,11 @@ static void Att_ListEventsToSelect (void)
/***** Start form to update the attendance
depending on the events selected *****/
- if (Gbl.CurrentAct == ActSeeLstAttStd)
+ if (TypeOfView == Att_NORMAL_VIEW)
{
- Act_FormStart (ActSeeLstAttStd);
+ Act_FormStart (Gbl.CurrentAct);
Grp_PutParamsCodGrps ();
- Usr_PutHiddenParUsrCodAll (ActSeeLstAttStd,Gbl.Usrs.Select.All);
+ Usr_PutHiddenParUsrCodAll (Gbl.CurrentAct,Gbl.Usrs.Select.All);
}
/***** Start frame *****/
@@ -2861,7 +3001,7 @@ static void Att_ListEventsToSelect (void)
}
/***** Put button to refresh *****/
- if (Gbl.CurrentAct == ActSeeLstAttStd)
+ if (TypeOfView == Att_NORMAL_VIEW)
{
fprintf (Gbl.F.Out,"
"
"");
@@ -2875,7 +3015,7 @@ static void Att_ListEventsToSelect (void)
Lay_EndRoundFrameTable ();
/***** End form *****/
- if (Gbl.CurrentAct == ActSeeLstAttStd)
+ if (TypeOfView == Att_NORMAL_VIEW)
Act_FormEnd ();
}
@@ -2883,7 +3023,7 @@ static void Att_ListEventsToSelect (void)
/*********** Show table with attendances for every student in list ***********/
/*****************************************************************************/
-static void Att_ListStdsAttendanceTable (unsigned NumStdsInList,long *LstSelectedUsrCods)
+static void Att_ListStdsAttendanceTable (Att_TypeOfView_t TypeOfView,unsigned NumStdsInList,long *LstSelectedUsrCods)
{
extern const char *Txt_Attendance;
extern const char *Txt_Number_of_students;
@@ -2917,32 +3057,35 @@ static void Att_ListStdsAttendanceTable (unsigned NumStdsInList,long *LstSelecte
}
/***** Last row with the total of students present in each event *****/
- fprintf (Gbl.F.Out," |
"
- ""
- "%s:"
- " | ",
- Gbl.Usrs.Listing.WithPhotos ? 4 :
- 3,
- Txt_Number_of_students);
- for (NumAttEvent = 0, Total = 0;
- NumAttEvent < Gbl.AttEvents.Num;
- NumAttEvent++)
- if (Gbl.AttEvents.Lst[NumAttEvent].Selected)
- {
- fprintf (Gbl.F.Out,""
- "%u"
- " | ",
- Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList);
- Total += Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList;
- }
- fprintf (Gbl.F.Out,""
- "%u"
- " | "
- "
",
- Total);
+ if (NumStdsInList > 1)
+ {
+ fprintf (Gbl.F.Out,""
+ ""
+ "%s:"
+ " | ",
+ Gbl.Usrs.Listing.WithPhotos ? 4 :
+ 3,
+ Txt_Number_of_students);
+ for (NumAttEvent = 0, Total = 0;
+ NumAttEvent < Gbl.AttEvents.Num;
+ NumAttEvent++)
+ if (Gbl.AttEvents.Lst[NumAttEvent].Selected)
+ {
+ fprintf (Gbl.F.Out,""
+ "%u"
+ " | ",
+ Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList);
+ Total += Gbl.AttEvents.Lst[NumAttEvent].NumStdsFromList;
+ }
+ fprintf (Gbl.F.Out,""
+ "%u"
+ " | "
+ "
",
+ Total);
+ }
/***** Button to show more details *****/
- if (Gbl.CurrentAct == ActSeeLstAttStd && !Gbl.AttEvents.ShowDetails)
+ if (TypeOfView == Att_NORMAL_VIEW && !Gbl.AttEvents.ShowDetails)
{
fprintf (Gbl.F.Out,""
"",
@@ -3147,6 +3290,8 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
unsigned NumAttEvent;
unsigned UniqueId;
bool Present;
+ bool ShowCommentStd;
+ bool ShowCommentTch;
char CommentStd[Cns_MAX_BYTES_TEXT+1];
char CommentTch[Cns_MAX_BYTES_TEXT+1];
@@ -3207,6 +3352,10 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
/***** Get comments for this student *****/
Present = Att_CheckIfUsrIsPresentInAttEventAndGetComments (Gbl.AttEvents.Lst[NumAttEvent].AttCod,UsrDat->UsrCod,CommentStd,CommentTch);
+ ShowCommentStd = CommentStd[0];
+ ShowCommentTch = CommentTch[0] &&
+ (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
+ Gbl.AttEvents.Lst[NumAttEvent].CommentTchVisible);
/***** Write a row for this event *****/
fprintf (Gbl.F.Out," |
"
@@ -3239,8 +3388,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
UniqueId,Gbl.AttEvents.Lst[NumAttEvent].TimeUTC[Att_START_TIME]);
/***** Write comments for this student *****/
- if (CommentStd[0] ||
- CommentTch[0])
+ if (ShowCommentStd || ShowCommentTch)
{
fprintf (Gbl.F.Out,"
"
" | "
@@ -3250,7 +3398,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
Gbl.RowEvenOdd,
Gbl.RowEvenOdd,
Gbl.RowEvenOdd);
- if (CommentStd[0])
+ if (ShowCommentStd)
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentStd,Cns_MAX_BYTES_TEXT,false);
@@ -3258,7 +3406,7 @@ static void Att_ListAttEventsForAStd (unsigned NumStd,struct UsrData *UsrDat)
Txt_Student_comment,
CommentStd);
}
- if (CommentTch[0])
+ if (ShowCommentTch)
{
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT,false);
diff --git a/swad_attendance.h b/swad_attendance.h
index 19eaf7bf4..46ec7baf6 100644
--- a/swad_attendance.h
+++ b/swad_attendance.h
@@ -113,7 +113,10 @@ void Att_RegisterStudentsInAttEvent (void);
void Att_RegUsrInAttEventNotChangingComments (long AttCod,long UsrCod);
void Att_RemoveUsrsAbsentWithoutCommentsFromAttEvent (long AttCod);
-void Usr_ReqListAttendanceStdsCrs (void);
-void Usr_ListAttendanceStdsCrs (void);
+void Usr_ReqListStdsAttendanceCrs (void);
+void Usr_ListMyAttendanceCrs (void);
+void Usr_PrintMyAttendanceCrs (void);
+void Usr_ListStdsAttendanceCrs (void);
+void Usr_PrintStdsAttendanceCrs (void);
#endif
diff --git a/swad_changelog.h b/swad_changelog.h
index 3f02853ec..d7fc0a844 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -113,11 +113,16 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 15.37.6 (2015/11/12)"
+#define Log_PLATFORM_VERSION "SWAD 15.38 (2015/11/13)"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/*
+ Version 15.38: Nov 13, 2015 New option for students: list of my attendance. (187063 lines)
+ 2 changes necessary in database:
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1473','es','N','Listar mi asistencia a varios eventos');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1474','es','N','Imprimir mi asistencia a varios eventos');
+
Version 15.37.6: Nov 12, 2015 Changes in degree logo.
Changes in layout of hits stats. (186910 lines)
Version 15.37.5: Nov 12, 2015 Changes in centre logo. (186886 lines)
diff --git a/swad_exam.c b/swad_exam.c
index 70271a57b..b6864657a 100644
--- a/swad_exam.c
+++ b/swad_exam.c
@@ -72,11 +72,11 @@ static long Exa_GetParamsExamAnnouncement (void);
static void Exa_AllocMemExamAnnouncement (void);
static void Exa_UpdateNumUsrsNotifiedByEMailAboutExamAnnouncement (long ExaCod,unsigned NumUsrsToBeNotifiedByEMail);
static void Exa_ListExamAnnouncementsEdit (void);
-static void Exa_ListExamAnnouncements (Exa_tTypeViewExamAnnouncement_t TypeViewExamAnnouncement);
+static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement);
static long Exa_AddExamAnnouncementToDB (void);
static void Exa_ModifyExamAnnouncementInDB (long ExaCod);
static void Exa_GetDataExamAnnouncementFromDB (long ExaCod);
-static void Exa_ShowExamAnnouncement (long ExaCod,Exa_tTypeViewExamAnnouncement_t TypeViewExamAnnouncement);
+static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement);
static void Exa_GetNotifContentExamAnnouncement (char **ContentStr);
/*****************************************************************************/
@@ -413,7 +413,7 @@ static void Exa_ListExamAnnouncementsEdit (void)
/******************** List all the exam announcements ************************/
/*****************************************************************************/
-static void Exa_ListExamAnnouncements (Exa_tTypeViewExamAnnouncement_t TypeViewExamAnnouncement)
+static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement)
{
extern const char *Txt_No_announcements_of_exams_of_X;
extern const char *Txt_New_announcement_OF_EXAM;
@@ -709,7 +709,7 @@ static void Exa_GetDataExamAnnouncementFromDB (long ExaCod)
/************ Show a form with the data of an exam announcement **************/
/*****************************************************************************/
-static void Exa_ShowExamAnnouncement (long ExaCod,Exa_tTypeViewExamAnnouncement_t TypeViewExamAnnouncement)
+static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement)
{
extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE];
extern const char *The_ClassForm[The_NUM_THEMES];
diff --git a/swad_exam.h b/swad_exam.h
index 8abf0a2d0..3c65447d5 100644
--- a/swad_exam.h
+++ b/swad_exam.h
@@ -37,8 +37,8 @@ typedef enum
{
Exa_NORMAL_VIEW,
Exa_PRINT_VIEW,
- Exa_FORM_VIEW
- } Exa_tTypeViewExamAnnouncement_t;
+ Exa_FORM_VIEW,
+ } Exa_TypeViewExamAnnouncement_t;
typedef enum
{
diff --git a/swad_record.c b/swad_record.c
index 943d5a138..84f9bea8d 100644
--- a/swad_record.c
+++ b/swad_record.c
@@ -2304,7 +2304,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
// TODO: A student should see her/his attendance
if (IAmLoggedAsTeacher || IAmLoggedAsSysAdm)
{
- Act_FormStart (ActSeeLstAttStd);
+ Act_FormStart (ActSeeLstStdAtt);
Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod);
Grp_PutParamAllGroups ();
Act_LinkFormSubmit (Txt_Attendance,ClassData);
diff --git a/swad_text.c b/swad_text.c
index 03a6ab537..4b3b2de45 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -3078,23 +3078,23 @@ const char *Txt_Attendance = // Number of times a students has attended to face-
const char *Txt_Attendance_list =
#if L==0
- "Llista assistents";
+ "Llista assistencia";
#elif L==1
"Anwesenheitsliste";
#elif L==2
"Attendance list";
#elif L==3
- "Lista asistentes";
+ "Lista asistencia";
#elif L==4
- "Liste participants";
+ "Liste fréquentation";
#elif L==5
- "Lista asistentes"; // Okoteve traducción
+ "Lista asistencia"; // Okoteve traducción
#elif L==6
"Elenco presenze";
#elif L==7
"Lista obecności";
#elif L==8
- "Lista presenças";
+ "Lista assiduidade";
#endif
const char *Txt_Availability =
@@ -23156,6 +23156,27 @@ const char *Txt_No_enrollment_requests =
"No enrollment requests."; // Necessita de tradução
#endif
+const char *Txt_No_events =
+#if L==0
+ "No hay esdeveniments.";
+#elif L==1
+ "Keine Ereignisse.";
+#elif L==2
+ "No events.";
+#elif L==3
+ "No hay eventos.";
+#elif L==4
+ "Il n'y a pas d'événements.";
+#elif L==5
+ "No hay eventos."; // Okoteve traducción
+#elif L==6
+ "Non ci sono eventi.";
+#elif L==7
+ "Brak wydarzen.";
+#elif L==8
+ "Não há eventos.";
+#endif
+
const char *Txt_No_file_index_html_index_htm_found_within_the_ZIP_file =
#if L==0
"No se ha encontrado un archivo index.html / index.htm"