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";