Version 16.17.4

This commit is contained in:
Antonio Cañas Vargas 2016-10-08 21:19:47 +02:00
parent ab95094de9
commit 130d4971e9
3 changed files with 61 additions and 18 deletions

View File

@ -148,13 +148,14 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.17.3 (2016-10-08)" #define Log_PLATFORM_VERSION "SWAD 16.17.4 (2016-10-08)"
#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.4: Oct 08, 2016 Code refactoring in user's usage report. (206292 lines)
Version 16.17.3: Oct 08, 2016 Message translated in user's usage report. (206255 lines) Version 16.17.3: Oct 08, 2016 Message translated in user's usage report. (206255 lines)
Version 16.17.2: Oct 08, 2016 Message translated in user's usage report. (206233 lines) Version 16.17.2: Oct 08, 2016 Message translated in user's usage report. (206233 lines)
Version 16.17.1: Oct 08, 2016 Message translated in user's usage report. (206211 lines) Version 16.17.1: Oct 08, 2016 Message translated in user's usage report. (206211 lines)

View File

@ -70,6 +70,12 @@ struct CurrentTimeUTC
unsigned Time; // Example: 190349 unsigned Time; // Example: 190349
}; };
struct Rep_Hits
{
unsigned long Num;
unsigned long Max;
};
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
/*****************************************************************************/ /*****************************************************************************/
@ -140,7 +146,10 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
time_t FirstClickTimeUTC, time_t FirstClickTimeUTC,
const struct tm *tm_FirstClickTime, const struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear); unsigned long MaxHitsPerYear);
static void Rep_DrawBarNumHits (float HitsNum,float HitsMax, static void Rep_ComputeMaxAndTotalHits (struct Rep_Hits *Hits,
unsigned long NumRows,
MYSQL_RES *mysql_res,unsigned Field);
static void Rep_DrawBarNumHits (unsigned long HitsNum,unsigned long HitsMax,
unsigned MaxBarWidth); unsigned MaxBarWidth);
static void Rep_RemoveUsrReportsFiles (long UsrCod); static void Rep_RemoveUsrReportsFiles (long UsrCod);
@ -789,10 +798,10 @@ static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures)
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
unsigned long NumRow; unsigned long NumRow;
struct Sta_Hits Hits; struct Rep_Hits Hits;
long ActCod; long ActCod;
char ActTxt[Act_MAX_LENGTH_ACTION_TXT+1]; char ActTxt[Act_MAX_LENGTH_ACTION_TXT+1];
long NumClicks; unsigned long NumClicks;
/***** Start of section *****/ /***** Start of section *****/
fprintf (Gbl.F.Rep,"<section>" fprintf (Gbl.F.Rep,"<section>"
@ -808,7 +817,7 @@ static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures)
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get clicks"); NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get clicks");
/***** Compute maximum number of hits per action *****/ /***** Compute maximum number of hits per action *****/
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1); Rep_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1);
mysql_data_seek (mysql_res,0); mysql_data_seek (mysql_res,0);
/***** Write rows *****/ /***** Write rows *****/
@ -821,9 +830,10 @@ static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures)
/* Get the action (row[0]) */ /* Get the action (row[0]) */
ActCod = Str_ConvertStrCodToLongCod (row[0]); ActCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get number hits (in row[1]) */ /* Get number of hits (row[1]) */
Hits.Num = Str_GetFloatNumFromStr (row[1]); if (sscanf (row[1],"%lu",&Hits.Num) != 1)
NumClicks += (long) Hits.Num; Hits.Num = 0;
NumClicks += Hits.Num;
/* Draw bar proportional to number of hits */ /* Draw bar proportional to number of hits */
Rep_DrawBarNumHits (Hits.Num,Hits.Max,Rep_MAX_BAR_WIDTH); Rep_DrawBarNumHits (Hits.Num,Hits.Max,Rep_MAX_BAR_WIDTH);
@ -843,7 +853,7 @@ static void Rep_WriteSectionHitsPerAction (const struct UsrFigures *UsrFigures)
} }
/***** Draw bar for the rest of the clicks *****/ /***** Draw bar for the rest of the clicks *****/
if (UsrFigures->NumClicks > NumClicks) if ((unsigned long) UsrFigures->NumClicks > NumClicks)
fprintf (Gbl.F.Rep,"%ld&nbsp;%s<br />", fprintf (Gbl.F.Rep,"%ld&nbsp;%s<br />",
UsrFigures->NumClicks - NumClicks, UsrFigures->NumClicks - NumClicks,
Txt_Other_actions); Txt_Other_actions);
@ -1250,7 +1260,7 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
unsigned ReadYear; unsigned ReadYear;
unsigned LastYear; unsigned LastYear;
unsigned Year; unsigned Year;
struct Sta_Hits Hits; struct Rep_Hits Hits;
/***** Make the query *****/ /***** Make the query *****/
if (AnyCourse) if (AnyCourse)
@ -1284,11 +1294,11 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
/***** Set maximum number of hits per year *****/ /***** Set maximum number of hits per year *****/
if (MaxHitsPerYear) if (MaxHitsPerYear)
/* Set maximum number of hits per year from parameter */ /* Set maximum number of hits per year from parameter */
Hits.Max = (float) MaxHitsPerYear; Hits.Max = MaxHitsPerYear;
else else
{ {
/* Compute maximum number of hits per year */ /* Compute maximum number of hits per year */
Sta_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1,1); Rep_ComputeMaxAndTotalHits (&Hits,NumRows,mysql_res,1);
mysql_data_seek (mysql_res,0); mysql_data_seek (mysql_res,0);
} }
@ -1304,7 +1314,8 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
Lay_ShowErrorAndExit ("Wrong date."); Lay_ShowErrorAndExit ("Wrong date.");
/* Get number hits (in row[1]) */ /* Get number hits (in row[1]) */
Hits.Num = Str_GetFloatNumFromStr (row[1]); if (sscanf (row[1],"%lu",&Hits.Num) != 1)
Hits.Num = 0;
for (Year = LastYear; for (Year = LastYear;
Year >= ReadYear; Year >= ReadYear;
@ -1315,7 +1326,7 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
/* Draw bar proportional to number of hits */ /* Draw bar proportional to number of hits */
Rep_DrawBarNumHits (Year == LastYear ? Hits.Num : Rep_DrawBarNumHits (Year == LastYear ? Hits.Num :
0.0, 0,
Hits.Max,Rep_MAX_BAR_WIDTH); Hits.Max,Rep_MAX_BAR_WIDTH);
fprintf (Gbl.F.Rep,"<br />"); fprintf (Gbl.F.Rep,"<br />");
} }
@ -1334,25 +1345,54 @@ static void Rep_ShowMyHitsPerYear (bool AnyCourse,long CrsCod,Rol_Role_t Role,
fprintf (Gbl.F.Rep,"%04u&nbsp;",Year); fprintf (Gbl.F.Rep,"%04u&nbsp;",Year);
/* Draw bar proportional to number of hits */ /* Draw bar proportional to number of hits */
Rep_DrawBarNumHits (0.0,Hits.Max,Rep_MAX_BAR_WIDTH); Rep_DrawBarNumHits (0,Hits.Max,Rep_MAX_BAR_WIDTH);
fprintf (Gbl.F.Rep,"<br />"); fprintf (Gbl.F.Rep,"<br />");
} }
} }
/*****************************************************************************/
/*************** Compute maximum and total number of hits ********************/
/*****************************************************************************/
static void Rep_ComputeMaxAndTotalHits (struct Rep_Hits *Hits,
unsigned long NumRows,
MYSQL_RES *mysql_res,unsigned Field)
{
unsigned long NumRow;
MYSQL_ROW row;
/***** For each row... *****/
for (NumRow = 1, Hits->Max = 0;
NumRow <= NumRows;
NumRow++)
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get number of hits */
if (sscanf (row[Field],"%lu",&Hits->Num) != 1)
Hits->Num = 0;
/* Update maximum hits */
if (Hits->Num > Hits->Max)
Hits->Max = Hits->Num;
}
}
/*****************************************************************************/ /*****************************************************************************/
/********************* Draw a bar with the number of hits ********************/ /********************* Draw a bar with the number of hits ********************/
/*****************************************************************************/ /*****************************************************************************/
static void Rep_DrawBarNumHits (float HitsNum,float HitsMax, static void Rep_DrawBarNumHits (unsigned long HitsNum,unsigned long HitsMax,
unsigned MaxBarWidth) unsigned MaxBarWidth)
{ {
unsigned BarWidth; unsigned BarWidth;
unsigned i; unsigned i;
if (HitsNum != 0.0) if (HitsNum)
{ {
/***** Draw bar with a with proportional to the number of hits *****/ /***** Draw bar with a with proportional to the number of hits *****/
BarWidth = (unsigned) (((HitsNum * (float) MaxBarWidth) / HitsMax) + 0.5); BarWidth = (unsigned) ((((float) HitsNum * (float) MaxBarWidth) / (float) HitsMax) + 0.5);
if (BarWidth) if (BarWidth)
{ {
fprintf (Gbl.F.Rep,"<strong>"); fprintf (Gbl.F.Rep,"<strong>");

View File

@ -3700,10 +3700,12 @@ void Sta_ComputeMaxAndTotalHits (struct Sta_Hits *Hits,
unsigned long NumRow; unsigned long NumRow;
MYSQL_ROW row; MYSQL_ROW row;
/***** For each row... *****/
for (NumRow = 1, Hits->Max = Hits->Total = 0.0; for (NumRow = 1, Hits->Max = Hits->Total = 0.0;
NumRow <= NumRows; NumRow <= NumRows;
NumRow++) NumRow++)
{ {
/* Get row */
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/* Get number of hits */ /* Get number of hits */