diff --git a/swad_changelog.h b/swad_changelog.h
index a1b5057a0..7f5b07b32 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -143,13 +143,14 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 16.6.3 (2016-10-02)"
+#define Log_PLATFORM_VERSION "SWAD 16.7 (2016-10-02)"
#define CSS_FILE "swad15.229.css"
#define JS_FILE "swad15.238.1.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.7: Oct 02, 2016 Improvements user's usage report. (205645 lines)
Version 16.6.3: Oct 02, 2016 Current time in user's usage report. (205559 lines)
Version 16.6.2: Oct 02, 2016 Message translated. (205456 lines)
Version 16.6.1: Oct 02, 2016 Message translated. (205454 lines)
diff --git a/swad_config.h b/swad_config.h
index d7486e877..10104e049 100644
--- a/swad_config.h
+++ b/swad_config.h
@@ -51,6 +51,7 @@
#define Cfg_PLATFORM_SHORT_NAME "SWAD local"
#define Cfg_PLATFORM_FULL_NAME "SWAD (Shared Workspace At a Distance)"
#define Cfg_PLATFORM_SERVER "localhost" // Server name (main part of the URL)
+#define Cfg_URL_SWAD_SERVER "https://localhost/swad/" // With ending slash
#define Cfg_URL_SWAD_CGI "https://localhost/swad" // Without ending slash
#define Cfg_URL_SWAD_PUBLIC "https://localhost/swad" // Without ending slash
#define Cfg_PATH_CGI_BIN "/usr/lib/cgi-bin/swad" // Directory for this CGI and other commands called by it
@@ -99,6 +100,7 @@
#define Cfg_PLATFORM_SHORT_NAME "OpenSWAD"
#define Cfg_PLATFORM_FULL_NAME "OpenSWAD (Open Shared Workspace At a Distance)"
#define Cfg_PLATFORM_SERVER "openswad.org" // Server name (main part of the URL)
+#define Cfg_URL_SWAD_SERVER "https://openswad.org/" // With ending slash
#define Cfg_URL_SWAD_CGI "https://openswad.org" // Without ending slash
#define Cfg_URL_SWAD_PUBLIC "https://openswad.org/swad" // Without ending slash
#define Cfg_PATH_CGI_BIN "/var/www/cgi-bin/swad" // Directory for this CGI and other commands called by it
@@ -164,6 +166,7 @@
#define Cfg_PLATFORM_SHORT_NAME "SWAD"
#define Cfg_PLATFORM_FULL_NAME "SWAD (Shared Workspace At a Distance)"
#define Cfg_PLATFORM_SERVER "swad.ugr.es" // Server name (main part of the URL)
+#define Cfg_URL_SWAD_SERVER "https://swad.ugr.es/" // With ending slash
#define Cfg_URL_SWAD_CGI "https://swad.ugr.es" // Without ending slash
#define Cfg_URL_SWAD_PUBLIC "https://swad.ugr.es/swad" // Without ending slash
#define Cfg_PATH_CGI_BIN "/var/www/cgi-bin" // Directory for this CGI and other commands called by it
@@ -234,6 +237,7 @@
#define Cfg_PLATFORM_SHORT_NAME "SWADberry"
#define Cfg_PLATFORM_FULL_NAME "SWADberry (Shared Workspace At a Distance on a Raspberry Pi)"
#define Cfg_PLATFORM_SERVER "swadberry.ugr.es" // Server name (main part of the URL)
+#define Cfg_URL_SWAD_SERVER "https://swadberry.ugr.es/" // With ending slash
#define Cfg_URL_SWAD_CGI "https://swadberry.ugr.es" // Without ending slash
#define Cfg_URL_SWAD_PUBLIC "https://swadberry.ugr.es/swad" // Without ending slash
#define Cfg_PATH_CGI_BIN "/usr/lib/cgi-bin/swad" // Directory for this CGI and other commands called by it
diff --git a/swad_report.c b/swad_report.c
index ea4bfbd9f..4f22cc3c1 100644
--- a/swad_report.c
+++ b/swad_report.c
@@ -42,7 +42,7 @@
/***************************** Private constants *****************************/
/*****************************************************************************/
-#define Rep_MAX_BAR_WIDTH 90 // Maximum width of graphic bar
+#define Rep_MAX_BAR_WIDTH 80 // Maximum width of graphic bar
// #define Rep_BLOCK "═" // HTML code for a block in graphic bar
// #define Rep_BLOCK "▒" // HTML code for a block in graphic bar
// #define Rep_BLOCK "█" // HTML code for a block in graphic bar
@@ -120,13 +120,17 @@ void Rep_PrintMyUsageReport (void)
static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
{
- extern const char *Txt_Report_of_use_of_the_platform;
+ extern const char *Txt_Report;
+ extern const char *Txt_Report_of_use_of_PLATFORM;
+ extern const char *Txt_Teaching_platform;
+ extern const char *Txt_Name;
+ extern const char *Txt_TAGLINE;
extern const char *Txt_Personal_information;
- extern const char *Txt_User[Usr_NUM_SEXS];
extern const char *Txt_ID;
extern const char *Txt_Email;
extern const char *Txt_Country;
extern const char *Txt_Institution;
+ extern const char *Txt_URL;
extern const char *Txt_Figures;
extern const char *Txt_TIME_Since;
extern const char *Txt_TIME_until;
@@ -147,6 +151,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
extern const char *Txt_message;
extern const char *Txt_messages;
extern const char *Txt_Courses;
+ extern const char *Txt_historical_log;
extern const char *Txt_Hits;
char BrowserTimeZone[Dat_MAX_BYTES_TIME_ZONE+1];
unsigned NumID;
@@ -189,28 +194,50 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
/***** Start frame *****/
if (SeeOrPrint == Rep_SEE)
- Lay_StartRoundFrame (NULL,Txt_Report_of_use_of_the_platform,
+ Lay_StartRoundFrame (NULL,Txt_Report,
Rep_PutIconToPrintMyUsageReport);
- fprintf (Gbl.F.Out,"
");
/***** Head *****/
- fprintf (Gbl.F.Out,"
%s
",Txt_Report_of_use_of_the_platform);
- fprintf (Gbl.F.Out,"
%s",Gbl.Usrs.Me.UsrDat.FullName);
+ sprintf (Gbl.Title,Txt_Report_of_use_of_PLATFORM,Cfg_PLATFORM_SHORT_NAME);
+ fprintf (Gbl.F.Out,"
"
+ "
%s
"
+ "%s",
+ Gbl.Title,
+ Gbl.Usrs.Me.UsrDat.FullName);
if (StrCurrentDate[0])
fprintf (Gbl.F.Out,", %s",StrCurrentDate);
- fprintf (Gbl.F.Out,"
");
+ fprintf (Gbl.F.Out,""
+ "");
+
+ fprintf (Gbl.F.Out,"");
+
+ /***** Platform *****/
+ fprintf (Gbl.F.Out,"
%s
"
+ "
",
+ Txt_Teaching_platform);
+
+ /* Platform name */
+ fprintf (Gbl.F.Out,"- %s: %s, %s
",
+ Txt_Name,
+ Cfg_PLATFORM_FULL_NAME,Txt_TAGLINE);
+
+ /* Server URL */
+ fprintf (Gbl.F.Out,"- %s: %s
",
+ Txt_URL,Cfg_URL_SWAD_SERVER,Cfg_URL_SWAD_SERVER);
+
+ fprintf (Gbl.F.Out,"
");
/***** Personal information *****/
fprintf (Gbl.F.Out,"
%s
"
"
",
Txt_Personal_information);
- /***** User's name *****/
+ /* User's name */
fprintf (Gbl.F.Out,"- %s: %s
",
- Txt_User[Gbl.Usrs.Me.UsrDat.Sex],
+ Txt_Name,
Gbl.Usrs.Me.UsrDat.FullName);
- /***** User's ID *****/
+ /* User's ID */
fprintf (Gbl.F.Out,"- %s:",
Txt_ID);
for (NumID = 0;
@@ -223,18 +250,18 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
}
fprintf (Gbl.F.Out,"
");
- /***** User's e-mail *****/
+ /* User's e-mail */
fprintf (Gbl.F.Out,"- %s: %s
",
Txt_Email,
Gbl.Usrs.Me.UsrDat.Email);
- /***** User's country *****/
+ /* User's country */
Cty_GetCountryName (Gbl.Usrs.Me.UsrDat.CtyCod,CtyName);
fprintf (Gbl.F.Out,"- %s: %s
",
Txt_Country,
CtyName);
- /***** User's institution *****/
+ /* User's institution */
Ins.InsCod = Gbl.Usrs.Me.UsrDat.InsCod;
Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA);
fprintf (Gbl.F.Out,"- %s: %s
",
@@ -248,10 +275,10 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
"",
Txt_Figures);
- /***** Get figures *****/
+ /* Get figures */
Prf_GetUsrFigures (Gbl.Usrs.Me.UsrDat.UsrCod,&UsrFigures);
- /***** Time since first click until now *****/
+ /* Time since first click until now */
fprintf (Gbl.F.Out,"- %s ",Txt_TIME_Since);
if (UsrFigures.FirstClickTimeUTC)
{
@@ -282,7 +309,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
}
fprintf (Gbl.F.Out,"
");
- /***** Number of clicks *****/
+ /* Number of clicks */
fprintf (Gbl.F.Out,"- %s: ",Txt_Clicks);
if (UsrFigures.NumClicks >= 0)
{
@@ -299,7 +326,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out,"
");
- /***** Number of files currently published *****/
+ /* Number of files currently published */
if ((NumFiles = Brw_GetNumFilesUsr (Gbl.Usrs.Me.UsrDat.UsrCod)))
NumPublicFiles = Brw_GetNumPublicFilesUsr (Gbl.Usrs.Me.UsrDat.UsrCod);
else
@@ -313,7 +340,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
Txt_files,
NumPublicFiles,Txt_public_FILES);
- /***** Number of file views *****/
+ /* Number of file views */
fprintf (Gbl.F.Out,"- %s: ",Txt_Downloads);
if (UsrFigures.NumFileViews >= 0)
{
@@ -333,7 +360,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out,"
");
- /***** Number of posts in forums *****/
+ /* Number of posts in forums */
fprintf (Gbl.F.Out,"- %s: ",Txt_Forum_posts);
if (UsrFigures.NumForPst >= 0)
{
@@ -353,7 +380,7 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
fprintf (Gbl.F.Out,"?");
fprintf (Gbl.F.Out,"
");
- /***** Number of messages sent *****/
+ /* Number of messages sent */
fprintf (Gbl.F.Out,"- %s: ",Txt_Messages_sent);
if (UsrFigures.NumMsgSnt >= 0)
{
@@ -396,9 +423,9 @@ static void Rep_ShowOrPrintMyUsageReport (Rep_SeeOrPrint_t SeeOrPrint)
fprintf (Gbl.F.Out,"
");
/***** Historic courses *****/
- fprintf (Gbl.F.Out,"%s (histórico)
" // TODO: Need translation!!!
+ fprintf (Gbl.F.Out,"%s (%s)
"
"",
- Txt_Courses);
+ Txt_Courses,Txt_historical_log);
/* Number of courses in which the user clicked as student/teacher */
for (Role = Rol_STUDENT;
@@ -572,6 +599,7 @@ static void Rep_GetAndWriteHistoricCrssOfAUsr (const struct UsrData *UsrDat,Rol_
struct tm *tm_FirstClickTime,
unsigned long MaxHitsPerYear)
{
+ extern const char *Txt_Hits_as_a_USER;
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
char Query[1024];
MYSQL_RES *mysql_res;
@@ -592,7 +620,7 @@ static void Rep_GetAndWriteHistoricCrssOfAUsr (const struct UsrData *UsrDat,Rol_
if ((NumCrss = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get courses of a user")))
{
/* Heading row */
- sprintf (Gbl.Title,"Accesos como %s", // TODO: Need translation
+ sprintf (Gbl.Title,Txt_Hits_as_a_USER,
Txt_ROLES_SINGUL_abc[Role][Gbl.Usrs.Me.UsrDat.Sex]);
fprintf (Gbl.F.Out,"- %s:"
"
",
diff --git a/swad_text.c b/swad_text.c
index bdadc2e22..cb218e381 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -13972,6 +13972,27 @@ const char *Txt_Hide_right_column =
"Ocultar coluna da direita";
#endif
+const char *Txt_historical_log =
+#if L==1
+ "registre històric";
+#elif L==2
+ "historische log";
+#elif L==3
+ "historical log";
+#elif L==4
+ "registro histórico";
+#elif L==5
+ "journal historique";
+#elif L==6
+ "registro histórico"; // Okoteve traducción
+#elif L==7
+ "registro storico";
+#elif L==8
+ "dziennik historyczny";
+#elif L==9
+ "log histórico";
+#endif
+
const char *Txt_Hits = // hits = visits, clicks, page views...
#if L==1
"Accessos";
@@ -13993,6 +14014,27 @@ const char *Txt_Hits = // hits = visits, clicks, page views...
"Visitas";
#endif
+const char *Txt_Hits_as_a_USER = // hits = visits, clicks, page views... Warning: it is very important to include %s in the following sentences
+#if L==1
+ "Accessos (clics) com a %s";
+#elif L==2
+ "Anmeldungen (Klicks) als %s";
+#elif L==3
+ "Hits (clicks) as a %s";
+#elif L==4
+ "Accesos (clics) como %s";
+#elif L==5
+ "Visites (clics) en tant que %s";
+#elif L==6
+ "Accesos (clics) como %s"; // Okoteve traducción
+#elif L==7
+ "Visite (scatti) come %s";
+#elif L==8
+ "Odsłon (kliknięcia) jako %s";
+#elif L==9
+ "Visitas (cliques) como %s";
+#endif
+
const char *Txt_Holiday =
#if L==1
"Festivitat";
@@ -31006,7 +31048,7 @@ const char *Txt_Reply_message = // "Reply" as a noun, not as a verb
#elif L==9
"Mensagem de resposta";
#endif
-/*
+
const char *Txt_Report =
#if L==1
"Informe";
@@ -31027,26 +31069,26 @@ const char *Txt_Report =
#elif L==9
"Relatório";
#endif
-*/
-const char *Txt_Report_of_use_of_the_platform =
+
+const char *Txt_Report_of_use_of_PLATFORM = // Warning: it is very important to include %s in the following sentences
#if L==1
- "Informe d'ús de la plataforma";
+ "Informe d'ús de %s";
#elif L==2
- "Bericht der Nutzung der Plattform";
+ "Bericht der Nutzung der %s";
#elif L==3
- "Report of use of the platform";
+ "Report of use of %s";
#elif L==4
- "Informe de uso de la plataforma";
+ "Informe de uso de %s";
#elif L==5
- "Rapport d'utilisation de la plate-forme";
+ "Rapport d'utilisation de %s";
#elif L==6
- "Informe de uso de la plataforma"; // Okoteve traducción
+ "Informe de uso de %s"; // Okoteve traducción
#elif L==7
- "Rapporto di utilizzo della piattaforma";
+ "Rapporto di utilizzo de %s";
#elif L==8
- "Sprawozdanie z wykorzystaniem platformy";
+ "Sprawozdanie z wykorzystaniem %s";
#elif L==9
- "Relatório de utilização da plataforma";
+ "Relatório de utilização de %s";
#endif
const char *Txt_Report_possible_duplicate_user =
@@ -40857,6 +40899,27 @@ const char *Txt_teachers_files_area =
"zona de arquivos dos professores";
#endif
+const char *Txt_Teaching_platform =
+#if L==1
+ "Plataforma docent";
+#elif L==2
+ "Lernplattform ";
+#elif L==3
+ "Teaching platform";
+#elif L==4
+ "Plataforma docente";
+#elif L==5
+ "Plate-forme d'enseignement";
+#elif L==6
+ "Plataforma docente"; // Okoteve traducción
+#elif L==7
+ "Piattaforma didattica";
+#elif L==8
+ "Platforma nauczania";
+#elif L==9
+ "Plataforma de ensino";
+#endif
+
const char *Txt_Temporary_private_storage_area =
#if L==1
"Zona d'emmagatzematge privada";