Version 16.82

This commit is contained in:
Antonio Cañas Vargas 2016-12-02 00:24:16 +01:00
parent d8d90370fd
commit 98db84fe19
10 changed files with 409 additions and 289 deletions

View File

@ -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
};
/*****************************************************************************/

View File

@ -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 *********************************/

View File

@ -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,"<table class=\"FRAME_TBL_MARGIN CELLS_PAD_2\">"
@ -140,15 +179,23 @@ static void Agd_ShowAllEvents (void)
Order++)
{
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
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,"<u>");
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,"</u>");
fprintf (Gbl.F.Out,"</a>");
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,"</table>");
@ -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,"<tr>"
"<td id=\"asg_date_start_%u\" class=\"%s LEFT_TOP COLOR%u\">"
"<td id=\"agd_date_start_%u\" class=\"%s LEFT_TOP COLOR%u\">"
"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('asg_date_start_%u',%ld,'<br />','%s');"
"writeLocalDateHMSFromUTC('agd_date_start_%u',%ld,'<br />','%s');"
"</script>"
"</td>",
UniqueId,
@ -286,9 +320,9 @@ static void Agd_ShowOneEvent (long AgdCod)
/* End date/time */
UniqueId++;
fprintf (Gbl.F.Out,"<td id=\"asg_date_end_%u\" class=\"%s LEFT_TOP COLOR%u\">"
fprintf (Gbl.F.Out,"<td id=\"agd_date_end_%u\" class=\"%s LEFT_TOP COLOR%u\">"
"<script type=\"text/javascript\">"
"writeLocalDateHMSFromUTC('asg_date_end_%u',%ld,'<br />','%s');"
"writeLocalDateHMSFromUTC('agd_date_end_%u',%ld,'<br />','%s');"
"</script>"
"</td>",
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,"</td>");
/* 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,"<div>");
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

View File

@ -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);

View File

@ -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&oacute;n evento mi agenda' WHERE ActCod='1603' AND Language='es';
UPDATE actions SET Txt='Solicitar edici&oacute;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&oacute;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&uacute;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/

View File

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

View File

@ -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);

View File

@ -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

View File

@ -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,

View File

@ -2090,27 +2090,6 @@ const char *Txt_Admin_several_teachers =
"Gerenciar v&aacute;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&atilde;";
#elif L==7
"Agenda";
#elif L==8
"Pami&eogon;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&ccedil;&atilde;o m&uacute;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&atilde;";
#elif L==7
"La mia agenda";
#elif L==8
"Moja pami&eogon;tnik";
#elif L==9
"Minha agenda";
#endif
const char *Txt_My_courses =
#if L==1
"Les meves assignatures";