diff --git a/swad_agenda.c b/swad_agenda.c
index f05d16a0e..28ee26bdc 100644
--- a/swad_agenda.c
+++ b/swad_agenda.c
@@ -55,10 +55,12 @@ extern struct Globals Gbl;
/******************************* Private types *******************************/
/*****************************************************************************/
-#define Agd_NUM_AGENDA_TYPES 2
+#define Agd_NUM_AGENDA_TYPES 4
typedef enum
{
+ Agd_USR_AGENDA_NOW,
Agd_USR_AGENDA,
+ Agd_MY_AGENDA_NOW,
Agd_MY_AGENDA,
} Agd_AgendaType_t;
@@ -71,6 +73,8 @@ typedef enum
/*****************************************************************************/
static void Agd_ShowEvents (Agd_AgendaType_t AgendaType);
+static void Agd_ShowEventsNow (Agd_AgendaType_t AgendaType);
+static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType);
static void Agd_PutIconToViewEditMyAgenda (void);
static void Agd_PutIconsListEvents (void);
@@ -119,9 +123,12 @@ void Agd_PutParamAgd (void)
void Agd_ShowUsrAgendaAfterLogIn (void)
{
+ extern const char *Hlp_PROFILE_Agenda;
extern const unsigned Txt_Current_CGI_SWAD_Language;
+ extern const char *Txt_Public_agenda_USER;
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
extern const char *Txt_Switching_to_LANGUAGE[1+Txt_NUM_LANGUAGES];
+ bool ItsMe;
if (Gbl.Usrs.Me.Logged)
{
@@ -130,8 +137,24 @@ void Agd_ShowUsrAgendaAfterLogIn (void)
/***** Get user *****/
/* If nickname is correct, user code is already got from nickname */
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat)) // Existing user
+ {
+ /***** Start frame *****/
+ sprintf (Gbl.Title,Txt_Public_agenda_USER,Gbl.Usrs.Other.UsrDat.FullName);
+ ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod);
+ Lay_StartRoundFrame ("100%",Gbl.Title,
+ ItsMe ? Agd_PutIconToViewEditMyAgenda :
+ NULL,
+ Hlp_PROFILE_Agenda); // TODO: Change
+
+ /***** Show the current events in the user's agenda *****/
+ Agd_ShowEventsNow (Agd_USR_AGENDA_NOW);
+
/***** Show all the visible events in the user's agenda *****/
Agd_ShowEvents (Agd_USR_AGENDA);
+
+ /***** End frame *****/
+ Lay_EndRoundFrame ();
+ }
else
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
}
@@ -148,12 +171,31 @@ void Agd_ShowUsrAgendaAfterLogIn (void)
void Agd_ShowUsrAgenda (void)
{
+ extern const char *Hlp_PROFILE_Agenda;
+ extern const char *Txt_Public_agenda_USER;
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
+ bool ItsMe;
/***** Get user *****/
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
+ {
+ /***** Start frame *****/
+ sprintf (Gbl.Title,Txt_Public_agenda_USER,Gbl.Usrs.Other.UsrDat.FullName);
+ ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod);
+ Lay_StartRoundFrame ("100%",Gbl.Title,
+ ItsMe ? Agd_PutIconToViewEditMyAgenda :
+ NULL,
+ Hlp_PROFILE_Agenda); // TODO: Change
+
+ /***** Show the current events in the user's agenda *****/
+ Agd_ShowEventsNow (Agd_USR_AGENDA_NOW);
+
/***** Show all the visible events in the user's agenda *****/
Agd_ShowEvents (Agd_USR_AGENDA);
+
+ /***** End frame *****/
+ Lay_EndRoundFrame ();
+ }
else
Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
}
@@ -164,12 +206,45 @@ void Agd_ShowUsrAgenda (void)
void Agd_ShowMyAgenda (void)
{
+ extern const char *Hlp_PROFILE_Agenda;
+ extern const char *Txt_My_agenda;
+ extern const char *Txt_Public_agenda_USER;
+
/***** Get whether to show all events or only my events ******/
if (Gbl.Usrs.Me.AvailableRoles & (1 << Rol_TEACHER)) // I am a teacher in some courses
Agd_GetParamWhichEvents ();
+ /***** Start frame *****/
+ switch (Gbl.Agenda.WhichEvents)
+ {
+ case Agd_ALL_EVENTS:
+ Lay_StartRoundFrame ("100%",Txt_My_agenda,
+ Agd_PutIconsListEvents,
+ Hlp_PROFILE_Agenda);
+ break;
+ case Agd_ONLY_PUBLIC_EVENTS:
+ sprintf (Gbl.Title,Txt_Public_agenda_USER,Gbl.Usrs.Me.UsrDat.FullName);
+ Lay_StartRoundFrame ("100%",Gbl.Title,
+ Agd_PutIconsListEvents,
+ Hlp_PROFILE_Agenda);
+ break;
+ }
+
+ /***** Put form to choice whether to show
+ all events or only public events *****/
+ Act_FormStart (ActSeeMyAgd);
+ Agd_ShowFormToSelWhichEvents (ActSeeMyAgd);
+ Act_FormEnd ();
+
+ /***** Show the current events in the user's agenda *****/
+ if (Gbl.Agenda.WhichEvents == Agd_ONLY_PUBLIC_EVENTS)
+ Agd_ShowEventsNow (Agd_MY_AGENDA_NOW);
+
/***** Show all my events *****/
Agd_ShowEvents (Agd_MY_AGENDA);
+
+ /***** End frame *****/
+ Lay_EndRoundFrame ();
}
/*****************************************************************************/
@@ -181,19 +256,15 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
extern const char *Hlp_PROFILE_Agenda;
extern const char *Txt_Public_agenda_USER;
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;
- extern const char *Txt_Location;
extern const char *Txt_No_events;
- bool ItsMe;
- Agd_Order_t Order;
struct Pagination Pagination;
unsigned NumEvent;
Pag_WhatPaginate_t WhatPaginate[Agd_NUM_AGENDA_TYPES] =
{
- Pag_USR_AGENDA,
- Pag_MY_AGENDA,
+ Pag_USR_AGENDA, // Agd_USR_AGENDA_NOW, not used
+ Pag_USR_AGENDA, // Agd_USR_AGENDA
+ Pag_MY_AGENDA, // Agd_MY_AGENDA_NOW, not used
+ Pag_MY_AGENDA, // Agd_MY_AGENDA
};
/***** Get parameters *****/
@@ -213,83 +284,13 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
if (Pagination.MoreThanOnePage)
Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],0,&Pagination);
- switch (AgendaType)
- {
- case Agd_USR_AGENDA:
- /***** Start frame *****/
- sprintf (Gbl.Title,Txt_Public_agenda_USER,Gbl.Usrs.Other.UsrDat.FullName);
- ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Usrs.Other.UsrDat.UsrCod);
- Lay_StartRoundFrame ("100%",Gbl.Title,
- ItsMe ? Agd_PutIconToViewEditMyAgenda :
- NULL,
- Hlp_PROFILE_Agenda); // TODO: Change
- break;
- case Agd_MY_AGENDA:
- /***** Start frame *****/
- switch (Gbl.Agenda.WhichEvents)
- {
- case Agd_ALL_EVENTS:
- Lay_StartRoundFrame ("100%",Txt_My_agenda,
- Agd_PutIconsListEvents,
- Hlp_PROFILE_Agenda);
- break;
- case Agd_ONLY_PUBLIC_EVENTS:
- sprintf (Gbl.Title,Txt_Public_agenda_USER,Gbl.Usrs.Me.UsrDat.FullName);
- Lay_StartRoundFrame ("100%",Gbl.Title,
- Agd_PutIconsListEvents,
- Hlp_PROFILE_Agenda);
- break;
- }
-
- /***** Put form to choice whether to show
- all events or only public events *****/
- Act_FormStart (ActSeeMyAgd);
- Agd_ShowFormToSelWhichEvents (ActSeeMyAgd);
- Act_FormEnd ();
- break;
- }
-
if (Gbl.Agenda.Num)
{
+ /***** Start table *****/
+ fprintf (Gbl.F.Out,"
");
+
/***** Table head *****/
- fprintf (Gbl.F.Out,""
- "");
- for (Order = Agd_ORDER_BY_START_DATE;
- Order <= Agd_ORDER_BY_END_DATE;
- Order++)
- {
- fprintf (Gbl.F.Out,"");
- 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.Agenda.SelectedOrderType)
- fprintf (Gbl.F.Out,"");
- fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_OR_SVY_ORDER[Order]);
- if (Order == Gbl.Agenda.SelectedOrderType)
- fprintf (Gbl.F.Out,"");
- fprintf (Gbl.F.Out,"");
- Act_FormEnd ();
- fprintf (Gbl.F.Out," | ");
- }
- fprintf (Gbl.F.Out,""
- "%s"
- " | "
- ""
- "%s"
- " | "
- "
",
- Txt_Event,
- Txt_Location);
+ Agd_WriteHeaderListEvents (AgendaType);
/***** Write all the events *****/
for (NumEvent = Pagination.FirstItemVisible;
@@ -300,24 +301,118 @@ static void Agd_ShowEvents (Agd_AgendaType_t AgendaType)
/***** End table *****/
fprintf (Gbl.F.Out,"
");
}
- else // No events created
+ else
Lay_ShowAlert (Lay_INFO,Txt_No_events);
- /***** Button to create a new event *****/
- if (AgendaType == Agd_MY_AGENDA)
- Agd_PutButtonToCreateNewEvent ();
-
- /***** End frame *****/
- Lay_EndRoundFrame ();
-
/***** Write again links to pages *****/
if (Pagination.MoreThanOnePage)
Pag_WriteLinksToPagesCentered (WhatPaginate[AgendaType],0,&Pagination);
+ /***** Button to create a new event *****/
+ if (AgendaType == Agd_MY_AGENDA)
+ Agd_PutButtonToCreateNewEvent ();
+
/***** Free list of events *****/
Agd_FreeListEvents ();
}
+/*****************************************************************************/
+/*********************** Show current events in agenda ***********************/
+/*****************************************************************************/
+
+static void Agd_ShowEventsNow (Agd_AgendaType_t AgendaType)
+ {
+ extern const char *Hlp_PROFILE_Agenda;
+ extern const char *Txt_Now;
+ extern const char *Txt_Public_agenda_USER;
+ extern const char *Txt_My_agenda;
+ extern const char *Txt_No_events;
+ unsigned NumEvent;
+
+ /***** Get parameters *****/
+ Agd_GetParamEventOrderType ();
+
+ /***** Get list of events *****/
+ Agd_GetListEvents (AgendaType);
+
+ if (Gbl.Agenda.Num)
+ {
+ /***** Start frame *****/
+ Lay_StartRoundFrameTable (NULL,Txt_Now,
+ NULL,
+ Hlp_PROFILE_Agenda,2); // TODO: Change
+
+ /***** Table head *****/
+ Agd_WriteHeaderListEvents (AgendaType);
+
+ /***** Write all the events *****/
+ for (NumEvent = 0;
+ NumEvent < Gbl.Agenda.Num;
+ NumEvent++)
+ Agd_ShowOneEvent (AgendaType,Gbl.Agenda.LstAgdCods[NumEvent]);
+
+ /***** End table and frame *****/
+ Lay_EndRoundFrameTable ();
+ }
+
+ /***** Free list of events *****/
+ Agd_FreeListEvents ();
+ }
+
+/*****************************************************************************/
+/*************** Put contextual icon to view/edit my agenda ******************/
+/*****************************************************************************/
+
+static void Agd_WriteHeaderListEvents (Agd_AgendaType_t AgendaType)
+ {
+ 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;
+ extern const char *Txt_Location;
+ Agd_Order_t Order;
+
+ /***** Table head *****/
+ fprintf (Gbl.F.Out,"");
+ for (Order = Agd_ORDER_BY_START_DATE;
+ Order <= Agd_ORDER_BY_END_DATE;
+ Order++)
+ {
+ fprintf (Gbl.F.Out,"");
+ switch (AgendaType)
+ {
+ case Agd_USR_AGENDA_NOW:
+ case Agd_USR_AGENDA:
+ Act_FormStart (ActSeeUsrAgd);
+ Usr_PutParamOtherUsrCodEncrypted ();
+ break;
+ case Agd_MY_AGENDA_NOW:
+ 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.Agenda.SelectedOrderType)
+ fprintf (Gbl.F.Out,"");
+ fprintf (Gbl.F.Out,"%s",Txt_ASG_ATT_OR_SVY_ORDER[Order]);
+ if (Order == Gbl.Agenda.SelectedOrderType)
+ fprintf (Gbl.F.Out,"");
+ fprintf (Gbl.F.Out,"");
+ Act_FormEnd ();
+ fprintf (Gbl.F.Out," | ");
+ }
+ fprintf (Gbl.F.Out,""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ "
",
+ Txt_Event,
+ Txt_Location);
+ }
+
/*****************************************************************************/
/*************** Put contextual icon to view/edit my agenda ******************/
/*****************************************************************************/
@@ -473,9 +568,11 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod)
AgdEvent.AgdCod = AgdCod;
switch (AgendaType)
{
+ case Agd_USR_AGENDA_NOW:
case Agd_USR_AGENDA:
AgdEvent.UsrCod = Gbl.Usrs.Other.UsrDat.UsrCod;
break;
+ case Agd_MY_AGENDA_NOW:
case Agd_MY_AGENDA:
AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
break;
@@ -615,12 +712,18 @@ static void Agd_GetParamEventOrderType (void)
{
char UnsignedStr[10+1];
unsigned UnsignedNum;
+ static bool AlreadyGot = false;
- Par_GetParToText ("Order",UnsignedStr,10);
- if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
- Gbl.Agenda.SelectedOrderType = (Agd_Order_t) UnsignedNum;
- else
- Gbl.Agenda.SelectedOrderType = Agd_DEFAULT_ORDER_TYPE;
+ if (!AlreadyGot)
+ {
+ Par_GetParToText ("Order",UnsignedStr,10);
+ if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
+ Gbl.Agenda.SelectedOrderType = (Agd_Order_t) UnsignedNum;
+ else
+ Gbl.Agenda.SelectedOrderType = Agd_DEFAULT_ORDER_TYPE;
+
+ AlreadyGot = true;
+ }
}
/*****************************************************************************/
@@ -674,7 +777,7 @@ static void Agd_PutFormsToRemEditOneEvent (struct AgendaEvent *AgdEvent)
NULL);
/***** Put form to make event public/private *****/
- if (Gbl.Usrs.Me.AvailableRoles & (1 << Rol_TEACHER)) // I am a teacher in some courses
+ if (Gbl.Usrs.Me.UsrDat.Roles & (1 << Rol_TEACHER)) // I am a teacher in some courses
{
if (AgdEvent->Public)
Lay_PutContextualLink (ActPrvEvtMyAgd,Agd_PutParams,
@@ -736,6 +839,13 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
}
switch (AgendaType)
{
+ case Agd_USR_AGENDA_NOW:
+ sprintf (Query,"SELECT AgdCod FROM agendas"
+ " WHERE UsrCod='%ld' AND Public='Y' AND Hidden='N'"
+ " AND StartTime<=NOW() AND EndTime>=NOW()" // Only present events
+ " ORDER BY %s",
+ Gbl.Usrs.Other.UsrDat.UsrCod,OrderBySubQuery);
+ break;
case Agd_USR_AGENDA:
sprintf (Query,"SELECT AgdCod FROM agendas"
" WHERE UsrCod='%ld' AND Public='Y' AND Hidden='N'"
@@ -743,6 +853,13 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
" ORDER BY %s",
Gbl.Usrs.Other.UsrDat.UsrCod,OrderBySubQuery);
break;
+ case Agd_MY_AGENDA_NOW:
+ sprintf (Query,"SELECT AgdCod FROM agendas"
+ " WHERE UsrCod='%ld' AND Public='Y' AND Hidden='N'"
+ " AND StartTime<=NOW() AND EndTime>=NOW()" // Only present events
+ " ORDER BY %s",
+ Gbl.Usrs.Me.UsrDat.UsrCod,OrderBySubQuery);
+ break;
case Agd_MY_AGENDA:
switch (Gbl.Agenda.WhichEvents)
{
@@ -754,7 +871,7 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType)
break;
case Agd_ONLY_PUBLIC_EVENTS:
sprintf (Query,"SELECT AgdCod FROM agendas"
- " WHERE UsrCod='%ld' AND Public='Y'"
+ " WHERE UsrCod='%ld' AND Public='Y' AND Hidden='N'"
" ORDER BY %s",
Gbl.Usrs.Me.UsrDat.UsrCod,OrderBySubQuery);
break;
@@ -1303,7 +1420,7 @@ void Agd_RequestCreatOrEditEvent (void)
Act_FormEnd ();
/***** Show current events, if any *****/
- Agd_ShowEvents (Agd_MY_AGENDA);
+ Agd_ShowMyAgenda ();
}
/*****************************************************************************/
diff --git a/swad_changelog.h b/swad_changelog.h
index 7233a0d8e..f5f98d391 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -179,20 +179,19 @@
// TODO: When teacher sees "No hay estudiantes", put a button to add students
// TODO: When admin sees "No hay profesores", put a button to add teachers
-// TODO: Do not show hidden events of my agenda when selected "Only public events"
-
/*****************************************************************************/
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 16.87.2 (2016-12-05)"
+#define Log_PLATFORM_VERSION "SWAD 16.88 (2016-12-06)"
#define CSS_FILE "swad16.86.5.css"
#define JS_FILE "swad16.84.2.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.87.2: Dec 05, 2016 Icon to edit user's agenda. (209987 lines)
+ Version 16.88: Dec 06, 2016 Current events in user's agenda are displayed in a highlighted box. (210102 lines)
+ Version 16.87.2: Dec 05, 2016 Icon to edit my agenda. (209987 lines)
Version 16.87.1: Dec 05, 2016 Temporary permissions to debug agendas. (209969 lines)
Copy the following icons to icon public directory:
sudo cp icon/lock-on64x64.png /var/www/html/swad/icon/
diff --git a/swad_text.c b/swad_text.c
index b58b359fe..5da8ab4a1 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -26868,6 +26868,27 @@ const char *Txt_Notify_me_BR_by_email =
"Notifique-me
por email";
#endif
+const char *Txt_Now =
+#if L==1
+ "Ara";
+#elif L==2
+ "Jetzt";
+#elif L==3
+ "Now";
+#elif L==4
+ "Ahora";
+#elif L==5
+ "Maintenant";
+#elif L==6
+ "Ko'ãga";
+#elif L==7
+ "Ora";
+#elif L==8
+ "Teraz";
+#elif L==9
+ "Agora";
+#endif
+
const char *Txt_Now_each_student_can_belong_to_multiple_groups_of_type_X = // Warning: it is very important to include %s in the following sentences
#if L==1
"Ahora cada estudiante puede pertenecer a varios grupos de tipo %s."; // Necessita traduccio