Version 16.17.15

This commit is contained in:
Antonio Cañas Vargas 2016-10-09 00:49:23 +02:00
parent c41857076f
commit 9070d50c97
2 changed files with 27 additions and 59 deletions

View File

@ -148,13 +148,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.17.14 (2016-10-09)" #define Log_PLATFORM_VERSION "SWAD 16.17.15 (2016-10-09)"
#define CSS_FILE "swad15.229.css" #define CSS_FILE "swad15.229.css"
#define JS_FILE "swad15.238.1.js" #define JS_FILE "swad15.238.1.js"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 16.17.15: Oct 09, 2016 Code refactoring in user's usage report. (206236 lines)
Version 16.17.14: Oct 09, 2016 Code refactoring in user's usage report. (206268 lines) Version 16.17.14: Oct 09, 2016 Code refactoring in user's usage report. (206268 lines)
Version 16.17.13: Oct 09, 2016 Code refactoring in user's usage report. (206273 lines) Version 16.17.13: Oct 09, 2016 Code refactoring in user's usage report. (206273 lines)
Version 16.17.12: Oct 09, 2016 Code refactoring in user's usage report. (206278 lines) Version 16.17.12: Oct 09, 2016 Code refactoring in user's usage report. (206278 lines)

View File

@ -115,32 +115,22 @@ static void Rep_WriteSectionPlatform (void);
static void Rep_WriteSectionUsrInfo (void); static void Rep_WriteSectionUsrInfo (void);
static void Rep_WriteSectionUsrFigures (const struct Rep_Report *Report); static void Rep_WriteSectionUsrFigures (const struct Rep_Report *Report);
static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures); static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures);
static void Rep_WriteSectionGlobalHits (const struct Rep_Report *Report); static void Rep_WriteSectionGlobalHits (struct Rep_Report *Report);
static void Rep_WriteSectionCurrentCourses (const struct Rep_Report *Report); static void Rep_WriteSectionCurrentCourses (const struct Rep_Report *Report);
static void Rep_WriteSectionHistoricCourses (const struct UsrFigures *UsrFigures, static void Rep_WriteSectionHistoricCourses (const struct Rep_Report *Report);
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear);
static unsigned long Rep_GetMaxHitsPerYear (time_t FirstClickTimeUTC); static unsigned long Rep_GetMaxHitsPerYear (time_t FirstClickTimeUTC);
static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role, static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
const struct Rep_Report *Report); const struct Rep_Report *Report);
static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (time_t FirstClickTimeUTC, static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (const struct Rep_Report *Report);
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear);
static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role, static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report);
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear);
static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role, static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report,
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear,
bool WriteNumUsrs); bool WriteNumUsrs);
static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role, static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report);
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear);
static void Rep_ComputeMaxAndTotalHits (struct Rep_Hits *Hits, static void Rep_ComputeMaxAndTotalHits (struct Rep_Hits *Hits,
unsigned long NumRows, unsigned long NumRows,
MYSQL_RES *mysql_res,unsigned Field); MYSQL_RES *mysql_res,unsigned Field);
@ -244,8 +234,7 @@ static void Rep_CreateMyUsageReport (struct Rep_Report *Report)
Rep_WriteSectionCurrentCourses (Report); Rep_WriteSectionCurrentCourses (Report);
/***** Historic courses *****/ /***** Historic courses *****/
Rep_WriteSectionHistoricCourses (&Report->UsrFigures,&Report->tm_FirstClickTime, Rep_WriteSectionHistoricCourses (Report);
Report->MaxHitsPerYear);
/***** End file *****/ /***** End file *****/
fprintf (Gbl.F.Rep,"</body>\n" fprintf (Gbl.F.Rep,"</body>\n"
@ -735,7 +724,7 @@ static void Rep_WriteSectionUsrFigures (const struct Rep_Report *Report)
/******** Write section for user's global hits in user's usage report ********/ /******** Write section for user's global hits in user's usage report ********/
/*****************************************************************************/ /*****************************************************************************/
static void Rep_WriteSectionGlobalHits (const struct Rep_Report *Report) static void Rep_WriteSectionGlobalHits (struct Rep_Report *Report)
{ {
extern const char *Txt_Hits_per_year; extern const char *Txt_Hits_per_year;
@ -745,11 +734,10 @@ static void Rep_WriteSectionGlobalHits (const struct Rep_Report *Report)
Txt_Hits_per_year); Txt_Hits_per_year);
/***** Global (in any course) hits per year *****/ /***** Global (in any course) hits per year *****/
Report->MaxHitsPerYear = 0; // MaxHitsPerYear not passed as an argument but computed inside the function
Rep_ShowMyHitsPerYear (true,-1L, // Any course Rep_ShowMyHitsPerYear (true,-1L, // Any course
Rol_UNKNOWN, // Any role Rol_UNKNOWN, // Any role
Report->UsrFigures.FirstClickTimeUTC, Report);
&Report->tm_FirstClickTime,
0); // MaxHitsPerYear not passed as an argument but computed inside the function
/***** End of section *****/ /***** End of section *****/
fprintf (Gbl.F.Rep,"</section>\n"); fprintf (Gbl.F.Rep,"</section>\n");
@ -872,9 +860,7 @@ static void Rep_WriteSectionCurrentCourses (const struct Rep_Report *Report)
/***** Write section for user's historic courses in user's usage report ******/ /***** Write section for user's historic courses in user's usage report ******/
/*****************************************************************************/ /*****************************************************************************/
static void Rep_WriteSectionHistoricCourses (const struct UsrFigures *UsrFigures, static void Rep_WriteSectionHistoricCourses (const struct Rep_Report *Report)
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear)
{ {
extern const char *Txt_Courses; extern const char *Txt_Courses;
extern const char *Txt_historical_log; extern const char *Txt_historical_log;
@ -890,17 +876,14 @@ static void Rep_WriteSectionHistoricCourses (const struct UsrFigures *UsrFigures
fprintf (Gbl.F.Rep,"<ul>"); fprintf (Gbl.F.Rep,"<ul>");
/********* Historic clicks of a user without course selected ***********/ /********* Historic clicks of a user without course selected ***********/
Rep_GetAndWriteMyHistoricClicsWithoutCrs (UsrFigures->FirstClickTimeUTC,tm_FirstClickTime, Rep_GetAndWriteMyHistoricClicsWithoutCrs (Report);
MaxHitsPerYear);
/***** Historic courses in which the user clicked as student/teacher *****/ /***** Historic courses in which the user clicked as student/teacher *****/
for (Role = Rol_STUDENT; for (Role = Rol_STUDENT;
Role <= Rol_TEACHER; Role <= Rol_TEACHER;
Role++) Role++)
/* List my courses with this role */ /* List my courses with this role */
Rep_GetAndWriteMyHistoricCrss (Role, Rep_GetAndWriteMyHistoricCrss (Role,Report);
UsrFigures->FirstClickTimeUTC,tm_FirstClickTime,
MaxHitsPerYear);
/***** End of section *****/ /***** End of section *****/
fprintf (Gbl.F.Rep,"</ul>" fprintf (Gbl.F.Rep,"</ul>"
@ -1034,10 +1017,7 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
CrsCod = Str_ConvertStrCodToLongCod (row[0]); CrsCod = Str_ConvertStrCodToLongCod (row[0]);
/* Write data of this course */ /* Write data of this course */
Rep_WriteRowCrsData (CrsCod,Role, Rep_WriteRowCrsData (CrsCod,Role,Report,
Report->UsrFigures.FirstClickTimeUTC,
&Report->tm_FirstClickTime,
Report->MaxHitsPerYear,
true); // Write number of users in course true); // Write number of users in course
} }
@ -1056,9 +1036,7 @@ static void Rep_GetAndWriteMyCurrentCrss (Rol_Role_t Role,
/************* Write my historic clicks without course selected **************/ /************* Write my historic clicks without course selected **************/
/*****************************************************************************/ /*****************************************************************************/
static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (time_t FirstClickTimeUTC, static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (const struct Rep_Report *Report)
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear)
{ {
extern const char *Txt_Hits_without_course_selected; extern const char *Txt_Hits_without_course_selected;
@ -1070,8 +1048,7 @@ static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (time_t FirstClickTimeUTC,
/***** Historic clicks *****/ /***** Historic clicks *****/
Rep_WriteRowCrsData (-1L, Rep_WriteRowCrsData (-1L,
Rol_UNKNOWN, // Role does not matter Rol_UNKNOWN, // Role does not matter
FirstClickTimeUTC,tm_FirstClickTime, Report,
MaxHitsPerYear,
false); // Do not write number of users in course false); // Do not write number of users in course
/***** End of list *****/ /***** End of list *****/
@ -1084,9 +1061,7 @@ static void Rep_GetAndWriteMyHistoricClicsWithoutCrs (time_t FirstClickTimeUTC,
/*****************************************************************************/ /*****************************************************************************/
static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role, static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report)
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear)
{ {
extern const char *Txt_Hits_as_a_USER; extern const char *Txt_Hits_as_a_USER;
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
@ -1129,9 +1104,7 @@ static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role,
CrsCod = Str_ConvertStrCodToLongCod (row[0]); CrsCod = Str_ConvertStrCodToLongCod (row[0]);
/* Write data of this course */ /* Write data of this course */
Rep_WriteRowCrsData (CrsCod,Role, Rep_WriteRowCrsData (CrsCod,Role,Report,
FirstClickTimeUTC,tm_FirstClickTime,
MaxHitsPerYear,
false); // Do not write number of users in course false); // Do not write number of users in course
} }
@ -1149,9 +1122,7 @@ static void Rep_GetAndWriteMyHistoricCrss (Rol_Role_t Role,
/*****************************************************************************/ /*****************************************************************************/
static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role, static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report,
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear,
bool WriteNumUsrs) bool WriteNumUsrs)
{ {
extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE]; extern const char *Txt_YEAR_OF_DEGREE[1+Deg_MAX_YEARS_PER_DEGREE];
@ -1201,9 +1172,7 @@ static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
/***** Write hits per year for this course *****/ /***** Write hits per year for this course *****/
fprintf (Gbl.F.Rep,"<br />"); fprintf (Gbl.F.Rep,"<br />");
Rep_ShowMyHitsPerYear (false,CrsCod,Role, Rep_ShowMyHitsPerYear (false,CrsCod,Role,Report);
FirstClickTimeUTC,tm_FirstClickTime,
MaxHitsPerYear);
fprintf (Gbl.F.Rep,"</li>"); fprintf (Gbl.F.Rep,"</li>");
} }
@ -1213,9 +1182,7 @@ static void Rep_WriteRowCrsData (long CrsCod,Rol_Role_t Role,
/*****************************************************************************/ /*****************************************************************************/
static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role, static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
time_t FirstClickTimeUTC, const struct Rep_Report *Report)
const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear)
{ {
char Query[512]; char Query[512];
char SubQueryCrs[128]; char SubQueryCrs[128];
@ -1246,22 +1213,22 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
" WHERE ClickTime>=FROM_UNIXTIME('%ld')" " WHERE ClickTime>=FROM_UNIXTIME('%ld')"
" AND UsrCod='%ld'%s%s" " AND UsrCod='%ld'%s%s"
" GROUP BY Year DESC", " GROUP BY Year DESC",
(long) FirstClickTimeUTC, (long) Report->UsrFigures.FirstClickTimeUTC,
Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.Usrs.Me.UsrDat.UsrCod,
SubQueryCrs, SubQueryCrs,
SubQueryRol); SubQueryRol);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get clicks"); NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get clicks");
/***** Initialize first year *****/ /***** Initialize first year *****/
Gbl.DateRange.DateIni.Date.Year = 1900 + tm_FirstClickTime->tm_year; Gbl.DateRange.DateIni.Date.Year = 1900 + Report->tm_FirstClickTime.tm_year;
/***** Initialize LastYear *****/ /***** Initialize LastYear *****/
LastYear = Gbl.Now.Date.Year; LastYear = Gbl.Now.Date.Year;
/***** Set maximum number of hits per year *****/ /***** Set maximum number of hits per year *****/
if (MaxHitsPerYear) if (Report->MaxHitsPerYear)
/* Set maximum number of hits per year from parameter */ /* Set maximum number of hits per year from parameter */
Hits.Max = MaxHitsPerYear; Hits.Max = Report->MaxHitsPerYear;
else else
{ {
/* Compute maximum number of hits per year */ /* Compute maximum number of hits per year */