diff --git a/swad_action.c b/swad_action.c
index 874823efb..294c75659 100644
--- a/swad_action.c
+++ b/swad_action.c
@@ -956,6 +956,8 @@ Users:
795. ActChgVisFie Request change in visibility of a record field
796. ActRcvRecCrs Receive and update fields of my record in this course
+ NEW. ActSeeUsrAgd Show user's agenda
+
797. ActReqEnrSevStd Request the enrollment/removing of several users to / from current course
798. ActReqEnrSevTch Request the enrollment/removing of several users to / from current course
@@ -1454,7 +1456,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActSeeMai */{ 855, 5,TabSys,ActSeeMai ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Mai_SeeMailDomains ,"email64x64.gif" },
/* ActSeeBan */{1137, 6,TabSys,ActSeeBan ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ban_SeeBanners ,"picture64x64.gif" },
/* ActSeeLnk */{ 748, 7,TabSys,ActSeeLnk ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Lnk_SeeLinks ,"link64x64.gif" },
- /* ActLstPlg */{ 777, 8,TabSys,ActLstPlg ,0x110,0x110,0x110,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Plg_ListPlugins ,"blocks64x64.gif" },
+ /* ActLstPlg */{ 777, 8,TabSys,ActLstPlg ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Plg_ListPlugins ,"blocks64x64.gif" },
/* ActSetUp */{ 840, 9,TabSys,ActSetUp ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Set_Setup ,"lightning64x64.gif" },
// Actions not in menu:
@@ -2362,6 +2364,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActChgVisFie */{ 297,-1,TabUnk,ActLstStd ,0x110,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rec_ChangeVisibilityField ,NULL},
/* ActRcvRecCrs */{ 301,-1,TabUnk,ActLstStd ,0x108,0x100,0x000,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rec_UpdateAndShowMyCrsRecord ,NULL},
+ /* ActSeeUsrAgd */{1611,-1,TabUnk,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_ShowUsrAgenda ,NULL},
+
/* ActReqEnrSevStd */{1426,-1,TabUnk,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ReqAdminStds ,NULL},
/* ActReqEnrSevTch */{1427,-1,TabUnk,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Enr_ReqAdminTchs ,NULL},
@@ -2774,7 +2778,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActFrmRolSes */{ 843, 1,TabPrf,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Usr_WriteFormLogout ,"keyuser64x64.gif" },
/* ActMyCrs */{ 987, 2,TabPrf,ActMyCrs ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Crs_ReqSelectOneOfMyCourses ,"mygroups64x64.gif" },
/* ActSeeMyTT */{ 408, 3,TabPrf,ActSeeMyTT ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,TT_ShowClassTimeTable ,"clock64x64.gif" },
- /* ActSeeMyAgd */{1602, 5,TabPrf,ActSeeMyAgd ,0x100,0x100,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_SeeEvents ,"date64x64.gif" },
+ /* ActSeeMyAgd */{1602, 5,TabPrf,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_ShowMyAgenda ,"date64x64.gif" },
/* ActFrmMyAcc */{ 36, 6,TabPrf,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_ShowFormMyAccount ,"arroba64x64.gif" },
/* ActReqEdiRecCom */{ 285, 7,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rec_ShowFormMySharedRecord ,"card64x64.gif" },
/* ActEdiPrf */{ 673, 8,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Pre_EditPrefs ,"heart64x64.gif" },
@@ -4500,6 +4504,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActRemEvtMyAgd, // #1608
ActHidEvtMyAgd, // #1609
ActShoEvtMyAgd, // #1610
+ ActSeeUsrAgd, // #1611
};
/*****************************************************************************/
diff --git a/swad_action.h b/swad_action.h
index b8d003a4d..3f4ee6b36 100644
--- a/swad_action.h
+++ b/swad_action.h
@@ -55,9 +55,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 (1+9+51+14+93+73+70+249+186+155+172+36+31+93)
+#define Act_NUM_ACTIONS (1+9+51+14+93+73+70+249+186+156+172+36+31+93)
-#define Act_MAX_ACTION_COD 1610
+#define Act_MAX_ACTION_COD 1611
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 11
@@ -972,125 +972,127 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActChgVisFie (ActChgNumRowFooGrp+ 50)
#define ActRcvRecCrs (ActChgNumRowFooGrp+ 51)
-#define ActReqEnrSevStd (ActChgNumRowFooGrp+ 52)
-#define ActReqEnrSevTch (ActChgNumRowFooGrp+ 53)
+#define ActSeeUsrAgd (ActChgNumRowFooGrp+ 52)
-#define ActReqLstStdAtt (ActChgNumRowFooGrp+ 54)
-#define ActSeeLstMyAtt (ActChgNumRowFooGrp+ 55)
-#define ActPrnLstMyAtt (ActChgNumRowFooGrp+ 56)
-#define ActSeeLstStdAtt (ActChgNumRowFooGrp+ 57)
-#define ActPrnLstStdAtt (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 ActReqEnrSevStd (ActChgNumRowFooGrp+ 53)
+#define ActReqEnrSevTch (ActChgNumRowFooGrp+ 54)
-#define ActSignUp (ActChgNumRowFooGrp+ 70)
-#define ActUpdSignUpReq (ActChgNumRowFooGrp+ 71)
-#define ActReqRejSignUp (ActChgNumRowFooGrp+ 72)
-#define ActRejSignUp (ActChgNumRowFooGrp+ 73)
+#define ActReqLstStdAtt (ActChgNumRowFooGrp+ 55)
+#define ActSeeLstMyAtt (ActChgNumRowFooGrp+ 56)
+#define ActPrnLstMyAtt (ActChgNumRowFooGrp+ 57)
+#define ActSeeLstStdAtt (ActChgNumRowFooGrp+ 58)
+#define ActPrnLstStdAtt (ActChgNumRowFooGrp+ 59)
+#define ActFrmNewAtt (ActChgNumRowFooGrp+ 60)
+#define ActEdiOneAtt (ActChgNumRowFooGrp+ 61)
+#define ActNewAtt (ActChgNumRowFooGrp+ 62)
+#define ActChgAtt (ActChgNumRowFooGrp+ 63)
+#define ActReqRemAtt (ActChgNumRowFooGrp+ 64)
+#define ActRemAtt (ActChgNumRowFooGrp+ 65)
+#define ActHidAtt (ActChgNumRowFooGrp+ 66)
+#define ActShoAtt (ActChgNumRowFooGrp+ 67)
+#define ActSeeOneAtt (ActChgNumRowFooGrp+ 68)
+#define ActRecAttStd (ActChgNumRowFooGrp+ 69)
+#define ActRecAttMe (ActChgNumRowFooGrp+ 70)
-#define ActReqMdfOneOth (ActChgNumRowFooGrp+ 74)
-#define ActReqMdfOneStd (ActChgNumRowFooGrp+ 75)
-#define ActReqMdfOneTch (ActChgNumRowFooGrp+ 76)
+#define ActSignUp (ActChgNumRowFooGrp+ 71)
+#define ActUpdSignUpReq (ActChgNumRowFooGrp+ 72)
+#define ActReqRejSignUp (ActChgNumRowFooGrp+ 73)
+#define ActRejSignUp (ActChgNumRowFooGrp+ 74)
-#define ActReqMdfOth (ActChgNumRowFooGrp+ 77)
-#define ActReqMdfStd (ActChgNumRowFooGrp+ 78)
-#define ActReqMdfTch (ActChgNumRowFooGrp+ 79)
+#define ActReqMdfOneOth (ActChgNumRowFooGrp+ 75)
+#define ActReqMdfOneStd (ActChgNumRowFooGrp+ 76)
+#define ActReqMdfOneTch (ActChgNumRowFooGrp+ 77)
-#define ActReqOthPho (ActChgNumRowFooGrp+ 80)
-#define ActReqStdPho (ActChgNumRowFooGrp+ 81)
-#define ActReqTchPho (ActChgNumRowFooGrp+ 82)
-#define ActDetOthPho (ActChgNumRowFooGrp+ 83)
-#define ActDetStdPho (ActChgNumRowFooGrp+ 84)
-#define ActDetTchPho (ActChgNumRowFooGrp+ 85)
-#define ActUpdOthPho (ActChgNumRowFooGrp+ 86)
-#define ActUpdStdPho (ActChgNumRowFooGrp+ 87)
-#define ActUpdTchPho (ActChgNumRowFooGrp+ 88)
-#define ActReqRemOthPho (ActChgNumRowFooGrp+ 89)
-#define ActReqRemStdPho (ActChgNumRowFooGrp+ 90)
-#define ActReqRemTchPho (ActChgNumRowFooGrp+ 91)
-#define ActRemOthPho (ActChgNumRowFooGrp+ 92)
-#define ActRemStdPho (ActChgNumRowFooGrp+ 93)
-#define ActRemTchPho (ActChgNumRowFooGrp+ 94)
-#define ActCreOth (ActChgNumRowFooGrp+ 95)
-#define ActCreStd (ActChgNumRowFooGrp+ 96)
-#define ActCreTch (ActChgNumRowFooGrp+ 97)
-#define ActUpdOth (ActChgNumRowFooGrp+ 98)
-#define ActUpdStd (ActChgNumRowFooGrp+ 99)
-#define ActUpdTch (ActChgNumRowFooGrp+100)
+#define ActReqMdfOth (ActChgNumRowFooGrp+ 78)
+#define ActReqMdfStd (ActChgNumRowFooGrp+ 79)
+#define ActReqMdfTch (ActChgNumRowFooGrp+ 80)
-#define ActReqAccEnrStd (ActChgNumRowFooGrp+101)
-#define ActReqAccEnrTch (ActChgNumRowFooGrp+102)
-#define ActAccEnrStd (ActChgNumRowFooGrp+103)
-#define ActAccEnrTch (ActChgNumRowFooGrp+104)
-#define ActRemMe_Std (ActChgNumRowFooGrp+105)
-#define ActRemMe_Tch (ActChgNumRowFooGrp+106)
+#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 ActReqRemOthPho (ActChgNumRowFooGrp+ 90)
+#define ActReqRemStdPho (ActChgNumRowFooGrp+ 91)
+#define ActReqRemTchPho (ActChgNumRowFooGrp+ 92)
+#define ActRemOthPho (ActChgNumRowFooGrp+ 93)
+#define ActRemStdPho (ActChgNumRowFooGrp+ 94)
+#define ActRemTchPho (ActChgNumRowFooGrp+ 95)
+#define ActCreOth (ActChgNumRowFooGrp+ 96)
+#define ActCreStd (ActChgNumRowFooGrp+ 97)
+#define ActCreTch (ActChgNumRowFooGrp+ 98)
+#define ActUpdOth (ActChgNumRowFooGrp+ 99)
+#define ActUpdStd (ActChgNumRowFooGrp+100)
+#define ActUpdTch (ActChgNumRowFooGrp+101)
-#define ActNewAdmIns (ActChgNumRowFooGrp+107)
-#define ActRemAdmIns (ActChgNumRowFooGrp+108)
-#define ActNewAdmCtr (ActChgNumRowFooGrp+109)
-#define ActRemAdmCtr (ActChgNumRowFooGrp+110)
-#define ActNewAdmDeg (ActChgNumRowFooGrp+111)
-#define ActRemAdmDeg (ActChgNumRowFooGrp+112)
+#define ActReqAccEnrStd (ActChgNumRowFooGrp+102)
+#define ActReqAccEnrTch (ActChgNumRowFooGrp+103)
+#define ActAccEnrStd (ActChgNumRowFooGrp+104)
+#define ActAccEnrTch (ActChgNumRowFooGrp+105)
+#define ActRemMe_Std (ActChgNumRowFooGrp+106)
+#define ActRemMe_Tch (ActChgNumRowFooGrp+107)
-#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+113)
-#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+114)
+#define ActNewAdmIns (ActChgNumRowFooGrp+108)
+#define ActRemAdmIns (ActChgNumRowFooGrp+109)
+#define ActNewAdmCtr (ActChgNumRowFooGrp+110)
+#define ActRemAdmCtr (ActChgNumRowFooGrp+111)
+#define ActNewAdmDeg (ActChgNumRowFooGrp+112)
+#define ActRemAdmDeg (ActChgNumRowFooGrp+113)
-#define ActReqCnfID_Oth (ActChgNumRowFooGrp+115)
-#define ActReqCnfID_Std (ActChgNumRowFooGrp+116)
-#define ActReqCnfID_Tch (ActChgNumRowFooGrp+117)
-#define ActCnfID_Oth (ActChgNumRowFooGrp+118)
-#define ActCnfID_Std (ActChgNumRowFooGrp+119)
-#define ActCnfID_Tch (ActChgNumRowFooGrp+120)
+#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+114)
+#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+115)
-#define ActFrmIDsOth (ActChgNumRowFooGrp+121)
-#define ActFrmIDsStd (ActChgNumRowFooGrp+122)
-#define ActFrmIDsTch (ActChgNumRowFooGrp+123)
-#define ActRemID_Oth (ActChgNumRowFooGrp+124)
-#define ActRemID_Std (ActChgNumRowFooGrp+125)
-#define ActRemID_Tch (ActChgNumRowFooGrp+126)
-#define ActNewID_Oth (ActChgNumRowFooGrp+127)
-#define ActNewID_Std (ActChgNumRowFooGrp+128)
-#define ActNewID_Tch (ActChgNumRowFooGrp+129)
-#define ActFrmPwdOth (ActChgNumRowFooGrp+130)
-#define ActFrmPwdStd (ActChgNumRowFooGrp+131)
-#define ActFrmPwdTch (ActChgNumRowFooGrp+132)
-#define ActChgPwdOth (ActChgNumRowFooGrp+133)
-#define ActChgPwdStd (ActChgNumRowFooGrp+134)
-#define ActChgPwdTch (ActChgNumRowFooGrp+135)
-#define ActFrmMaiOth (ActChgNumRowFooGrp+136)
-#define ActFrmMaiStd (ActChgNumRowFooGrp+137)
-#define ActFrmMaiTch (ActChgNumRowFooGrp+138)
-#define ActRemMaiOth (ActChgNumRowFooGrp+139)
-#define ActRemMaiStd (ActChgNumRowFooGrp+140)
-#define ActRemMaiTch (ActChgNumRowFooGrp+141)
-#define ActNewMaiOth (ActChgNumRowFooGrp+142)
-#define ActNewMaiStd (ActChgNumRowFooGrp+143)
-#define ActNewMaiTch (ActChgNumRowFooGrp+144)
+#define ActReqCnfID_Oth (ActChgNumRowFooGrp+116)
+#define ActReqCnfID_Std (ActChgNumRowFooGrp+117)
+#define ActReqCnfID_Tch (ActChgNumRowFooGrp+118)
+#define ActCnfID_Oth (ActChgNumRowFooGrp+119)
+#define ActCnfID_Std (ActChgNumRowFooGrp+120)
+#define ActCnfID_Tch (ActChgNumRowFooGrp+121)
-#define ActRemStdCrs (ActChgNumRowFooGrp+145)
-#define ActRemTchCrs (ActChgNumRowFooGrp+146)
-#define ActRemUsrGbl (ActChgNumRowFooGrp+147)
+#define ActFrmIDsOth (ActChgNumRowFooGrp+122)
+#define ActFrmIDsStd (ActChgNumRowFooGrp+123)
+#define ActFrmIDsTch (ActChgNumRowFooGrp+124)
+#define ActRemID_Oth (ActChgNumRowFooGrp+125)
+#define ActRemID_Std (ActChgNumRowFooGrp+126)
+#define ActRemID_Tch (ActChgNumRowFooGrp+127)
+#define ActNewID_Oth (ActChgNumRowFooGrp+128)
+#define ActNewID_Std (ActChgNumRowFooGrp+129)
+#define ActNewID_Tch (ActChgNumRowFooGrp+130)
+#define ActFrmPwdOth (ActChgNumRowFooGrp+131)
+#define ActFrmPwdStd (ActChgNumRowFooGrp+132)
+#define ActFrmPwdTch (ActChgNumRowFooGrp+133)
+#define ActChgPwdOth (ActChgNumRowFooGrp+134)
+#define ActChgPwdStd (ActChgNumRowFooGrp+135)
+#define ActChgPwdTch (ActChgNumRowFooGrp+136)
+#define ActFrmMaiOth (ActChgNumRowFooGrp+137)
+#define ActFrmMaiStd (ActChgNumRowFooGrp+138)
+#define ActFrmMaiTch (ActChgNumRowFooGrp+139)
+#define ActRemMaiOth (ActChgNumRowFooGrp+140)
+#define ActRemMaiStd (ActChgNumRowFooGrp+141)
+#define ActRemMaiTch (ActChgNumRowFooGrp+142)
+#define ActNewMaiOth (ActChgNumRowFooGrp+143)
+#define ActNewMaiStd (ActChgNumRowFooGrp+144)
+#define ActNewMaiTch (ActChgNumRowFooGrp+145)
-#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+148)
-#define ActRemAllStdCrs (ActChgNumRowFooGrp+149)
+#define ActRemStdCrs (ActChgNumRowFooGrp+146)
+#define ActRemTchCrs (ActChgNumRowFooGrp+147)
+#define ActRemUsrGbl (ActChgNumRowFooGrp+148)
-#define ActReqRemOldUsr (ActChgNumRowFooGrp+150)
-#define ActRemOldUsr (ActChgNumRowFooGrp+151)
+#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+149)
+#define ActRemAllStdCrs (ActChgNumRowFooGrp+150)
-#define ActLstDupUsr (ActChgNumRowFooGrp+152)
-#define ActLstSimUsr (ActChgNumRowFooGrp+153)
-#define ActRemDupUsr (ActChgNumRowFooGrp+154)
+#define ActReqRemOldUsr (ActChgNumRowFooGrp+151)
+#define ActRemOldUsr (ActChgNumRowFooGrp+152)
-#define ActLstClk (ActChgNumRowFooGrp+155)
+#define ActLstDupUsr (ActChgNumRowFooGrp+153)
+#define ActLstSimUsr (ActChgNumRowFooGrp+154)
+#define ActRemDupUsr (ActChgNumRowFooGrp+155)
+
+#define ActLstClk (ActChgNumRowFooGrp+156)
/*****************************************************************************/
/******************************** Social tab *********************************/
diff --git a/swad_agenda.c b/swad_agenda.c
index 7f5c5548d..33ec5b976 100644
--- a/swad_agenda.c
+++ b/swad_agenda.c
@@ -54,6 +54,13 @@ extern struct Globals Gbl;
/******************************* Private types *******************************/
/*****************************************************************************/
+#define Agd_NUM_AGENDA_TYPES 2
+typedef enum
+ {
+ Agd_USR_AGENDA,
+ Agd_MY_AGENDA,
+ } Agd_AgendaType_t;
+
/*****************************************************************************/
/***************************** Private variables *****************************/
/*****************************************************************************/
@@ -62,48 +69,60 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
-static void Agd_ShowAllEvents (void);
-static bool Agd_CheckIfICanCreateEvents (void);
-static void Agd_PutIconsListEvents (void);
+static void Agd_ShowEvents (Agd_AgendaType_t AgendaType);
+
static void Agd_PutIconToCreateNewEvent (void);
static void Agd_PutButtonToCreateNewEvent (void);
static void Agd_PutParamsToCreateNewEvent (void);
-static void Agd_ShowOneEvent (long AgdCod);
+static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod);
static void Agd_WriteEventAuthor (struct AgendaEvent *AgdEvent);
static void Agd_GetParamEventOrderType (void);
static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden);
static void Agd_PutParams (void);
+static void Agd_GetListEvents (Agd_AgendaType_t AgendaType);
+static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent);
static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query);
-static void Agd_GetEventTxtFromDB (long AgdCod,char *Txt);
+static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,char *Txt);
static void Agd_PutParamAgdCod (long AgdCod);
static bool Agd_CheckIfSimilarEventExists (const char *Field,const char *Value,long AgdCod);
static void Agd_CreateEvent (struct AgendaEvent *AgdEvent,const char *Txt);
static void Agd_UpdateEvent (struct AgendaEvent *AgdEvent,const char *Txt);
/*****************************************************************************/
-/**************************** List all the events ****************************/
+/************************ Show another user's agenda *************************/
/*****************************************************************************/
-void Agd_SeeEvents (void)
+void Agd_ShowUsrAgenda (void)
{
- /***** Get parameters *****/
- Agd_GetParamEventOrderType ();
- Grp_GetParamWhichGrps ();
- Pag_GetParamPagNum (Pag_ASSIGNMENTS);
+ extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
- /***** Show all the events *****/
- Agd_ShowAllEvents ();
+ /***** Get user *****/
+ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
+ /***** Show all the visible events in the user's agenda *****/
+ Agd_ShowEvents (Agd_USR_AGENDA);
+ else
+ Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
}
/*****************************************************************************/
-/************************** Show all the events ******************************/
+/******************************* Show my agenda ******************************/
/*****************************************************************************/
-static void Agd_ShowAllEvents (void)
+void Agd_ShowMyAgenda (void)
+ {
+ /***** Show all my events *****/
+ Agd_ShowEvents (Agd_MY_AGENDA);
+ }
+
+/*****************************************************************************/
+/*************************** Show events in agenda ***************************/
+/*****************************************************************************/
+
+static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
{
extern const char *Hlp_PROFILE_Agenda;
- extern const char *Txt_Agenda;
+ extern const char *Txt_My_agenda;
extern const char *Txt_ASG_ATT_OR_SVY_HELP_ORDER[2];
extern const char *Txt_ASG_ATT_OR_SVY_ORDER[2];
extern const char *Txt_Event;
@@ -111,26 +130,46 @@ static void Agd_ShowAllEvents (void)
extern const char *Txt_No_events;
Loc_Order_t Order;
struct Pagination Pagination;
- unsigned NumLoc;
+ unsigned NumEvent;
+ Pag_WhatPaginate_t WhatPaginate[Agd_NUM_AGENDA_TYPES] =
+ {
+ Pag_USR_AGENDA,
+ Pag_MY_AGENDA,
+ };
+ void (*FunctionToDrawContextualIcons[Agd_NUM_AGENDA_TYPES]) (void) =
+ {
+ NULL,
+ Agd_PutIconToCreateNewEvent,
+ };
+ const char *Title[Agd_NUM_AGENDA_TYPES] =
+ {
+ "Agenda de otro usuario",
+ Txt_My_agenda,
+ };
+
+ /***** Get parameters *****/
+ Agd_GetParamEventOrderType ();
+ Pag_GetParamPagNum (WhatPaginate[AgendaType]);
/***** Get list of events *****/
- Agd_GetListEvents ();
+ Agd_GetListEvents (AgendaType);
/***** Compute variables related to pagination *****/
- Pagination.NumItems = Gbl.Usrs.Me.Locs.Num;
+ Pagination.NumItems = Gbl.Agenda.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_ASSIGNMENTS,0,&Pagination);
+ Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],0,&Pagination);
/***** Start frame *****/
- Lay_StartRoundFrame ("100%",Txt_Agenda,
- Agd_PutIconsListEvents,Hlp_PROFILE_Agenda);
+ Lay_StartRoundFrame ("100%",Title[AgendaType],
+ FunctionToDrawContextualIcons[AgendaType],
+ Hlp_PROFILE_Agenda);
- if (Gbl.Usrs.Me.Locs.Num)
+ if (Gbl.Agenda.Num)
{
/***** Table head *****/
fprintf (Gbl.F.Out,"
"
@@ -140,15 +179,23 @@ static void Agd_ShowAllEvents (void)
Order++)
{
fprintf (Gbl.F.Out,"");
- Act_FormStart (ActSeeMyAgd);
- Grp_PutParamWhichGrps ();
+ switch (AgendaType)
+ {
+ case Agd_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
+ case Agd_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ break;
+ }
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
Par_PutHiddenParamUnsigned ("Order",(unsigned) Order);
Act_LinkFormSubmit (Txt_ASG_ATT_OR_SVY_HELP_ORDER[Order],"TIT_TBL",NULL);
- if (Order == Gbl.Usrs.Me.Locs.SelectedOrderType)
+ if (Order == Gbl.Agenda.SelectedOrderType)
fprintf (Gbl.F.Out,"");
fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_OR_SVY_ORDER[Order]);
- if (Order == Gbl.Usrs.Me.Locs.SelectedOrderType)
+ if (Order == Gbl.Agenda.SelectedOrderType)
fprintf (Gbl.F.Out,"");
fprintf (Gbl.F.Out,"");
Act_FormEnd ();
@@ -165,10 +212,10 @@ static void Agd_ShowAllEvents (void)
Txt_Location);
/***** Write all the events *****/
- for (NumLoc = Pagination.FirstItemVisible;
- NumLoc <= Pagination.LastItemVisible;
- NumLoc++)
- Agd_ShowOneEvent (Gbl.Usrs.Me.Locs.LstLocCods[NumLoc - 1]);
+ for (NumEvent = Pagination.FirstItemVisible;
+ NumEvent <= Pagination.LastItemVisible;
+ NumEvent++)
+ Agd_ShowOneEvent (AgendaType,Gbl.Agenda.LstAgdCods[NumEvent - 1]);
/***** End table *****/
fprintf (Gbl.F.Out," |
");
@@ -177,7 +224,7 @@ static void Agd_ShowAllEvents (void)
Lay_ShowAlert (Lay_INFO,Txt_No_events);
/***** Button to create a new event *****/
- if (Agd_CheckIfICanCreateEvents ())
+ if (AgendaType == Agd_MY_AGENDA)
Agd_PutButtonToCreateNewEvent ();
/***** End frame *****/
@@ -185,33 +232,12 @@ static void Agd_ShowAllEvents (void)
/***** Write again links to pages *****/
if (Pagination.MoreThanOnePage)
- Pag_WriteLinksToPagesCentered (Pag_ASSIGNMENTS,0,&Pagination);
+ Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],0,&Pagination);
/***** Free list of events *****/
Agd_FreeListEvents ();
}
-/*****************************************************************************/
-/********************** Check if I can create events *************************/
-/*****************************************************************************/
-
-static bool Agd_CheckIfICanCreateEvents (void)
- {
- return (bool) (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER ||
- Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
- }
-
-/*****************************************************************************/
-/****************** Put contextual icons in list of events *******************/
-/*****************************************************************************/
-
-static void Agd_PutIconsListEvents (void)
- {
- /***** Put icon to create a new event *****/
- if (Agd_CheckIfICanCreateEvents ())
- Agd_PutIconToCreateNewEvent ();
- }
-
/*****************************************************************************/
/********************** Put icon to create a new event ***********************/
/*****************************************************************************/
@@ -248,7 +274,6 @@ static void Agd_PutButtonToCreateNewEvent (void)
static void Agd_PutParamsToCreateNewEvent (void)
{
Agd_PutHiddenParamEventsOrderType ();
- Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
}
@@ -256,7 +281,7 @@ static void Agd_PutParamsToCreateNewEvent (void)
/******************************* Show one event ******************************/
/*****************************************************************************/
-static void Agd_ShowOneEvent (long AgdCod)
+static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
{
extern const char *Txt_Today;
static unsigned UniqueId = 0;
@@ -265,15 +290,24 @@ static void Agd_ShowOneEvent (long AgdCod)
/***** Get data of this event *****/
AgdEvent.AgdCod = AgdCod;
+ switch (AgendaType)
+ {
+ case Agd_USR_AGENDA:
+ AgdEvent.UsrCod = Gbl.Usrs.Other.UsrDat.UsrCod;
+ break;
+ case Agd_MY_AGENDA:
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
+ break;
+ }
Agd_GetDataOfEventByCod (&AgdEvent);
/***** Write first row of data of this event *****/
/* Start date/time */
UniqueId++;
fprintf (Gbl.F.Out,""
- ""
+ " | "
""
" | ",
UniqueId,
@@ -286,9 +320,9 @@ static void Agd_ShowOneEvent (long AgdCod)
/* End date/time */
UniqueId++;
- fprintf (Gbl.F.Out,""
+ fprintf (Gbl.F.Out," | "
""
" | ",
UniqueId,
@@ -327,19 +361,13 @@ static void Agd_ShowOneEvent (long AgdCod)
Agd_WriteEventAuthor (&AgdEvent);
/* Forms to remove/edit this event */
- switch (Gbl.Usrs.Me.LoggedRole)
- {
- case Rol_TEACHER:
- case Rol_SYS_ADM:
- Agd_PutFormsToRemEditOneEvent (AgdEvent.AgdCod,AgdEvent.Hidden);
- break;
- default:
- break;
- }
+ if (AgendaType == Agd_MY_AGENDA)
+ Agd_PutFormsToRemEditOneEvent (AgdEvent.AgdCod,AgdEvent.Hidden);
+
fprintf (Gbl.F.Out,"");
/* Text of the event */
- Agd_GetEventTxtFromDB (AgdEvent.AgdCod,Txt);
+ Agd_GetEventTxtFromDB (&AgdEvent,Txt);
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
Txt,Cns_MAX_BYTES_TEXT,false); // Convert from HTML to recpectful HTML
Str_InsertLinks (Txt,Cns_MAX_BYTES_TEXT,60); // Insert links
@@ -413,9 +441,9 @@ static void Agd_GetParamEventOrderType (void)
Par_GetParToText ("Order",UnsignedStr,10);
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
- Gbl.Usrs.Me.Locs.SelectedOrderType = (Loc_Order_t) UnsignedNum;
+ Gbl.Agenda.SelectedOrderType = (Loc_Order_t) UnsignedNum;
else
- Gbl.Usrs.Me.Locs.SelectedOrderType = Loc_DEFAULT_ORDER_TYPE;
+ Gbl.Agenda.SelectedOrderType = Loc_DEFAULT_ORDER_TYPE;
}
/*****************************************************************************/
@@ -424,7 +452,7 @@ static void Agd_GetParamEventOrderType (void)
void Agd_PutHiddenParamEventsOrderType (void)
{
- Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Usrs.Me.Locs.SelectedOrderType);
+ Par_PutHiddenParamUnsigned ("Order",(unsigned) Gbl.Agenda.SelectedOrderType);
}
/*****************************************************************************/
@@ -440,7 +468,7 @@ static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden)
fprintf (Gbl.F.Out,"");
- Gbl.Usrs.Me.Locs.LocCodToEdit = AgdCod; // Used as parameter in contextual links
+ Gbl.Agenda.AgdCodToEdit = AgdCod; // Used as parameter in contextual links
/***** Put form to remove event *****/
Lay_PutContextualLink (ActReqRemEvtMyAgd,Agd_PutParams,
@@ -475,41 +503,29 @@ static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden)
static void Agd_PutParams (void)
{
- Agd_PutParamAgdCod (Gbl.Usrs.Me.Locs.LocCodToEdit);
+ Agd_PutParamAgdCod (Gbl.Agenda.AgdCodToEdit);
Agd_PutHiddenParamEventsOrderType ();
- Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
}
/*****************************************************************************/
-/*************************** List all the events *****************************/
+/************************* Get list of agenda events *************************/
/*****************************************************************************/
-void Agd_GetListEvents (void)
+static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
{
- char HiddenSubQuery[256];
char OrderBySubQuery[256];
char Query[2048];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
unsigned long NumRows;
- unsigned NumLoc;
+ unsigned NumEvent;
- if (Gbl.Usrs.Me.Locs.LstIsRead)
+ if (Gbl.Agenda.LstIsRead)
Agd_FreeListEvents ();
/***** Get list of events from database *****/
- switch (Gbl.Usrs.Me.LoggedRole)
- {
- case Rol_TEACHER:
- case Rol_SYS_ADM:
- HiddenSubQuery[0] = '\0';
- break;
- default:
- sprintf (HiddenSubQuery,"AND Hidden='N'");
- break;
- }
- switch (Gbl.Usrs.Me.Locs.SelectedOrderType)
+ switch (Gbl.Agenda.SelectedOrderType)
{
case Loc_ORDER_BY_START_DATE:
sprintf (OrderBySubQuery,"StartTime DESC,EndTime DESC,Location DESC,Event DESC");
@@ -518,46 +534,59 @@ void Agd_GetListEvents (void)
sprintf (OrderBySubQuery,"EndTime DESC,StartTime DESC,Location DESC,Event DESC");
break;
}
- sprintf (Query,"SELECT AgdCod"
- " FROM agendas"
- " WHERE UsrCod='%ld'%s"
- " ORDER BY %s",
- Gbl.Usrs.Me.UsrDat.UsrCod,HiddenSubQuery,OrderBySubQuery);
+ switch (AgendaType)
+ {
+ case Agd_USR_AGENDA:
+ sprintf (Query,"SELECT AgdCod"
+ " FROM agendas"
+ " WHERE UsrCod='%ld' AND Hidden='N'"
+ " AND EndTime>NOW()" // Only not obsolete events
+ " ORDER BY %s",
+ Gbl.Usrs.Other.UsrDat.UsrCod,OrderBySubQuery);
+ break;
+ case Agd_MY_AGENDA:
+ sprintf (Query,"SELECT AgdCod"
+ " FROM agendas"
+ " WHERE UsrCod='%ld'"
+ " ORDER BY %s",
+ Gbl.Usrs.Me.UsrDat.UsrCod,OrderBySubQuery);
+ break;
+ }
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get agenda events");
if (NumRows) // Events found...
{
- Gbl.Usrs.Me.Locs.Num = (unsigned) NumRows;
+ Gbl.Agenda.Num = (unsigned) NumRows;
/***** Create list of events *****/
- if ((Gbl.Usrs.Me.Locs.LstLocCods = (long *) calloc (NumRows,sizeof (long))) == NULL)
+ if ((Gbl.Agenda.LstAgdCods = (long *) calloc (NumRows,sizeof (long))) == NULL)
Lay_ShowErrorAndExit ("Not enough memory to store list of agenda events.");
/***** Get the events codes *****/
- for (NumLoc = 0;
- NumLoc < Gbl.Usrs.Me.Locs.Num;
- NumLoc++)
+ for (NumEvent = 0;
+ NumEvent < Gbl.Agenda.Num;
+ NumEvent++)
{
/* Get next event code */
row = mysql_fetch_row (mysql_res);
- if ((Gbl.Usrs.Me.Locs.LstLocCods[NumLoc] = Str_ConvertStrCodToLongCod (row[0])) < 0)
+ if ((Gbl.Agenda.LstAgdCods[NumEvent] = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Error: wrong event code.");
}
}
else
- Gbl.Usrs.Me.Locs.Num = 0;
+ Gbl.Agenda.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
- Gbl.Usrs.Me.Locs.LstIsRead = true;
+ Gbl.Agenda.LstIsRead = true;
}
/*****************************************************************************/
/*********************** Get event data using its code ***********************/
/*****************************************************************************/
-void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
+static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
{
char Query[1024];
@@ -569,7 +598,7 @@ void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent)
"Event,Location"
" FROM agendas"
" WHERE AgdCod='%ld' AND UsrCod='%ld'",
- AgdEvent->AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ AgdEvent->AgdCod,AgdEvent->UsrCod);
/***** Get data of event *****/
Agd_GetDataOfEvent (AgdEvent,Query);
@@ -638,13 +667,13 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query)
void Agd_FreeListEvents (void)
{
- if (Gbl.Usrs.Me.Locs.LstIsRead && Gbl.Usrs.Me.Locs.LstLocCods)
+ if (Gbl.Agenda.LstIsRead && Gbl.Agenda.LstAgdCods)
{
/***** Free memory used by the list of events *****/
- free ((void *) Gbl.Usrs.Me.Locs.LstLocCods);
- Gbl.Usrs.Me.Locs.LstLocCods = NULL;
- Gbl.Usrs.Me.Locs.Num = 0;
- Gbl.Usrs.Me.Locs.LstIsRead = false;
+ free ((void *) Gbl.Agenda.LstAgdCods);
+ Gbl.Agenda.LstAgdCods = NULL;
+ Gbl.Agenda.Num = 0;
+ Gbl.Agenda.LstIsRead = false;
}
}
@@ -652,7 +681,7 @@ void Agd_FreeListEvents (void)
/*********************** Get event text from database ************************/
/*****************************************************************************/
-static void Agd_GetEventTxtFromDB (long AgdCod,char *Txt)
+static void Agd_GetEventTxtFromDB (struct AgendaEvent *AgdEvent,char *Txt)
{
char Query[512];
MYSQL_RES *mysql_res;
@@ -662,7 +691,7 @@ static void Agd_GetEventTxtFromDB (long AgdCod,char *Txt)
/***** Get text of event from database *****/
sprintf (Query,"SELECT Txt FROM agendas"
" WHERE AgdCod='%ld' AND UsrCod='%ld'",
- AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod);
+ AgdEvent->AgdCod,AgdEvent->UsrCod);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get event text");
/***** The result of the query must have one row or none *****/
@@ -716,21 +745,20 @@ void Agd_AskRemEvent (void)
/***** Get parameters *****/
Agd_GetParamEventOrderType ();
- Grp_GetParamWhichGrps ();
- Pag_GetParamPagNum (Pag_ASSIGNMENTS);
+ Pag_GetParamPagNum (Pag_MY_AGENDA);
/***** Get event code *****/
if ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of event is missing.");
/***** Get data of the event from database *****/
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
Agd_GetDataOfEventByCod (&AgdEvent);
/***** Button of confirmation of removing *****/
Act_FormStart (ActRemEvtMyAgd);
Agd_PutParamAgdCod (AgdEvent.AgdCod);
Agd_PutHiddenParamEventsOrderType ();
- Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
/***** Ask for confirmation of removing *****/
@@ -741,7 +769,7 @@ void Agd_AskRemEvent (void)
Act_FormEnd ();
/***** Show events again *****/
- Agd_SeeEvents ();
+ Agd_ShowMyAgenda ();
}
/*****************************************************************************/
@@ -759,6 +787,7 @@ void Agd_RemoveEvent (void)
Lay_ShowErrorAndExit ("Code of event is missing.");
/***** Get data of the event from database *****/
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
Agd_GetDataOfEventByCod (&AgdEvent); // Inside this function, the course is checked to be the current one
/***** Remove event *****/
@@ -772,7 +801,7 @@ void Agd_RemoveEvent (void)
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
/***** Show events again *****/
- Agd_SeeEvents ();
+ Agd_ShowMyAgenda ();
}
/*****************************************************************************/
@@ -790,6 +819,7 @@ void Agd_HideEvent (void)
Lay_ShowErrorAndExit ("Code of event is missing.");
/***** Get data of the event from database *****/
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
Agd_GetDataOfEventByCod (&AgdEvent);
/***** Hide event *****/
@@ -803,7 +833,7 @@ void Agd_HideEvent (void)
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
/***** Show events again *****/
- Agd_SeeEvents ();
+ Agd_ShowMyAgenda ();
}
/*****************************************************************************/
@@ -821,6 +851,7 @@ void Agd_ShowEvent (void)
Lay_ShowErrorAndExit ("Code of event is missing.");
/***** Get data of the event from database *****/
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
Agd_GetDataOfEventByCod (&AgdEvent);
/***** Hide event *****/
@@ -835,7 +866,7 @@ void Agd_ShowEvent (void)
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
/***** Show events again *****/
- Agd_SeeEvents ();
+ Agd_ShowMyAgenda ();
}
/*****************************************************************************/
@@ -875,8 +906,7 @@ void Agd_RequestCreatOrEditEvent (void)
/***** Get parameters *****/
Agd_GetParamEventOrderType ();
- Grp_GetParamWhichGrps ();
- Pag_GetParamPagNum (Pag_ASSIGNMENTS);
+ Pag_GetParamPagNum (Pag_MY_AGENDA);
/***** Get the code of the event *****/
ItsANewEvent = ((AgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L);
@@ -895,11 +925,13 @@ void Agd_RequestCreatOrEditEvent (void)
}
else
{
+ AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
+
/* Get data of the event from database */
Agd_GetDataOfEventByCod (&AgdEvent);
/* Get text of the event from database */
- Agd_GetEventTxtFromDB (AgdEvent.AgdCod,Txt);
+ Agd_GetEventTxtFromDB (&AgdEvent,Txt);
}
/***** Start form *****/
@@ -911,7 +943,6 @@ void Agd_RequestCreatOrEditEvent (void)
Agd_PutParamAgdCod (AgdEvent.AgdCod);
}
Agd_PutHiddenParamEventsOrderType ();
- Grp_PutParamWhichGrps ();
Pag_PutHiddenParamPagNum (Gbl.Pag.CurrentPage);
/***** Table start *****/
@@ -979,7 +1010,7 @@ void Agd_RequestCreatOrEditEvent (void)
Act_FormEnd ();
/***** Show current events, if any *****/
- Agd_ShowAllEvents ();
+ Agd_ShowEvents (Agd_MY_AGENDA);
}
/*****************************************************************************/
@@ -992,57 +1023,58 @@ 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 OldLoc;
- struct AgendaEvent NewLoc;
+ struct AgendaEvent OldAgdEvent;
+ struct AgendaEvent NewAgdEvent;
bool ItsANewEvent;
bool NewEventIsCorrect = true;
char Txt[Cns_MAX_BYTES_TEXT+1];
/***** Get the code of the event *****/
- ItsANewEvent = ((NewLoc.AgdCod = Agd_GetParamAgdCod ()) == -1L);
+ ItsANewEvent = ((NewAgdEvent.AgdCod = Agd_GetParamAgdCod ()) == -1L);
if (!ItsANewEvent)
{
/* Get data of the old (current) event from database */
- OldLoc.AgdCod = NewLoc.AgdCod;
- Agd_GetDataOfEventByCod (&OldLoc);
+ OldAgdEvent.AgdCod = NewAgdEvent.AgdCod;
+ OldAgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
+ Agd_GetDataOfEventByCod (&OldAgdEvent);
}
/***** Get start/end date-times *****/
- NewLoc.TimeUTC[Loc_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
- NewLoc.TimeUTC[Loc_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
+ NewAgdEvent.TimeUTC[Loc_START_TIME] = Dat_GetTimeUTCFromForm ("StartTimeUTC");
+ NewAgdEvent.TimeUTC[Loc_END_TIME ] = Dat_GetTimeUTCFromForm ("EndTimeUTC" );
/***** Get event *****/
- Par_GetParToText ("Location",NewLoc.Location,Loc_MAX_LENGTH_LOCATION);
+ Par_GetParToText ("Location",NewAgdEvent.Location,Loc_MAX_LENGTH_LOCATION);
/***** Get event *****/
- Par_GetParToText ("Event",NewLoc.Event,Loc_MAX_LENGTH_EVENT);
+ Par_GetParToText ("Event",NewAgdEvent.Event,Loc_MAX_LENGTH_EVENT);
/***** Get text *****/
Par_GetParToHTML ("Txt",Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
/***** Adjust dates *****/
- if (NewLoc.TimeUTC[Loc_START_TIME] == 0)
- NewLoc.TimeUTC[Loc_START_TIME] = Gbl.StartExecutionTimeUTC;
- if (NewLoc.TimeUTC[Loc_END_TIME] == 0)
- NewLoc.TimeUTC[Loc_END_TIME] = NewLoc.TimeUTC[Loc_START_TIME] + 2*60*60; // +2 hours
+ if (NewAgdEvent.TimeUTC[Loc_START_TIME] == 0)
+ NewAgdEvent.TimeUTC[Loc_START_TIME] = Gbl.StartExecutionTimeUTC;
+ if (NewAgdEvent.TimeUTC[Loc_END_TIME] == 0)
+ NewAgdEvent.TimeUTC[Loc_END_TIME] = NewAgdEvent.TimeUTC[Loc_START_TIME] + 2*60*60; // +2 hours
/***** Check if event is correct *****/
- if (!NewLoc.Location[0]) // If there is no event
+ if (!NewAgdEvent.Location[0]) // If there is no event
{
NewEventIsCorrect = false;
Lay_ShowAlert (Lay_WARNING,Txt_You_must_specify_the_title_of_the_event);
}
/***** Check if event is correct *****/
- if (NewLoc.Event[0]) // If there's event
+ if (NewAgdEvent.Event[0]) // If there's event
{
/* If title of event was in database... */
- if (Agd_CheckIfSimilarEventExists ("Event",NewLoc.Event,NewLoc.AgdCod))
+ if (Agd_CheckIfSimilarEventExists ("Event",NewAgdEvent.Event,NewAgdEvent.AgdCod))
{
NewEventIsCorrect = false;
sprintf (Gbl.Message,Txt_Already_existed_an_event_with_the_title_X,
- NewLoc.Event);
+ NewAgdEvent.Event);
Lay_ShowAlert (Lay_WARNING,Gbl.Message);
}
}
@@ -1057,15 +1089,15 @@ void Agd_RecFormEvent (void)
{
if (ItsANewEvent)
{
- Agd_CreateEvent (&NewLoc,Txt); // Add new event to database
+ Agd_CreateEvent (&NewAgdEvent,Txt); // Add new event to database
/***** Write success message *****/
- sprintf (Gbl.Message,Txt_Created_new_event_X,NewLoc.Event);
+ sprintf (Gbl.Message,Txt_Created_new_event_X,NewAgdEvent.Event);
Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
}
else
{
- Agd_UpdateEvent (&NewLoc,Txt);
+ Agd_UpdateEvent (&NewAgdEvent,Txt);
/***** Write success message *****/
Lay_ShowAlert (Lay_SUCCESS,Txt_The_event_has_been_modified);
@@ -1075,7 +1107,7 @@ void Agd_RecFormEvent (void)
Grp_FreeListCodSelectedGrps ();
/***** Show events again *****/
- Agd_SeeEvents ();
+ Agd_ShowMyAgenda ();
}
else
// TODO: The form should be filled with partial data, now is always empty
diff --git a/swad_agenda.h b/swad_agenda.h
index ff32f8892..3c48d637c 100644
--- a/swad_agenda.h
+++ b/swad_agenda.h
@@ -76,11 +76,11 @@ typedef enum
/***************************** Public prototypes *****************************/
/*****************************************************************************/
-void Agd_SeeEvents (void);
+void Agd_ShowUsrAgenda (void);
+void Agd_ShowMyAgenda (void);
+
void Agd_PutHiddenParamEventsOrderType (void);
void Agd_RequestCreatOrEditEvent (void);
-void Agd_GetListEvents (void);
-void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent);
void Agd_FreeListEvents (void);
long Agd_GetParamAgdCod (void);
diff --git a/swad_changelog.h b/swad_changelog.h
index a094767b3..8f2427df7 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -185,13 +185,26 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 16.81.5 (2016-12-01)"
+#define Log_PLATFORM_VERSION "SWAD 16.82 (2016-12-02)"
#define CSS_FILE "swad16.69.css"
#define JS_FILE "swad16.46.1.js"
// 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 16.82: Dec 02, 2016 New action to show agenda another user's agenda. (209425 lines)
+ 10 changes necessary in database:
+UPDATE actions SET Txt='Ver mi agenda' WHERE ActCod='1602' AND Language='es';
+UPDATE actions SET Txt='Solicitar creación evento mi agenda' WHERE ActCod='1603' AND Language='es';
+UPDATE actions SET Txt='Solicitar edición evento mi agenda' WHERE ActCod='1604' AND Language='es';
+UPDATE actions SET Txt='Crear evento mi agenda' WHERE ActCod='1605' AND Language='es';
+UPDATE actions SET Txt='Cambiar evento mi agenda' WHERE ActCod='1606' AND Language='es';
+UPDATE actions SET Txt='Solicitar eliminación evento mi agenda' WHERE ActCod='1607' AND Language='es';
+UPDATE actions SET Txt='Eliminar evento mi agenda' WHERE ActCod='1608' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1609','es','N','Hacer privado evento mi agenda');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1610','es','N','Hacer público evento mi agenda');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1611','es','N','Ver agenda otro usuario');
+
Version 16.81.5: Dec 01, 2016 Link in teacher's record card to show agenda. (209313 lines)
Copy the following icon to icon public directory:
sudo cp icon/date64x64.gif /var/www/html/swad/icon/
diff --git a/swad_global.h b/swad_global.h
index 8887b33bf..08b667914 100644
--- a/swad_global.h
+++ b/swad_global.h
@@ -355,14 +355,6 @@ struct Globals
long DegCod;
} Crss[Crs_MAX_COURSES_PER_USR];
} MyCrss;
- struct
- {
- bool LstIsRead; // Is the list already read from database, or it needs to be read?
- unsigned Num; // Number of locations
- long *LstLocCods; // List of location codes
- Loc_Order_t SelectedOrderType;
- long LocCodToEdit; // Used as parameter in contextual links
- } Locs;
Usr_ShowUsrsType_t ListType; // My preference about user's list type
unsigned NumFollowers; // Number of users who follow me
unsigned NumFollowing; // Number of users I follow
@@ -413,6 +405,14 @@ struct Globals
struct UsrData *UsrDat;
Rec_SharedRecordViewType_t TypeOfView;
} Record;
+ struct
+ {
+ bool LstIsRead; // Is the list already read from database, or it needs to be read?
+ unsigned Num; // Number of events
+ long *LstAgdCods; // List of agenda codes
+ Loc_Order_t SelectedOrderType;
+ long AgdCodToEdit; // Used as parameter in contextual links
+ } Agenda;
struct
{
Sco_Scope_t Current;
diff --git a/swad_pagination.c b/swad_pagination.c
index ca32a126f..f942d38b0 100644
--- a/swad_pagination.c
+++ b/swad_pagination.c
@@ -131,6 +131,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (1);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (1);
@@ -164,6 +170,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (1);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
1,(unsigned) Pagination->NumPags);
@@ -208,6 +219,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (1);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (1);
@@ -241,6 +258,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (1);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
1,(unsigned) Pagination->NumPags);
@@ -268,6 +290,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (Pagination->LeftPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (Pagination->LeftPage);
@@ -301,6 +329,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (Pagination->LeftPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
(unsigned) Pagination->LeftPage,(unsigned) Pagination->NumPags);
@@ -335,6 +368,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (NumPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (NumPage);
@@ -368,6 +407,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (NumPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
(unsigned) NumPage,(unsigned) Pagination->NumPags);
@@ -398,6 +442,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (Pagination->RightPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (Pagination->RightPage);
@@ -431,6 +481,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (Pagination->RightPage);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
(unsigned) Pagination->RightPage,(unsigned) Pagination->NumPags);
@@ -458,6 +513,12 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Pag_PutHiddenParamPagNum (Pagination->NumPags);
+ Agd_PutHiddenParamEventsOrderType ();
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
case Pag_ATT_EVENTS:
Act_FormStart (ActSeeAtt);
Pag_PutHiddenParamPagNum (Pagination->NumPags);
@@ -491,6 +552,11 @@ void Pag_WriteLinksToPages (Pag_WhatPaginate_t WhatPaginate,long ThrCod,struct P
Asg_PutHiddenParamAsgOrderType ();
Grp_PutParamWhichGrps ();
break;
+ case Pag_MY_AGENDA:
+ Act_FormStart (ActSeeMyAgd);
+ Pag_PutHiddenParamPagNum (Pagination->NumPags);
+ Agd_PutHiddenParamEventsOrderType ();
+ break;
}
sprintf (Gbl.Title,Txt_See_page_X_of_Y,
(unsigned) Pagination->NumPags,(unsigned) Pagination->NumPags);
diff --git a/swad_pagination.h b/swad_pagination.h
index a082e6f8e..8d86df76d 100644
--- a/swad_pagination.h
+++ b/swad_pagination.h
@@ -40,12 +40,14 @@
typedef enum
{
Pag_ASSIGNMENTS,
+ Pag_USR_AGENDA,
Pag_ATT_EVENTS,
Pag_MESSAGES_RECEIVED,
Pag_MESSAGES_SENT,
Pag_THREADS_FORUM,
Pag_POSTS_FORUM,
Pag_SURVEYS,
+ Pag_MY_AGENDA,
} Pag_WhatPaginate_t;
struct Pagination // Used for threads and messages pagination
diff --git a/swad_record.c b/swad_record.c
index 0a73a1767..51e5ad57f 100644
--- a/swad_record.c
+++ b/swad_record.c
@@ -2367,7 +2367,7 @@ static void Rec_PutIconsCommands (void)
// The following slow check is made only if the previous fails
ICanViewAgenda = Usr_CheckIfUsrSharesAnyOfMyCrs (Gbl.Record.UsrDat->UsrCod);
if (ICanViewAgenda)
- Lay_PutContextualLink (ActSeeMyAgd,
+ Lay_PutContextualLink (ActSeeUsrAgd,
Rec_PutParamUsrCodEncrypted,
"date64x64.gif",
Txt_View_agenda,NULL,
diff --git a/swad_text.c b/swad_text.c
index 157755001..e6eb23c4a 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -2090,27 +2090,6 @@ const char *Txt_Admin_several_teachers =
"Gerenciar vários professores";
#endif
-const char *Txt_Agenda =
-#if L==1
- "Agenda";
-#elif L==2
- "Organizer";
-#elif L==3
- "Agenda";
-#elif L==4
- "Agenda";
-#elif L==5
- "Agenda";
-#elif L==6
- "Aporyrã";
-#elif L==7
- "Agenda";
-#elif L==8
- "Pamiętnik";
-#elif L==9
- "Agenda";
-#endif
-
const char *Txt_all =
#if L==1
"tot";
@@ -23198,6 +23177,27 @@ const char *Txt_Multiple_enrollment = // (to a type of group)
"Inscrição múltiplas?";
#endif
+const char *Txt_My_agenda =
+#if L==1
+ "La meva agenda";
+#elif L==2
+ "Mein Organizer";
+#elif L==3
+ "My agenda";
+#elif L==4
+ "Mi agenda";
+#elif L==5
+ "Mon agenda";
+#elif L==6
+ "Che aporyrã";
+#elif L==7
+ "La mia agenda";
+#elif L==8
+ "Moja pamiętnik";
+#elif L==9
+ "Minha agenda";
+#endif
+
const char *Txt_My_courses =
#if L==1
"Les meves assignatures";