From eaaef84c9c3d33a6a372e7a23bee09a7532ac93d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Mon, 9 Mar 2015 10:54:58 +0100 Subject: [PATCH] Version 14.80.11 --- swad_changelog.h | 3 +- swad_statistic.c | 649 +++++++++++++++++++++++++---------------------- 2 files changed, 354 insertions(+), 298 deletions(-) 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 *****************/ /*****************************************************************************/