diff --git a/swad_changelog.h b/swad_changelog.h
index 926466560..628d65af6 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -103,11 +103,12 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 14.80.10 (2015/03/09)"
+#define Log_PLATFORM_VERSION "SWAD 14.80.11 (2015/03/09)"
// 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 | tail -1
/*
+ Version 14.80.11: Mar 09, 2015 Scope country for statistic of notifications. (179267 lines)
Version 14.80.10: Mar 09, 2015 Scope country for statistic of notices. (179211 lines)
Version 14.80.9: Mar 09, 2015 Scope country for statistic of messages. (179187 lines)
Version 14.80.8: Mar 09, 2015 Scope country for statistic of forums. (179138 lines)
diff --git a/swad_statistic.c b/swad_statistic.c
index cd68cc4d5..1f27b35c6 100644
--- a/swad_statistic.c
+++ b/swad_statistic.c
@@ -145,6 +145,7 @@ static void Sta_GetNumberOfOERsFromDB (Sco_Scope_t Scope,Brw_License_t License,u
static void Sta_GetAndShowAssignmentsStats (void);
static void Sta_GetAndShowTestsStats (void);
+static void Sta_GetAndShowNumUsrsPerNotifyEvent (void);
static void Sta_GetAndShowNoticesStats (void);
static void Sta_GetAndShowMsgsStats (void);
@@ -167,7 +168,6 @@ static void Sta_GetAndShowNumUsrsPerTheme (void);
static void Sta_GetAndShowNumUsrsPerIconSet (void);
static void Sta_GetAndShowNumUsrsPerMenu (void);
static void Sta_GetAndShowNumUsrsPerSideColumns (void);
-static void Sta_GetAndShowNumUsrsPerNotifyEvent (void);
/*****************************************************************************/
/*************** Read CGI environment variable REMOTE_ADDR *******************/
@@ -4337,7 +4337,7 @@ static void Sta_GetAndShowNumCrssInSWAD (void)
unsigned Sta_GetTotalNumberOfUsers (Sco_Scope_t Scope,Rol_Role_t Role)
{
- char Query[256];
+ char Query[512];
/***** Get number of users from database *****/
switch (Scope)
@@ -4350,6 +4350,27 @@ unsigned Sta_GetTotalNumberOfUsers (Sco_Scope_t Scope,Rol_Role_t Role)
" FROM crs_usr WHERE Role='%u'",
(unsigned) Role);
break;
+ case Sco_SCOPE_CTY:
+ if (Role == Rol_ROLE_UNKNOWN) // Here Rol_ROLE_UNKNOWN means "all users"
+ sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
+ " FROM institutions,centres,degrees,courses,crs_usr"
+ " WHERE institutions.CtyCod='%ld'"
+ " AND institutions.InsCod=centres.InsCod"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod",
+ Gbl.CurrentCty.Cty.CtyCod);
+ else
+ sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
+ " FROM institutions,centres,degrees,courses,crs_usr"
+ " WHERE institutions.CtyCod='%ld'"
+ " AND institutions.InsCod=centres.InsCod"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.Role='%u'",
+ Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role);
+ break;
case Sco_SCOPE_INS:
if (Role == Rol_ROLE_UNKNOWN) // Here Rol_ROLE_UNKNOWN means "all users"
sprintf (Query,"SELECT COUNT(DISTINCT crs_usr.UsrCod)"
@@ -5707,6 +5728,335 @@ static void Sta_GetAndShowTestsStats (void)
Lay_EndRoundFrameTable10 ();
}
+/*****************************************************************************/
+/****** Get and show number of users who want to be notified by e-mail *******/
+/*****************************************************************************/
+
+static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
+ {
+ extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS];
+ extern const char *Txt_Event;
+ extern const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS];
+ extern const char *Txt_No_of_users;
+ extern const char *Txt_PERCENT_of_users;
+ extern const char *Txt_Number_of_BR_events;
+ extern const char *Txt_Number_of_BR_e_mails;
+ extern const char *Txt_Total;
+ Ntf_NotifyEvent_t NotifyEvent;
+ char Query[1024];
+ MYSQL_RES *mysql_res;
+ MYSQL_ROW row;
+ unsigned NumUsrsTotalInPlatform;
+ unsigned NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent;
+ unsigned NumUsrs[Ntf_NUM_NOTIFY_EVENTS];
+ unsigned NumEventsTotal = 0;
+ unsigned NumEvents[Ntf_NUM_NOTIFY_EVENTS];
+ unsigned NumMailsTotal = 0;
+ unsigned NumMails[Ntf_NUM_NOTIFY_EVENTS];
+ char *StyleTableCell = " border-style:solid none none none;"
+ " border-width:1px;";
+
+ Lay_StartRoundFrameTable10 (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_NOTIFY_EVENTS]);
+
+ /***** Heading row *****/
+ fprintf (Gbl.F.Out,"
"
+ ""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ ""
+ "%s"
+ " | "
+ "
",
+ Txt_Event,
+ Txt_No_of_users,
+ Txt_PERCENT_of_users,
+ Txt_Number_of_BR_events,
+ Txt_Number_of_BR_e_mails);
+
+ /***** Get total number of users in platform *****/
+ NumUsrsTotalInPlatform = Sta_GetTotalNumberOfUsers (Gbl.Scope.Current,Rol_ROLE_UNKNOWN);
+
+ /***** Get total number of users who want to be notified by e-mail on some event, from database *****/
+ switch (Gbl.Scope.Current)
+ {
+ case Sco_SCOPE_SYS:
+ sprintf (Query,"SELECT COUNT(*) FROM usr_data WHERE EmailNtfEvents<>0");
+ break;
+ case Sco_SCOPE_CTY:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM institutions,centres,degrees,courses,crs_usr,usr_data"
+ " WHERE institutions.CtyCod='%ld'"
+ " AND institutions.InsCod=centres.InsCod"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND usr_data.EmailNtfEvents<>0",
+ Gbl.CurrentCty.Cty.CtyCod);
+ break;
+ case Sco_SCOPE_INS:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM centres,degrees,courses,crs_usr,usr_data"
+ " WHERE centres.InsCod='%ld'"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND usr_data.EmailNtfEvents<>0",
+ Gbl.CurrentIns.Ins.InsCod);
+ break;
+ case Sco_SCOPE_CTR:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM degrees,courses,crs_usr,usr_data"
+ " WHERE degrees.CtrCod='%ld'"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND usr_data.EmailNtfEvents<>0",
+ Gbl.CurrentCtr.Ctr.CtrCod);
+ break;
+ case Sco_SCOPE_DEG:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM courses,crs_usr,usr_data"
+ " WHERE courses.DegCod='%ld'"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND usr_data.EmailNtfEvents<>0",
+ Gbl.CurrentDeg.Deg.DegCod);
+ break;
+ case Sco_SCOPE_CRS:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM crs_usr,usr_data"
+ " WHERE crs_usr.CrsCod='%ld'"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND usr_data.EmailNtfEvents<>0",
+ Gbl.CurrentCrs.Crs.CrsCod);
+ break;
+ default:
+ Lay_ShowErrorAndExit ("Wrong scope.");
+ break;
+ }
+ NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent = (unsigned) DB_QueryCOUNT (Query,"can not get the total number of users who want to be notified by e-mail on some event");
+
+ /***** For each notify event... *****/
+ for (NotifyEvent = (Ntf_NotifyEvent_t) 1;
+ NotifyEvent < Ntf_NUM_NOTIFY_EVENTS;
+ NotifyEvent++) // 0 is reserved for Ntf_EVENT_UNKNOWN
+ {
+ /***** Get the number of users who want to be notified by e-mail on this event, from database *****/
+ switch (Gbl.Scope.Current)
+ {
+ case Sco_SCOPE_SYS:
+ sprintf (Query,"SELECT COUNT(*) FROM usr_data WHERE ((EmailNtfEvents & %u)<>0)",
+ (1 << NotifyEvent));
+ break;
+ case Sco_SCOPE_CTY:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM institutions,centres,degrees,courses,crs_usr,usr_data"
+ " WHERE institutions.CtyCod='%ld'"
+ " AND institutions.InsCod=centres.InsCod"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND ((usr_data.EmailNtfEvents & %u)<>0)",
+ Gbl.CurrentCty.Cty.CtyCod,(1 << NotifyEvent));
+ break;
+ case Sco_SCOPE_INS:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM centres,degrees,courses,crs_usr,usr_data"
+ " WHERE centres.InsCod='%ld'"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND ((usr_data.EmailNtfEvents & %u)<>0)",
+ Gbl.CurrentIns.Ins.InsCod,(1 << NotifyEvent));
+ break;
+ case Sco_SCOPE_CTR:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM degrees,courses,crs_usr,usr_data"
+ " WHERE degrees.CtrCod='%ld'"
+ " AND degrees.DegCod=courses.DegCod"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND ((usr_data.EmailNtfEvents & %u)<>0)",
+ Gbl.CurrentCtr.Ctr.CtrCod,(1 << NotifyEvent));
+ break;
+ case Sco_SCOPE_DEG:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM courses,crs_usr,usr_data"
+ " WHERE courses.DegCod='%ld'"
+ " AND courses.CrsCod=crs_usr.CrsCod"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND ((usr_data.EmailNtfEvents & %u)<>0)",
+ Gbl.CurrentDeg.Deg.DegCod,(1 << NotifyEvent));
+ break;
+ case Sco_SCOPE_CRS:
+ sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
+ " FROM crs_usr,usr_data"
+ " WHERE crs_usr.CrsCod='%ld'"
+ " AND crs_usr.UsrCod=usr_data.UsrCod"
+ " AND ((usr_data.EmailNtfEvents & %u)<>0)",
+ Gbl.CurrentCrs.Crs.CrsCod,(1 << NotifyEvent));
+ break;
+ default:
+ Lay_ShowErrorAndExit ("Wrong scope.");
+ break;
+ }
+ NumUsrs[NotifyEvent] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who want to be notified by e-mail on an event");
+
+ /***** Get number of notifications by e-mail from database *****/
+ switch (Gbl.Scope.Current)
+ {
+ case Sco_SCOPE_SYS:
+ sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
+ " FROM sta_notif"
+ " WHERE NotifyEvent='%u'",
+ (unsigned) NotifyEvent);
+ break;
+ case Sco_SCOPE_CTY:
+ sprintf (Query,"SELECT SUM(sta_notif.NumEvents),SUM(sta_notif.NumMails)"
+ " FROM institutions,centres,degrees,sta_notif"
+ " WHERE institutions.CtyCod='%ld'"
+ " AND institutions.InsCod=centres.InsCod"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=sta_notif.DegCod"
+ " AND sta_notif.NotifyEvent='%u'",
+ Gbl.CurrentCty.Cty.CtyCod,(unsigned) NotifyEvent);
+ break;
+ case Sco_SCOPE_INS:
+ sprintf (Query,"SELECT SUM(sta_notif.NumEvents),SUM(sta_notif.NumMails)"
+ " FROM centres,degrees,sta_notif"
+ " WHERE centres.InsCod='%ld'"
+ " AND centres.CtrCod=degrees.CtrCod"
+ " AND degrees.DegCod=sta_notif.DegCod"
+ " AND sta_notif.NotifyEvent='%u'",
+ Gbl.CurrentIns.Ins.InsCod,(unsigned) NotifyEvent);
+ break;
+ case Sco_SCOPE_CTR:
+ sprintf (Query,"SELECT SUM(sta_notif.NumEvents),SUM(sta_notif.NumMails)"
+ " FROM degrees,sta_notif"
+ " WHERE degrees.CtrCod='%ld'"
+ " AND degrees.DegCod=sta_notif.DegCod"
+ " AND sta_notif.NotifyEvent='%u'",
+ Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) NotifyEvent);
+ break;
+ case Sco_SCOPE_DEG:
+ sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
+ " FROM sta_notif"
+ " WHERE DegCod='%ld'"
+ " AND NotifyEvent='%u'",
+ Gbl.CurrentDeg.Deg.DegCod,(unsigned) NotifyEvent);
+ break;
+ case Sco_SCOPE_CRS:
+ sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
+ " FROM sta_notif"
+ " WHERE CrsCod='%ld'"
+ " AND NotifyEvent='%u'",
+ Gbl.CurrentCrs.Crs.CrsCod,(unsigned) NotifyEvent);
+ break;
+ default:
+ Lay_ShowErrorAndExit ("Wrong scope.");
+ break;
+ }
+ DB_QuerySELECT (Query,&mysql_res,"can not get the number of notifications by e-mail");
+
+ row = mysql_fetch_row (mysql_res);
+
+ /* Get number of events notified */
+ if (row[0])
+ {
+ if (sscanf (row[0],"%u",&NumEvents[NotifyEvent]) != 1)
+ Lay_ShowErrorAndExit ("Error when getting the number of notifications by e-mail.");
+ }
+ else
+ NumEvents[NotifyEvent] = 0;
+
+ /* Get number of mails sent */
+ if (row[1])
+ {
+ if (sscanf (row[1],"%u",&NumMails[NotifyEvent]) != 1)
+ Lay_ShowErrorAndExit ("Error when getting the number of e-mails to notify events3.");
+ }
+ else
+ NumMails[NotifyEvent] = 0;
+
+ /* Free structure that stores the query result */
+ DB_FreeMySQLResult (&mysql_res);
+
+ /* Update total number of events and mails */
+ NumEventsTotal += NumEvents[NotifyEvent];
+ NumMailsTotal += NumMails[NotifyEvent];
+ }
+
+ /***** Write number of users who want to be notified by e-mail on each event *****/
+ for (NotifyEvent = (Ntf_NotifyEvent_t) 1;
+ NotifyEvent < Ntf_NUM_NOTIFY_EVENTS;
+ NotifyEvent++) // 0 is reserved for Ntf_EVENT_UNKNOWN
+ fprintf (Gbl.F.Out,""
+ ""
+ "%s"
+ " | "
+ ""
+ "%u"
+ " | "
+ ""
+ "%5.2f%%"
+ " | "
+ ""
+ "%u"
+ " | "
+ ""
+ "%u"
+ " | "
+ "
",
+ Txt_NOTIFY_EVENTS_PLURAL[NotifyEvent],
+ NumUsrs[NotifyEvent],
+ NumUsrsTotalInPlatform ? (float) NumUsrs[NotifyEvent] * 100.0 /
+ (float) NumUsrsTotalInPlatform :
+ 0.0,
+ NumEvents[NotifyEvent],
+ NumMails[NotifyEvent]);
+
+ /***** Write total number of users who want to be notified by e-mail on some event *****/
+ fprintf (Gbl.F.Out,""
+ ""
+ "%s"
+ " | "
+ ""
+ "%u"
+ " | "
+ ""
+ "%5.2f%%"
+ " | "
+ ""
+ "%u"
+ " | "
+ ""
+ "%u"
+ " | "
+ "
",
+ StyleTableCell,Txt_Total,
+ StyleTableCell,NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent,
+ StyleTableCell,NumUsrsTotalInPlatform ? (float) NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent * 100.0 /
+ (float) NumUsrsTotalInPlatform :
+ 0.0,
+ StyleTableCell,NumEventsTotal,
+ StyleTableCell,NumMailsTotal);
+
+ Lay_EndRoundFrameTable10 ();
+ }
+
/*****************************************************************************/
/***************************** Show stats of notices *************************/
/*****************************************************************************/
@@ -7302,301 +7652,6 @@ static void Sta_GetAndShowNumUsrsPerSideColumns (void)
Lay_EndRoundFrameTable10 ();
}
-/*****************************************************************************/
-/****** Get and show number of users who want to be notified by e-mail *******/
-/*****************************************************************************/
-
-static void Sta_GetAndShowNumUsrsPerNotifyEvent (void)
- {
- extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_TYPES_USE_STATS];
- extern const char *Txt_Event;
- extern const char *Txt_NOTIFY_EVENTS_PLURAL[Ntf_NUM_NOTIFY_EVENTS];
- extern const char *Txt_No_of_users;
- extern const char *Txt_PERCENT_of_users;
- extern const char *Txt_Number_of_BR_events;
- extern const char *Txt_Number_of_BR_e_mails;
- extern const char *Txt_Total;
- Ntf_NotifyEvent_t NotifyEvent;
- char Query[1024];
- MYSQL_RES *mysql_res;
- MYSQL_ROW row;
- unsigned NumUsrsTotalInPlatform;
- unsigned NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent;
- unsigned NumUsrs[Ntf_NUM_NOTIFY_EVENTS];
- unsigned NumEventsTotal = 0;
- unsigned NumEvents[Ntf_NUM_NOTIFY_EVENTS];
- unsigned NumMailsTotal = 0;
- unsigned NumMails[Ntf_NUM_NOTIFY_EVENTS];
- char *StyleTableCell = " border-style:solid none none none;"
- " border-width:1px;";
-
- Lay_StartRoundFrameTable10 (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_NOTIFY_EVENTS]);
-
- /***** Heading row *****/
- fprintf (Gbl.F.Out,""
- ""
- "%s"
- " | "
- ""
- "%s"
- " | "
- ""
- "%s"
- " | "
- ""
- "%s"
- " | "
- ""
- "%s"
- " | "
- "
",
- Txt_Event,
- Txt_No_of_users,
- Txt_PERCENT_of_users,
- Txt_Number_of_BR_events,
- Txt_Number_of_BR_e_mails);
-
- /***** Get total number of users in platform *****/
- NumUsrsTotalInPlatform = Sta_GetTotalNumberOfUsers (Gbl.Scope.Current,Rol_ROLE_UNKNOWN);
-
- /***** Get total number of users who want to be notified by e-mail on some event, from database *****/
- switch (Gbl.Scope.Current)
- {
- case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT COUNT(*) FROM usr_data WHERE EmailNtfEvents<>0");
- break;
- case Sco_SCOPE_INS:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM centres,degrees,courses,crs_usr,usr_data"
- " WHERE centres.InsCod='%ld'"
- " AND centres.CtrCod=degrees.CtrCod"
- " AND degrees.DegCod=courses.DegCod"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND usr_data.EmailNtfEvents<>0",
- Gbl.CurrentIns.Ins.InsCod);
- break;
- case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM degrees,courses,crs_usr,usr_data"
- " WHERE degrees.CtrCod='%ld'"
- " AND degrees.DegCod=courses.DegCod"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND usr_data.EmailNtfEvents<>0",
- Gbl.CurrentCtr.Ctr.CtrCod);
- break;
- case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM courses,crs_usr,usr_data"
- " WHERE courses.DegCod='%ld'"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND usr_data.EmailNtfEvents<>0",
- Gbl.CurrentDeg.Deg.DegCod);
- break;
- case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM crs_usr,usr_data"
- " WHERE crs_usr.CrsCod='%ld'"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND usr_data.EmailNtfEvents<>0",
- Gbl.CurrentCrs.Crs.CrsCod);
- break;
- default:
- Lay_ShowErrorAndExit ("Wrong scope.");
- break;
- }
- NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent = (unsigned) DB_QueryCOUNT (Query,"can not get the total number of users who want to be notified by e-mail on some event");
-
- /***** For each notify event... *****/
- for (NotifyEvent = (Ntf_NotifyEvent_t) 1;
- NotifyEvent < Ntf_NUM_NOTIFY_EVENTS;
- NotifyEvent++) // 0 is reserved for Ntf_EVENT_UNKNOWN
- {
- /***** Get the number of users who want to be notified by e-mail on this event, from database *****/
- switch (Gbl.Scope.Current)
- {
- case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT COUNT(*) FROM usr_data WHERE ((EmailNtfEvents & %u)<>0)",
- (1 << NotifyEvent));
- break;
- case Sco_SCOPE_INS:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM centres,degrees,courses,crs_usr,usr_data"
- " WHERE centres.InsCod='%ld'"
- " AND centres.CtrCod=degrees.CtrCod"
- " AND degrees.DegCod=courses.DegCod"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND ((usr_data.EmailNtfEvents & %u)<>0)",
- Gbl.CurrentIns.Ins.InsCod,(1 << NotifyEvent));
- break;
- case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM degrees,courses,crs_usr,usr_data"
- " WHERE degrees.CtrCod='%ld'"
- " AND degrees.DegCod=courses.DegCod"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND ((usr_data.EmailNtfEvents & %u)<>0)",
- Gbl.CurrentCtr.Ctr.CtrCod,(1 << NotifyEvent));
- break;
- case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM courses,crs_usr,usr_data"
- " WHERE courses.DegCod='%ld'"
- " AND courses.CrsCod=crs_usr.CrsCod"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND ((usr_data.EmailNtfEvents & %u)<>0)",
- Gbl.CurrentDeg.Deg.DegCod,(1 << NotifyEvent));
- break;
- case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT COUNT(DISTINCT usr_data.UsrCod)"
- " FROM crs_usr,usr_data"
- " WHERE crs_usr.CrsCod='%ld'"
- " AND crs_usr.UsrCod=usr_data.UsrCod"
- " AND ((usr_data.EmailNtfEvents & %u)<>0)",
- Gbl.CurrentCrs.Crs.CrsCod,(1 << NotifyEvent));
- break;
- default:
- Lay_ShowErrorAndExit ("Wrong scope.");
- break;
- }
- NumUsrs[NotifyEvent] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who want to be notified by e-mail on an event");
-
- /***** Get number of notifications by e-mail from database *****/
- switch (Gbl.Scope.Current)
- {
- case Sco_SCOPE_SYS:
- sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
- " FROM sta_notif"
- " WHERE NotifyEvent='%u'",
- (unsigned) NotifyEvent);
- break;
- case Sco_SCOPE_INS:
- sprintf (Query,"SELECT SUM(sta_notif.NumEvents),SUM(sta_notif.NumMails)"
- " FROM centres,degrees,sta_notif"
- " WHERE centres.InsCod='%ld'"
- " AND centres.CtrCod=degrees.CtrCod"
- " AND degrees.DegCod=sta_notif.DegCod"
- " AND sta_notif.NotifyEvent='%u'",
- Gbl.CurrentIns.Ins.InsCod,(unsigned) NotifyEvent);
- break;
- case Sco_SCOPE_CTR:
- sprintf (Query,"SELECT SUM(sta_notif.NumEvents),SUM(sta_notif.NumMails)"
- " FROM degrees,sta_notif"
- " WHERE degrees.CtrCod='%ld'"
- " AND degrees.DegCod=sta_notif.DegCod"
- " AND sta_notif.NotifyEvent='%u'",
- Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) NotifyEvent);
- break;
- case Sco_SCOPE_DEG:
- sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
- " FROM sta_notif"
- " WHERE DegCod='%ld'"
- " AND NotifyEvent='%u'",
- Gbl.CurrentDeg.Deg.DegCod,(unsigned) NotifyEvent);
- break;
- case Sco_SCOPE_CRS:
- sprintf (Query,"SELECT SUM(NumEvents),SUM(NumMails)"
- " FROM sta_notif"
- " WHERE CrsCod='%ld'"
- " AND NotifyEvent='%u'",
- Gbl.CurrentCrs.Crs.CrsCod,(unsigned) NotifyEvent);
- break;
- default:
- Lay_ShowErrorAndExit ("Wrong scope.");
- break;
- }
- DB_QuerySELECT (Query,&mysql_res,"can not get the number of notifications by e-mail");
-
- row = mysql_fetch_row (mysql_res);
-
- /* Get number of events notified */
- if (row[0])
- {
- if (sscanf (row[0],"%u",&NumEvents[NotifyEvent]) != 1)
- Lay_ShowErrorAndExit ("Error when getting the number of notifications by e-mail.");
- }
- else
- NumEvents[NotifyEvent] = 0;
-
- /* Get number of mails sent */
- if (row[1])
- {
- if (sscanf (row[1],"%u",&NumMails[NotifyEvent]) != 1)
- Lay_ShowErrorAndExit ("Error when getting the number of e-mails to notify events3.");
- }
- else
- NumMails[NotifyEvent] = 0;
-
- /* Free structure that stores the query result */
- DB_FreeMySQLResult (&mysql_res);
-
- /* Update total number of events and mails */
- NumEventsTotal += NumEvents[NotifyEvent];
- NumMailsTotal += NumMails[NotifyEvent];
- }
-
- /***** Write number of users who want to be notified by e-mail on each event *****/
- for (NotifyEvent = (Ntf_NotifyEvent_t) 1;
- NotifyEvent < Ntf_NUM_NOTIFY_EVENTS;
- NotifyEvent++) // 0 is reserved for Ntf_EVENT_UNKNOWN
- fprintf (Gbl.F.Out,""
- ""
- "%s"
- " | "
- ""
- "%u"
- " | "
- ""
- "%5.2f%%"
- " | "
- ""
- "%u"
- " | "
- ""
- "%u"
- " | "
- "
",
- Txt_NOTIFY_EVENTS_PLURAL[NotifyEvent],
- NumUsrs[NotifyEvent],
- NumUsrsTotalInPlatform ? (float) NumUsrs[NotifyEvent] * 100.0 /
- (float) NumUsrsTotalInPlatform :
- 0.0,
- NumEvents[NotifyEvent],
- NumMails[NotifyEvent]);
-
- /***** Write total number of users who want to be notified by e-mail on some event *****/
- fprintf (Gbl.F.Out,""
- ""
- "%s"
- " | "
- ""
- "%u"
- " | "
- ""
- "%5.2f%%"
- " | "
- ""
- "%u"
- " | "
- ""
- "%u"
- " | "
- "
",
- StyleTableCell,Txt_Total,
- StyleTableCell,NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent,
- StyleTableCell,NumUsrsTotalInPlatform ? (float) NumUsrsTotalWhoWantToBeNotifiedByEMailAboutSomeEvent * 100.0 /
- (float) NumUsrsTotalInPlatform :
- 0.0,
- StyleTableCell,NumEventsTotal,
- StyleTableCell,NumMailsTotal);
-
- Lay_EndRoundFrameTable10 ();
- }
-
/*****************************************************************************/
/**************** Compute the time used to generate the page *****************/
/*****************************************************************************/