mirror of https://github.com/acanas/swad-core.git
Version 16.204
This commit is contained in:
parent
d15af31fd0
commit
756ac27652
|
@ -8,6 +8,7 @@ CREATE TABLE IF NOT EXISTS IP_prefs (
|
||||||
UsrCod INT NOT NULL DEFAULT -1,
|
UsrCod INT NOT NULL DEFAULT -1,
|
||||||
LastChange DATETIME NOT NULL,
|
LastChange DATETIME NOT NULL,
|
||||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||||
|
DateFormat TINYINT NOT NULL DEFAULT 0,
|
||||||
Theme CHAR(16) NOT NULL,
|
Theme CHAR(16) NOT NULL,
|
||||||
IconSet CHAR(16) NOT NULL,
|
IconSet CHAR(16) NOT NULL,
|
||||||
Menu TINYINT NOT NULL DEFAULT 0,
|
Menu TINYINT NOT NULL DEFAULT 0,
|
||||||
|
@ -1195,6 +1196,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
IconSet CHAR(16) NOT NULL DEFAULT '',
|
IconSet CHAR(16) NOT NULL DEFAULT '',
|
||||||
Language CHAR(2) NOT NULL DEFAULT '',
|
Language CHAR(2) NOT NULL DEFAULT '',
|
||||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||||
|
DateFormat TINYINT NOT NULL DEFAULT 0,
|
||||||
Photo CHAR(43) NOT NULL DEFAULT '',
|
Photo CHAR(43) NOT NULL DEFAULT '',
|
||||||
PhotoVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',
|
PhotoVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',
|
||||||
ProfileVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',
|
ProfileVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',
|
||||||
|
@ -1222,6 +1224,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
INDEX(IconSet),
|
INDEX(IconSet),
|
||||||
INDEX(Language),
|
INDEX(Language),
|
||||||
INDEX(FirstDayOfWeek),
|
INDEX(FirstDayOfWeek),
|
||||||
|
INDEX(DateFormat),
|
||||||
INDEX(PhotoVisibility),
|
INDEX(PhotoVisibility),
|
||||||
INDEX(ProfileVisibility),
|
INDEX(ProfileVisibility),
|
||||||
INDEX(CtyCod),
|
INDEX(CtyCod),
|
||||||
|
|
|
@ -719,13 +719,15 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
||||||
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB);
|
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB);
|
||||||
sprintf (Query,"INSERT INTO usr_data"
|
sprintf (Query,"INSERT INTO usr_data"
|
||||||
" (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
" (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
||||||
"Theme,IconSet,Language,FirstDayOfWeek,PhotoVisibility,ProfileVisibility,"
|
"Theme,IconSet,Language,FirstDayOfWeek,DateFormat,"
|
||||||
|
"PhotoVisibility,ProfileVisibility,"
|
||||||
"CtyCod,"
|
"CtyCod,"
|
||||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||||
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents)"
|
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" ('%s','%s','%s','%s','%s','%s',"
|
" ('%s','%s','%s','%s','%s','%s',"
|
||||||
"'%s','%s','%s',%u,'%s','%s',"
|
"'%s','%s','%s',%u,%u,"
|
||||||
|
"'%s','%s',"
|
||||||
"%ld,"
|
"%ld,"
|
||||||
"'%s','%s','%s','%s','%s',%s,'%s',"
|
"'%s','%s','%s','%s','%s',%s,'%s',"
|
||||||
"%u,%u,-1,0)",
|
"%u,%u,-1,0)",
|
||||||
|
@ -737,6 +739,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
||||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||||
Cal_FIRST_DAY_OF_WEEK_DEFAULT,
|
Cal_FIRST_DAY_OF_WEEK_DEFAULT,
|
||||||
|
(unsigned) Dat_FORMAT_DEFAULT,
|
||||||
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
||||||
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
||||||
UsrDat->CtyCod,
|
UsrDat->CtyCod,
|
||||||
|
@ -746,8 +749,8 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
||||||
BirthdayStrDB,
|
BirthdayStrDB,
|
||||||
UsrDat->Comments ? UsrDat->Comments :
|
UsrDat->Comments ? UsrDat->Comments :
|
||||||
"",
|
"",
|
||||||
Mnu_MENU_DEFAULT,
|
(unsigned) Mnu_MENU_DEFAULT,
|
||||||
Cfg_DEFAULT_COLUMNS);
|
(unsigned) Cfg_DEFAULT_COLUMNS);
|
||||||
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (Query,"can not create user");
|
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (Query,"can not create user");
|
||||||
|
|
||||||
/* Insert user's IDs as confirmed */
|
/* Insert user's IDs as confirmed */
|
||||||
|
|
|
@ -182,6 +182,21 @@ static unsigned Cal_GetParamFirstDayOfWeek (void)
|
||||||
return FirstDayOfWeek;
|
return FirstDayOfWeek;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******************** Get first day of week from string **********************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
unsigned Cal_GetFirstDayOfWeekFromStr (const char *Str)
|
||||||
|
{
|
||||||
|
unsigned UnsignedNum;
|
||||||
|
|
||||||
|
if (sscanf (Str,"%u",&UnsignedNum) == 1)
|
||||||
|
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||||
|
return (Dat_Format_t) UnsignedNum;
|
||||||
|
|
||||||
|
return Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Draw current month ****************************/
|
/***************************** Draw current month ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -47,6 +47,7 @@ void Cal_PutIconsToSelectFirstDayOfWeek (void);
|
||||||
void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (),
|
void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (),
|
||||||
const char *ClassIcon);
|
const char *ClassIcon);
|
||||||
void Cal_ChangeFirstDayOfWeek (void);
|
void Cal_ChangeFirstDayOfWeek (void);
|
||||||
|
unsigned Cal_GetFirstDayOfWeekFromStr (const char *Str);
|
||||||
|
|
||||||
void Cal_DrawCurrentMonth (void);
|
void Cal_DrawCurrentMonth (void);
|
||||||
Act_Action_t Cal_GetActionToSeeCalendar ();
|
Act_Action_t Cal_GetActionToSeeCalendar ();
|
||||||
|
|
|
@ -233,13 +233,19 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.203 (2017-05-04)"
|
#define Log_PLATFORM_VERSION "SWAD 16.204 (2017-05-04)"
|
||||||
#define CSS_FILE "swad16.202.css"
|
#define CSS_FILE "swad16.202.css"
|
||||||
#define JS_FILE "swad16.181.js"
|
#define JS_FILE "swad16.181.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.204: May 04, 2017 Form in preferences to change date format. (218656 lines)
|
||||||
|
3 changes necessary in database:
|
||||||
|
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1638','es','N','Cambiar formato de fecha');
|
||||||
|
ALTER TABLE usr_data ADD COLUMN DateFormat TINYINT NOT NULL DEFAULT 0 AFTER FirstDayOfWeek,ADD INDEX (DateFormat);
|
||||||
|
ALTER TABLE IP_prefs ADD COLUMN DateFormat TINYINT NOT NULL DEFAULT 0 AFTER FirstDayOfWeek;
|
||||||
|
|
||||||
Version 16.203: May 04, 2017 Form in preferences to change date format. Not finished. (218447 lines)
|
Version 16.203: May 04, 2017 Form in preferences to change date format. Not finished. (218447 lines)
|
||||||
Version 16.202.2: May 03, 2017 Fixed bug in attendance events, reported by Francisco Ocaña Lara. (218306 lines)
|
Version 16.202.2: May 03, 2017 Fixed bug in attendance events, reported by Francisco Ocaña Lara. (218306 lines)
|
||||||
Version 16.202.1: May 02, 2017 Changed help on surveys from STATS to ASSESSMENT. (218296 lines)
|
Version 16.202.1: May 02, 2017 Changed help on surveys from STATS to ASSESSMENT. (218296 lines)
|
||||||
|
|
|
@ -95,18 +95,20 @@ mysql> DESCRIBE IP_prefs;
|
||||||
| UsrCod | int(11) | NO | MUL | -1 | |
|
| UsrCod | int(11) | NO | MUL | -1 | |
|
||||||
| LastChange | datetime | NO | MUL | NULL | |
|
| LastChange | datetime | NO | MUL | NULL | |
|
||||||
| FirstDayOfWeek | tinyint(4) | NO | | 0 | |
|
| FirstDayOfWeek | tinyint(4) | NO | | 0 | |
|
||||||
|
| DateFormat | tinyint(4) | NO | | 0 | |
|
||||||
| Theme | char(16) | NO | | NULL | |
|
| Theme | char(16) | NO | | NULL | |
|
||||||
| IconSet | char(16) | NO | | NULL | |
|
| IconSet | char(16) | NO | | NULL | |
|
||||||
| Menu | tinyint(4) | NO | | 0 | |
|
| Menu | tinyint(4) | NO | | 0 | |
|
||||||
| SideCols | tinyint(4) | NO | | NULL | |
|
| SideCols | tinyint(4) | NO | | NULL | |
|
||||||
+----------------+------------+------+-----+---------+-------+
|
+----------------+------------+------+-----+---------+-------+
|
||||||
8 rows in set (0.01 sec)
|
9 rows in set (0,00 sec)
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
||||||
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
||||||
"UsrCod INT NOT NULL DEFAULT -1,"
|
"UsrCod INT NOT NULL DEFAULT -1,"
|
||||||
"LastChange DATETIME NOT NULL,"
|
"LastChange DATETIME NOT NULL,"
|
||||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||||
|
"DateFormat TINYINT NOT NULL DEFAULT 0,"
|
||||||
"Theme CHAR(16) NOT NULL," // The_MAX_BYTES_THEME_ID
|
"Theme CHAR(16) NOT NULL," // The_MAX_BYTES_THEME_ID
|
||||||
"IconSet CHAR(16) NOT NULL," // Ico_MAX_BYTES_ICON_SET_ID
|
"IconSet CHAR(16) NOT NULL," // Ico_MAX_BYTES_ICON_SET_ID
|
||||||
"Menu TINYINT NOT NULL DEFAULT 0,"
|
"Menu TINYINT NOT NULL DEFAULT 0,"
|
||||||
|
@ -2532,6 +2534,7 @@ mysql> DESCRIBE usr_data;
|
||||||
| IconSet | char(16) | NO | MUL | | |
|
| IconSet | char(16) | NO | MUL | | |
|
||||||
| Language | char(2) | NO | MUL | | |
|
| Language | char(2) | NO | MUL | | |
|
||||||
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
|
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
|
||||||
|
| DateFormat | tinyint(4) | NO | MUL | 0 | |
|
||||||
| Photo | char(43) | NO | | | |
|
| Photo | char(43) | NO | | | |
|
||||||
| PhotoVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
|
| PhotoVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
|
||||||
| ProfileVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
|
| ProfileVisibility | enum('unknown','user','course','system','world') | NO | MUL | unknown | |
|
||||||
|
@ -2554,7 +2557,7 @@ mysql> DESCRIBE usr_data;
|
||||||
| NotifNtfEvents | int(11) | NO | | 0 | |
|
| NotifNtfEvents | int(11) | NO | | 0 | |
|
||||||
| EmailNtfEvents | int(11) | NO | | 0 | |
|
| EmailNtfEvents | int(11) | NO | | 0 | |
|
||||||
+-------------------+--------------------------------------------------+------+-----+---------+----------------+
|
+-------------------+--------------------------------------------------+------+-----+---------+----------------+
|
||||||
32 rows in set (0,00 sec)
|
33 rows in set (0,00 sec)
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_data ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_data ("
|
||||||
"UsrCod INT NOT NULL AUTO_INCREMENT,"
|
"UsrCod INT NOT NULL AUTO_INCREMENT,"
|
||||||
|
@ -2568,6 +2571,7 @@ mysql> DESCRIBE usr_data;
|
||||||
"IconSet CHAR(16) NOT NULL DEFAULT '',"
|
"IconSet CHAR(16) NOT NULL DEFAULT '',"
|
||||||
"Language CHAR(2) NOT NULL DEFAULT '',"
|
"Language CHAR(2) NOT NULL DEFAULT '',"
|
||||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||||
|
"DateFormat TINYINT NOT NULL DEFAULT 0,"
|
||||||
"Photo CHAR(43) NOT NULL DEFAULT ''," // Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
|
"Photo CHAR(43) NOT NULL DEFAULT ''," // Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
|
||||||
"PhotoVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',"
|
"PhotoVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',"
|
||||||
"ProfileVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',"
|
"ProfileVisibility ENUM('unknown','user','course','system','world') NOT NULL DEFAULT 'unknown',"
|
||||||
|
@ -2595,6 +2599,7 @@ mysql> DESCRIBE usr_data;
|
||||||
"INDEX(IconSet),"
|
"INDEX(IconSet),"
|
||||||
"INDEX(Language),"
|
"INDEX(Language),"
|
||||||
"INDEX(FirstDayOfWeek),"
|
"INDEX(FirstDayOfWeek),"
|
||||||
|
"INDEX(DateFormat),"
|
||||||
"INDEX(PhotoVisibility),"
|
"INDEX(PhotoVisibility),"
|
||||||
"INDEX(ProfileVisibility),"
|
"INDEX(ProfileVisibility),"
|
||||||
"INDEX(CtyCod),"
|
"INDEX(CtyCod),"
|
||||||
|
|
53
swad_date.c
53
swad_date.c
|
@ -42,6 +42,18 @@
|
||||||
|
|
||||||
extern struct Globals Gbl;
|
extern struct Globals Gbl;
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***************************** Public constants ******************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/***** Date format *****/
|
||||||
|
const char *Dat_Format_Str[Dat_NUM_OPTIONS_FORMAT] =
|
||||||
|
{
|
||||||
|
"yyyy-mm-dd", // Dat_FORMAT_YYYY_MM_DD
|
||||||
|
"dd mmm yyyy", // Dat_FORMAT_DD_MONTH_YYYY
|
||||||
|
"mmm dd, yyyy", // Dat_FORMAT_MONTH_DD_YYYY
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**************************** Private constants ******************************/
|
/**************************** Private constants ******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -76,14 +88,6 @@ const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] =
|
||||||
"DATE_BLUE_LIGHT", // Dat_FUTURE
|
"DATE_BLUE_LIGHT", // Dat_FUTURE
|
||||||
};
|
};
|
||||||
|
|
||||||
/***** Date format *****/
|
|
||||||
static const char *Dat_Format_Str[Dat_NUM_OPTIONS_FORMAT] =
|
|
||||||
{
|
|
||||||
"yyyy-mm-dd", // Dat_FORMAT_YYYY_MM_DD
|
|
||||||
"dd mmm yyyy", // Dat_FORMAT_DD_MONTH_YYYY
|
|
||||||
"mmm dd, yyyy", // Dat_FORMAT_MONTH_DD_YYYY
|
|
||||||
};
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Internal types *******************************/
|
/****************************** Internal types *******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -121,10 +125,10 @@ void Dat_PutIconsToSelectDateFormat (void)
|
||||||
fprintf (Gbl.F.Out,"<li class=\"%s\">"
|
fprintf (Gbl.F.Out,"<li class=\"%s\">"
|
||||||
"<label>"
|
"<label>"
|
||||||
"<input type=\"radio\" name=\"DateFormat\" value=\"%u\"",
|
"<input type=\"radio\" name=\"DateFormat\" value=\"%u\"",
|
||||||
(Format == Gbl.Usrs.Me.UsrDat.Prefs.DateFormat) ? "DAT_N LIGHT_BLUE" :
|
(Format == Gbl.Prefs.DateFormat) ? "DAT_N LIGHT_BLUE" :
|
||||||
"DAT",
|
"DAT",
|
||||||
(unsigned) Format);
|
(unsigned) Format);
|
||||||
if (Format == Gbl.Usrs.Me.UsrDat.Prefs.DateFormat)
|
if (Format == Gbl.Prefs.DateFormat)
|
||||||
fprintf (Gbl.F.Out," checked=\"checked\"");
|
fprintf (Gbl.F.Out," checked=\"checked\"");
|
||||||
fprintf (Gbl.F.Out," onclick=\"document.getElementById('%s').submit();\" />"
|
fprintf (Gbl.F.Out," onclick=\"document.getElementById('%s').submit();\" />"
|
||||||
"%s"
|
"%s"
|
||||||
|
@ -151,7 +155,7 @@ void Dat_PutIconsToSelectDateFormat (void)
|
||||||
static void Dat_PutIconsDateFormat (void)
|
static void Dat_PutIconsDateFormat (void)
|
||||||
{
|
{
|
||||||
/***** Put icon to show a figure *****/
|
/***** Put icon to show a figure *****/
|
||||||
Gbl.Stat.FigureType = Sta_FIRST_DAY_OF_WEEK; // TODO: Change!!!!!!!!!!!!!!
|
Gbl.Stat.FigureType = Sta_DATE_FORMAT;
|
||||||
Sta_PutIconToShowFigure ();
|
Sta_PutIconToShowFigure ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,12 +188,27 @@ void Dat_ChangeDateFormat (void)
|
||||||
/********************** Get parameter with date format ***********************/
|
/********************** Get parameter with date format ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static unsigned Dat_GetParamDateFormat (void)
|
static Dat_Format_t Dat_GetParamDateFormat (void)
|
||||||
{
|
{
|
||||||
return (unsigned) Par_GetParToUnsignedLong ("DateFormat",
|
return (Dat_Format_t) Par_GetParToUnsignedLong ("DateFormat",
|
||||||
0,
|
0L,
|
||||||
Dat_NUM_OPTIONS_FORMAT - 1,
|
(unsigned long) (Dat_NUM_OPTIONS_FORMAT - 1),
|
||||||
Dat_FORMAT_DEFAULT);
|
(unsigned long) Dat_FORMAT_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*********************** Get date format from string *************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
Dat_Format_t Dat_GetDateFormatFromStr (const char *Str)
|
||||||
|
{
|
||||||
|
unsigned UnsignedNum;
|
||||||
|
|
||||||
|
if (sscanf (Str,"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Dat_NUM_OPTIONS_FORMAT)
|
||||||
|
return (Dat_Format_t) UnsignedNum;
|
||||||
|
|
||||||
|
return Dat_FORMAT_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -106,7 +106,7 @@ typedef enum
|
||||||
Dat_FORMAT_YYYY_MM_DD = 0, // ISO 8601, default
|
Dat_FORMAT_YYYY_MM_DD = 0, // ISO 8601, default
|
||||||
Dat_FORMAT_DD_MONTH_YYYY = 1,
|
Dat_FORMAT_DD_MONTH_YYYY = 1,
|
||||||
Dat_FORMAT_MONTH_DD_YYYY = 2,
|
Dat_FORMAT_MONTH_DD_YYYY = 2,
|
||||||
} Dat_Format_t;
|
} Dat_Format_t; // Do not change these numbers because they are used in database
|
||||||
#define Dat_FORMAT_DEFAULT Dat_FORMAT_YYYY_MM_DD
|
#define Dat_FORMAT_DEFAULT Dat_FORMAT_YYYY_MM_DD
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -115,6 +115,7 @@ typedef enum
|
||||||
|
|
||||||
void Dat_PutIconsToSelectDateFormat (void);
|
void Dat_PutIconsToSelectDateFormat (void);
|
||||||
void Dat_ChangeDateFormat (void);
|
void Dat_ChangeDateFormat (void);
|
||||||
|
Dat_Format_t Dat_GetDateFormatFromStr (const char *Str);
|
||||||
|
|
||||||
void Dat_GetStartExecutionTimeUTC (void);
|
void Dat_GetStartExecutionTimeUTC (void);
|
||||||
void Dat_GetAndConvertCurrentDateTime (void);
|
void Dat_GetAndConvertCurrentDateTime (void);
|
||||||
|
|
|
@ -445,10 +445,6 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||||
|
|
||||||
void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
||||||
{
|
{
|
||||||
extern const char *The_ThemeId[The_NUM_THEMES];
|
|
||||||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
|
||||||
extern const char *Pri_VisibilityDB[Pri_NUM_OPTIONS_PRIVACY];
|
|
||||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
|
||||||
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
||||||
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1];
|
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1];
|
||||||
char Query[2048];
|
char Query[2048];
|
||||||
|
@ -465,8 +461,6 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
||||||
sprintf (Query,"UPDATE usr_data"
|
sprintf (Query,"UPDATE usr_data"
|
||||||
" SET Password='%s',"
|
" SET Password='%s',"
|
||||||
"Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s',"
|
"Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s',"
|
||||||
"Theme='%s',IconSet='%s',Language='%s',FirstDayOfWeek=%u,"
|
|
||||||
"PhotoVisibility='%s',ProfileVisibility='%s',"
|
|
||||||
"CtyCod=%ld,"
|
"CtyCod=%ld,"
|
||||||
"LocalAddress='%s',LocalPhone='%s',"
|
"LocalAddress='%s',LocalPhone='%s',"
|
||||||
"FamilyAddress='%s',FamilyPhone='%s',"
|
"FamilyAddress='%s',FamilyPhone='%s',"
|
||||||
|
@ -476,12 +470,6 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
||||||
UsrDat->Password,
|
UsrDat->Password,
|
||||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||||
Usr_StringsSexDB[UsrDat->Sex],
|
Usr_StringsSexDB[UsrDat->Sex],
|
||||||
The_ThemeId[UsrDat->Prefs.Theme],
|
|
||||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
|
||||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
|
||||||
UsrDat->Prefs.FirstDayOfWeek,
|
|
||||||
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
|
||||||
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
|
||||||
UsrDat->CtyCod,
|
UsrDat->CtyCod,
|
||||||
UsrDat->LocalAddress,UsrDat->LocalPhone,
|
UsrDat->LocalAddress,UsrDat->LocalPhone,
|
||||||
UsrDat->FamilyAddress,UsrDat->FamilyPhone,
|
UsrDat->FamilyAddress,UsrDat->FamilyPhone,
|
||||||
|
|
|
@ -127,12 +127,12 @@ void Gbl_InitializeGlobals (void)
|
||||||
|
|
||||||
Gbl.HiddenParamsInsertedIntoDB = false;
|
Gbl.HiddenParamsInsertedIntoDB = false;
|
||||||
|
|
||||||
Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language;
|
Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language;
|
||||||
Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
|
Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
|
||||||
Gbl.Prefs.DateFormat = Dat_FORMAT_DEFAULT; // Default date format
|
Gbl.Prefs.DateFormat = Dat_FORMAT_DEFAULT; // Default date format
|
||||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
|
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
|
||||||
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
|
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
|
||||||
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
||||||
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
||||||
Cfg_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
Cfg_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
||||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||||
|
|
15
swad_menu.c
15
swad_menu.c
|
@ -469,3 +469,18 @@ Mnu_Menu_t Mnu_GetParamMenu (void)
|
||||||
Mnu_NUM_MENUS - 1,
|
Mnu_NUM_MENUS - 1,
|
||||||
(unsigned long) Mnu_MENU_DEFAULT);
|
(unsigned long) Mnu_MENU_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/*************************** Get menu from string ****************************/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
Mnu_Menu_t Mnu_GetMenuFromStr (const char *Str)
|
||||||
|
{
|
||||||
|
unsigned UnsignedNum;
|
||||||
|
|
||||||
|
if (sscanf (Str,"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||||
|
return (Mnu_Menu_t) UnsignedNum;
|
||||||
|
|
||||||
|
return Mnu_MENU_DEFAULT;
|
||||||
|
}
|
||||||
|
|
|
@ -55,5 +55,6 @@ void Mnu_WriteMenuThisTab (void);
|
||||||
void Mnu_PutIconsToSelectMenu (void);
|
void Mnu_PutIconsToSelectMenu (void);
|
||||||
void Mnu_ChangeMenu (void);
|
void Mnu_ChangeMenu (void);
|
||||||
Mnu_Menu_t Mnu_GetParamMenu (void);
|
Mnu_Menu_t Mnu_GetParamMenu (void);
|
||||||
|
Mnu_Menu_t Mnu_GetMenuFromStr (const char *Str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -135,17 +135,15 @@ static void Pre_PutIconsLanguage (void)
|
||||||
|
|
||||||
void Pre_GetPrefsFromIP (void)
|
void Pre_GetPrefsFromIP (void)
|
||||||
{
|
{
|
||||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
|
||||||
char Query[1024];
|
char Query[1024];
|
||||||
unsigned long NumRows;
|
unsigned long NumRows;
|
||||||
MYSQL_RES *mysql_res;
|
MYSQL_RES *mysql_res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
unsigned UnsignedNum;
|
|
||||||
|
|
||||||
if (Gbl.IP[0])
|
if (Gbl.IP[0])
|
||||||
{
|
{
|
||||||
/***** Get preferences from database *****/
|
/***** Get preferences from database *****/
|
||||||
sprintf (Query,"SELECT FirstDayOfWeek,Theme,IconSet,Menu,SideCols"
|
sprintf (Query,"SELECT FirstDayOfWeek,DateFormat,Theme,IconSet,Menu,SideCols"
|
||||||
" FROM IP_prefs WHERE IP='%s'",
|
" FROM IP_prefs WHERE IP='%s'",
|
||||||
Gbl.IP);
|
Gbl.IP);
|
||||||
if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get preferences")))
|
if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get preferences")))
|
||||||
|
@ -157,25 +155,22 @@ void Pre_GetPrefsFromIP (void)
|
||||||
row = mysql_fetch_row (mysql_res);
|
row = mysql_fetch_row (mysql_res);
|
||||||
|
|
||||||
/* Get first day of week (row[0]) */
|
/* Get first day of week (row[0]) */
|
||||||
Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
Gbl.Prefs.FirstDayOfWeek = Cal_GetFirstDayOfWeekFromStr (row[0]);
|
||||||
if (sscanf (row[0],"%u",&UnsignedNum) == 1)
|
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
|
||||||
Gbl.Prefs.FirstDayOfWeek = UnsignedNum;
|
|
||||||
|
|
||||||
/* Get theme (row[1]) */
|
/* Get date format (row[1]) */
|
||||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[1]);
|
Gbl.Prefs.DateFormat = Dat_GetDateFormatFromStr (row[1]);
|
||||||
|
|
||||||
/* Get icon set (row[2]) */
|
/* Get theme (row[2]) */
|
||||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
Gbl.Prefs.Theme = The_GetThemeFromStr (row[2]);
|
||||||
|
|
||||||
/* Get menu (row[3]) */
|
/* Get icon set (row[3]) */
|
||||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT;
|
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[3]);
|
||||||
if (sscanf (row[3],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
|
||||||
Gbl.Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get if user wants to show side columns (row[4]) */
|
/* Get menu (row[4]) */
|
||||||
if (sscanf (row[4],"%u",&Gbl.Prefs.SideCols) == 1)
|
Gbl.Prefs.Menu = Mnu_GetMenuFromStr (row[4]);
|
||||||
|
|
||||||
|
/* Get if user wants to show side columns (row[5]) */
|
||||||
|
if (sscanf (row[5],"%u",&Gbl.Prefs.SideCols) == 1)
|
||||||
{
|
{
|
||||||
if (Gbl.Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
if (Gbl.Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
||||||
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||||
|
@ -198,11 +193,14 @@ void Pre_SetPrefsFromIP (void)
|
||||||
|
|
||||||
/***** Update preferences from current IP in database *****/
|
/***** Update preferences from current IP in database *****/
|
||||||
sprintf (Query,"REPLACE INTO IP_prefs"
|
sprintf (Query,"REPLACE INTO IP_prefs"
|
||||||
" (IP,UsrCod,LastChange,FirstDayOfWeek,Theme,IconSet,Menu,SideCols)"
|
" (IP,UsrCod,LastChange,"
|
||||||
|
"FirstDayOfWeek,DateFormat,Theme,IconSet,Menu,SideCols)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" ('%s',%ld,NOW(),%u,'%s','%s',%u,%u)",
|
" ('%s',%ld,NOW(),"
|
||||||
|
"%u,%u,'%s','%s',%u,%u)",
|
||||||
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
Gbl.Prefs.FirstDayOfWeek,
|
Gbl.Prefs.FirstDayOfWeek,
|
||||||
|
(unsigned) Gbl.Prefs.DateFormat,
|
||||||
The_ThemeId[Gbl.Prefs.Theme],
|
The_ThemeId[Gbl.Prefs.Theme],
|
||||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||||
(unsigned) Gbl.Prefs.Menu,
|
(unsigned) Gbl.Prefs.Menu,
|
||||||
|
@ -212,9 +210,12 @@ void Pre_SetPrefsFromIP (void)
|
||||||
/***** If a user is logged, update its preferences in database for all its IP's *****/
|
/***** If a user is logged, update its preferences in database for all its IP's *****/
|
||||||
if (Gbl.Usrs.Me.Logged)
|
if (Gbl.Usrs.Me.Logged)
|
||||||
{
|
{
|
||||||
sprintf (Query,"UPDATE IP_prefs SET FirstDayOfWeek=%u,Theme='%s',IconSet='%s',Menu=%u,SideCols=%u"
|
sprintf (Query,"UPDATE IP_prefs"
|
||||||
|
" SET FirstDayOfWeek=%u,DateFormat=%u,"
|
||||||
|
"Theme='%s',IconSet='%s',Menu=%u,SideCols=%u"
|
||||||
" WHERE UsrCod=%ld",
|
" WHERE UsrCod=%ld",
|
||||||
Gbl.Prefs.FirstDayOfWeek,
|
Gbl.Prefs.FirstDayOfWeek,
|
||||||
|
(unsigned) Gbl.Prefs.DateFormat,
|
||||||
The_ThemeId[Gbl.Prefs.Theme],
|
The_ThemeId[Gbl.Prefs.Theme],
|
||||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||||
(unsigned) Gbl.Prefs.Menu,
|
(unsigned) Gbl.Prefs.Menu,
|
||||||
|
|
427
swad_statistic.c
427
swad_statistic.c
|
@ -240,9 +240,10 @@ static void Sta_GetAndShowSurveysStats (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerPrivacy (void);
|
static void Sta_GetAndShowNumUsrsPerPrivacy (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,const char *FieldName);
|
static void Sta_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,const char *FieldName);
|
||||||
static void Sta_GetAndShowNumUsrsPerLanguage (void);
|
static void Sta_GetAndShowNumUsrsPerLanguage (void);
|
||||||
|
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
||||||
|
static void Sta_GetAndShowNumUsrsPerDateFormat (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerIconSet (void);
|
static void Sta_GetAndShowNumUsrsPerIconSet (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerMenu (void);
|
static void Sta_GetAndShowNumUsrsPerMenu (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
|
||||||
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerSideColumns (void);
|
static void Sta_GetAndShowNumUsrsPerSideColumns (void);
|
||||||
|
|
||||||
|
@ -4001,9 +4002,10 @@ void Sta_ShowFigures (void)
|
||||||
Sta_GetAndShowSurveysStats, // Sta_SURVEYS
|
Sta_GetAndShowSurveysStats, // Sta_SURVEYS
|
||||||
Net_ShowWebAndSocialNetworksStats, // Sta_SOCIAL_NETWORKS
|
Net_ShowWebAndSocialNetworksStats, // Sta_SOCIAL_NETWORKS
|
||||||
Sta_GetAndShowNumUsrsPerLanguage, // Sta_LANGUAGES
|
Sta_GetAndShowNumUsrsPerLanguage, // Sta_LANGUAGES
|
||||||
|
Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK
|
||||||
|
Sta_GetAndShowNumUsrsPerDateFormat, // Sta_DATE_FORMAT
|
||||||
Sta_GetAndShowNumUsrsPerIconSet, // Sta_ICON_SETS
|
Sta_GetAndShowNumUsrsPerIconSet, // Sta_ICON_SETS
|
||||||
Sta_GetAndShowNumUsrsPerMenu, // Sta_MENUS
|
Sta_GetAndShowNumUsrsPerMenu, // Sta_MENUS
|
||||||
Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK
|
|
||||||
Sta_GetAndShowNumUsrsPerTheme, // Sta_THEMES
|
Sta_GetAndShowNumUsrsPerTheme, // Sta_THEMES
|
||||||
Sta_GetAndShowNumUsrsPerSideColumns, // Sta_SIDE_COLUMNS
|
Sta_GetAndShowNumUsrsPerSideColumns, // Sta_SIDE_COLUMNS
|
||||||
Sta_GetAndShowNumUsrsPerPrivacy, // Sta_PRIVACY
|
Sta_GetAndShowNumUsrsPerPrivacy, // Sta_PRIVACY
|
||||||
|
@ -8688,6 +8690,284 @@ static void Sta_GetAndShowNumUsrsPerLanguage (void)
|
||||||
Lay_EndRoundFrameTable ();
|
Lay_EndRoundFrameTable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/***** Get and show number of users who have chosen a first day of week ******/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
|
||||||
|
{
|
||||||
|
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
||||||
|
extern const char *Hlp_STATS_Figures_calendar;
|
||||||
|
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES];
|
||||||
|
extern const char *Txt_Calendar;
|
||||||
|
extern const char *Txt_First_day_of_the_week;
|
||||||
|
extern const char *Txt_DAYS_SMALL[7];
|
||||||
|
extern const char *Txt_No_of_users;
|
||||||
|
extern const char *Txt_PERCENT_of_users;
|
||||||
|
unsigned FirstDayOfWeek;
|
||||||
|
char Query[1024];
|
||||||
|
unsigned NumUsrs[7]; // 7: seven days in a week
|
||||||
|
unsigned NumUsrsTotal = 0;
|
||||||
|
|
||||||
|
/***** Start table *****/
|
||||||
|
Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK],
|
||||||
|
NULL,Hlp_STATS_Figures_calendar,2);
|
||||||
|
|
||||||
|
/***** Heading row *****/
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<th class=\"LEFT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"<th class=\"RIGHT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"<th class=\"RIGHT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"</tr>",
|
||||||
|
Txt_Calendar,
|
||||||
|
Txt_No_of_users,
|
||||||
|
Txt_PERCENT_of_users);
|
||||||
|
|
||||||
|
/***** For each day... *****/
|
||||||
|
for (FirstDayOfWeek = 0; // Monday
|
||||||
|
FirstDayOfWeek <= 6; // Sunday
|
||||||
|
FirstDayOfWeek++)
|
||||||
|
if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek])
|
||||||
|
{
|
||||||
|
/***** Get number of users who have chosen this first day of week from database *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT COUNT(*) FROM usr_data"
|
||||||
|
" WHERE FirstDayOfWeek=%u",
|
||||||
|
(unsigned) FirstDayOfWeek);
|
||||||
|
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.FirstDayOfWeek=%u",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod,(unsigned) FirstDayOfWeek);
|
||||||
|
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.FirstDayOfWeek=%u",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod,(unsigned) FirstDayOfWeek);
|
||||||
|
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.FirstDayOfWeek=%u",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) FirstDayOfWeek);
|
||||||
|
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.FirstDayOfWeek=%u",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod,(unsigned) FirstDayOfWeek);
|
||||||
|
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.FirstDayOfWeek=%u",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) FirstDayOfWeek);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
NumUsrs[FirstDayOfWeek] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a first day of week");
|
||||||
|
|
||||||
|
/* Update total number of users */
|
||||||
|
NumUsrsTotal += NumUsrs[FirstDayOfWeek];
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Write number of users who have chosen each first day of week *****/
|
||||||
|
for (FirstDayOfWeek = 0; // Monday
|
||||||
|
FirstDayOfWeek <= 6; // Sunday
|
||||||
|
FirstDayOfWeek++)
|
||||||
|
if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek])
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td class=\"CENTER_MIDDLE\">"
|
||||||
|
"<img src=\"%s/first-day-of-week-%u-64x64.png\""
|
||||||
|
" alt=\"%s\" title=\"%s: %s\""
|
||||||
|
" class=\"ICO40x40\" />"
|
||||||
|
"</td>"
|
||||||
|
"<td class=\"DAT RIGHT_MIDDLE\">"
|
||||||
|
"%u"
|
||||||
|
"</td>"
|
||||||
|
"<td class=\"DAT RIGHT_MIDDLE\">"
|
||||||
|
"%5.2f%%"
|
||||||
|
"</td>"
|
||||||
|
"</tr>",
|
||||||
|
Gbl.Prefs.IconsURL,FirstDayOfWeek,
|
||||||
|
Txt_DAYS_SMALL[FirstDayOfWeek],
|
||||||
|
Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek],
|
||||||
|
NumUsrs[FirstDayOfWeek],
|
||||||
|
NumUsrsTotal ? (float) NumUsrs[FirstDayOfWeek] * 100.0 /
|
||||||
|
(float) NumUsrsTotal :
|
||||||
|
0);
|
||||||
|
|
||||||
|
/***** End table *****/
|
||||||
|
Lay_EndRoundFrameTable ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/******** Get and show number of users who have chosen a date format *********/
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Sta_GetAndShowNumUsrsPerDateFormat (void)
|
||||||
|
{
|
||||||
|
extern const char *Dat_Format_Str[Dat_NUM_OPTIONS_FORMAT];
|
||||||
|
extern const char *Hlp_STATS_Figures_calendar; // TODO: Change!!!!!!!!!!!!!!!!
|
||||||
|
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES];
|
||||||
|
extern const char *Txt_Format;
|
||||||
|
extern const char *Txt_No_of_users;
|
||||||
|
extern const char *Txt_PERCENT_of_users;
|
||||||
|
unsigned Format;
|
||||||
|
char Query[1024];
|
||||||
|
unsigned NumUsrs[Dat_NUM_OPTIONS_FORMAT];
|
||||||
|
unsigned NumUsrsTotal = 0;
|
||||||
|
|
||||||
|
/***** Start table *****/
|
||||||
|
Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_DATE_FORMAT],
|
||||||
|
NULL,Hlp_STATS_Figures_calendar,2); // TODO: Change!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
/***** Heading row *****/
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<th class=\"LEFT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"<th class=\"RIGHT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"<th class=\"RIGHT_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</th>"
|
||||||
|
"</tr>",
|
||||||
|
Txt_Format,
|
||||||
|
Txt_No_of_users,
|
||||||
|
Txt_PERCENT_of_users);
|
||||||
|
|
||||||
|
/***** For each format... *****/
|
||||||
|
for (Format = (Dat_Format_t) 0;
|
||||||
|
Format <= (Dat_Format_t) (Dat_NUM_OPTIONS_FORMAT - 1);
|
||||||
|
Format++)
|
||||||
|
{
|
||||||
|
/***** Get number of users who have chosen this date format from database *****/
|
||||||
|
switch (Gbl.Scope.Current)
|
||||||
|
{
|
||||||
|
case Sco_SCOPE_SYS:
|
||||||
|
sprintf (Query,"SELECT COUNT(*) FROM usr_data"
|
||||||
|
" WHERE DateFormat=%u",
|
||||||
|
(unsigned) Format);
|
||||||
|
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.DateFormat=%u",
|
||||||
|
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Format);
|
||||||
|
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.DateFormat=%u",
|
||||||
|
Gbl.CurrentIns.Ins.InsCod,(unsigned) Format);
|
||||||
|
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.DateFormat=%u",
|
||||||
|
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Format);
|
||||||
|
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.DateFormat=%u",
|
||||||
|
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Format);
|
||||||
|
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.DateFormat=%u",
|
||||||
|
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Format);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Lay_ShowErrorAndExit ("Wrong scope.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
NumUsrs[Format] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a date format");
|
||||||
|
|
||||||
|
/* Update total number of users */
|
||||||
|
NumUsrsTotal += NumUsrs[Format];
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** Write number of users who have chosen each date format *****/
|
||||||
|
for (Format = (Dat_Format_t) 0;
|
||||||
|
Format <= (Dat_Format_t) (Dat_NUM_OPTIONS_FORMAT - 1);
|
||||||
|
Format++)
|
||||||
|
fprintf (Gbl.F.Out,"<tr>"
|
||||||
|
"<td class=\"DAT_N CENTER_MIDDLE\">"
|
||||||
|
"%s"
|
||||||
|
"</td>"
|
||||||
|
"<td class=\"DAT RIGHT_MIDDLE\">"
|
||||||
|
"%u"
|
||||||
|
"</td>"
|
||||||
|
"<td class=\"DAT RIGHT_MIDDLE\">"
|
||||||
|
"%5.2f%%"
|
||||||
|
"</td>"
|
||||||
|
"</tr>",
|
||||||
|
Dat_Format_Str[Format],
|
||||||
|
NumUsrs[Format],
|
||||||
|
NumUsrsTotal ? (float) NumUsrs[Format] * 100.0 /
|
||||||
|
(float) NumUsrsTotal :
|
||||||
|
0);
|
||||||
|
|
||||||
|
/***** End table *****/
|
||||||
|
Lay_EndRoundFrameTable ();
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********* Get and show number of users who have chosen an icon set **********/
|
/********* Get and show number of users who have chosen an icon set **********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -8971,149 +9251,6 @@ static void Sta_GetAndShowNumUsrsPerMenu (void)
|
||||||
Lay_EndRoundFrameTable ();
|
Lay_EndRoundFrameTable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/***** Get and show number of users who have chosen a first day of week ******/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
|
|
||||||
{
|
|
||||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
|
||||||
extern const char *Hlp_STATS_Figures_calendar;
|
|
||||||
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES];
|
|
||||||
extern const char *Txt_Calendar;
|
|
||||||
extern const char *Txt_First_day_of_the_week;
|
|
||||||
extern const char *Txt_DAYS_SMALL[7];
|
|
||||||
extern const char *Txt_No_of_users;
|
|
||||||
extern const char *Txt_PERCENT_of_users;
|
|
||||||
unsigned FirstDayOfWeek;
|
|
||||||
char Query[1024];
|
|
||||||
unsigned NumUsrs[7]; // 7: seven days in a week
|
|
||||||
unsigned NumUsrsTotal = 0;
|
|
||||||
|
|
||||||
/***** Start table *****/
|
|
||||||
Lay_StartRoundFrameTable (NULL,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK],
|
|
||||||
NULL,Hlp_STATS_Figures_calendar,2);
|
|
||||||
|
|
||||||
/***** Heading row *****/
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<th class=\"LEFT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</th>"
|
|
||||||
"<th class=\"RIGHT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</th>"
|
|
||||||
"<th class=\"RIGHT_MIDDLE\">"
|
|
||||||
"%s"
|
|
||||||
"</th>"
|
|
||||||
"</tr>",
|
|
||||||
Txt_Calendar,
|
|
||||||
Txt_No_of_users,
|
|
||||||
Txt_PERCENT_of_users);
|
|
||||||
|
|
||||||
/***** For each day... *****/
|
|
||||||
for (FirstDayOfWeek = 0; // Monday
|
|
||||||
FirstDayOfWeek <= 6; // Sunday
|
|
||||||
FirstDayOfWeek++)
|
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek])
|
|
||||||
{
|
|
||||||
/***** Get number of users who have chosen this first day of week from database *****/
|
|
||||||
switch (Gbl.Scope.Current)
|
|
||||||
{
|
|
||||||
case Sco_SCOPE_SYS:
|
|
||||||
sprintf (Query,"SELECT COUNT(*) FROM usr_data"
|
|
||||||
" WHERE FirstDayOfWeek=%u",
|
|
||||||
(unsigned) FirstDayOfWeek);
|
|
||||||
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.FirstDayOfWeek=%u",
|
|
||||||
Gbl.CurrentCty.Cty.CtyCod,(unsigned) FirstDayOfWeek);
|
|
||||||
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.FirstDayOfWeek=%u",
|
|
||||||
Gbl.CurrentIns.Ins.InsCod,(unsigned) FirstDayOfWeek);
|
|
||||||
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.FirstDayOfWeek=%u",
|
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) FirstDayOfWeek);
|
|
||||||
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.FirstDayOfWeek=%u",
|
|
||||||
Gbl.CurrentDeg.Deg.DegCod,(unsigned) FirstDayOfWeek);
|
|
||||||
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.FirstDayOfWeek=%u",
|
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) FirstDayOfWeek);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Lay_ShowErrorAndExit ("Wrong scope.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
NumUsrs[FirstDayOfWeek] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a layout");
|
|
||||||
|
|
||||||
/* Update total number of users */
|
|
||||||
NumUsrsTotal += NumUsrs[FirstDayOfWeek];
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Write number of users who have chosen each layout *****/
|
|
||||||
for (FirstDayOfWeek = 0; // Monday
|
|
||||||
FirstDayOfWeek <= 6; // Sunday
|
|
||||||
FirstDayOfWeek++)
|
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek])
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<td class=\"CENTER_MIDDLE\">"
|
|
||||||
"<img src=\"%s/first-day-of-week-%u-64x64.png\""
|
|
||||||
" alt=\"%s\" title=\"%s: %s\""
|
|
||||||
" class=\"ICO40x40\" />"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%u"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%5.2f%%"
|
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
Gbl.Prefs.IconsURL,FirstDayOfWeek,
|
|
||||||
Txt_DAYS_SMALL[FirstDayOfWeek],
|
|
||||||
Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek],
|
|
||||||
NumUsrs[FirstDayOfWeek],
|
|
||||||
NumUsrsTotal ? (float) NumUsrs[FirstDayOfWeek] * 100.0 /
|
|
||||||
(float) NumUsrsTotal :
|
|
||||||
0);
|
|
||||||
|
|
||||||
/***** End table *****/
|
|
||||||
Lay_EndRoundFrameTable ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********** Get and show number of users who have chosen a theme *************/
|
/********** Get and show number of users who have chosen a theme *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -103,7 +103,7 @@ typedef enum
|
||||||
} Sta_ClicksGroupedBy_t;
|
} Sta_ClicksGroupedBy_t;
|
||||||
#define Sta_CLICKS_GROUPED_BY_DEFAULT Sta_CLICKS_CRS_PER_USR
|
#define Sta_CLICKS_GROUPED_BY_DEFAULT Sta_CLICKS_CRS_PER_USR
|
||||||
|
|
||||||
#define Sta_NUM_FIGURES 24
|
#define Sta_NUM_FIGURES 25
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Sta_USERS, // Number of users
|
Sta_USERS, // Number of users
|
||||||
|
@ -124,9 +124,10 @@ typedef enum
|
||||||
Sta_SURVEYS, // Number of surveys
|
Sta_SURVEYS, // Number of surveys
|
||||||
Sta_SOCIAL_NETWORKS, // Number of users in social networks
|
Sta_SOCIAL_NETWORKS, // Number of users in social networks
|
||||||
Sta_LANGUAGES, // Number of users per language
|
Sta_LANGUAGES, // Number of users per language
|
||||||
|
Sta_FIRST_DAY_OF_WEEK, // Number of users per first day of week
|
||||||
|
Sta_DATE_FORMAT, // Number of users per date format
|
||||||
Sta_ICON_SETS, // Number of users per icon set
|
Sta_ICON_SETS, // Number of users per icon set
|
||||||
Sta_MENUS, // Number of users per menu
|
Sta_MENUS, // Number of users per menu
|
||||||
Sta_FIRST_DAY_OF_WEEK, // Number of users per first day of week
|
|
||||||
Sta_THEMES, // Number of users per theme
|
Sta_THEMES, // Number of users per theme
|
||||||
Sta_SIDE_COLUMNS, // Number of users per layout of columns
|
Sta_SIDE_COLUMNS, // Number of users per layout of columns
|
||||||
Sta_PRIVACY, // Number of users per privacity
|
Sta_PRIVACY, // Number of users per privacity
|
||||||
|
|
81
swad_text.c
81
swad_text.c
|
@ -13161,6 +13161,27 @@ const char *Txt_Forgotten_password =
|
||||||
"Senha esquecida?";
|
"Senha esquecida?";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Format =
|
||||||
|
#if L==1
|
||||||
|
"Format";
|
||||||
|
#elif L==2
|
||||||
|
"Format";
|
||||||
|
#elif L==3
|
||||||
|
"Format";
|
||||||
|
#elif L==4
|
||||||
|
"Formato";
|
||||||
|
#elif L==5
|
||||||
|
"Format";
|
||||||
|
#elif L==6
|
||||||
|
"Formato"; // Okoteve traducción
|
||||||
|
#elif L==7
|
||||||
|
"Formato";
|
||||||
|
#elif L==8
|
||||||
|
"Format";
|
||||||
|
#elif L==9
|
||||||
|
"Formato";
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *Txt_Forum =
|
const char *Txt_Forum =
|
||||||
#if L==1
|
#if L==1
|
||||||
"Foro"; // Necessita traduccio
|
"Foro"; // Necessita traduccio
|
||||||
|
@ -39578,6 +39599,46 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
||||||
"Lingua"
|
"Lingua"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
|
#if L==1 // Sta_FIRST_DAY_OF_WEEK
|
||||||
|
"Calendari"
|
||||||
|
#elif L==2
|
||||||
|
"Kalender"
|
||||||
|
#elif L==3
|
||||||
|
"Calendar"
|
||||||
|
#elif L==4
|
||||||
|
"Calendario"
|
||||||
|
#elif L==5
|
||||||
|
"Calendrier"
|
||||||
|
#elif L==6
|
||||||
|
"Arapapaha"
|
||||||
|
#elif L==7
|
||||||
|
"Calendario"
|
||||||
|
#elif L==8
|
||||||
|
"Kalendarz"
|
||||||
|
#elif L==9
|
||||||
|
"Calendário"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
#if L==1 // Sta_DATE_FORMAT
|
||||||
|
"Dates"
|
||||||
|
#elif L==2
|
||||||
|
"Datum"
|
||||||
|
#elif L==3
|
||||||
|
"Dates"
|
||||||
|
#elif L==4
|
||||||
|
"Fechas"
|
||||||
|
#elif L==5
|
||||||
|
"Dates"
|
||||||
|
#elif L==6
|
||||||
|
"Arange"
|
||||||
|
#elif L==7
|
||||||
|
"Date"
|
||||||
|
#elif L==8
|
||||||
|
"Daty"
|
||||||
|
#elif L==9
|
||||||
|
"Datas"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
#if L==1 // Sta_ICON_SETS
|
#if L==1 // Sta_ICON_SETS
|
||||||
"Icones"
|
"Icones"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
|
@ -39618,26 +39679,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
||||||
"Menu"
|
"Menu"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==1 // Sta_FIRST_DAY_OF_WEEK
|
|
||||||
"Calendari"
|
|
||||||
#elif L==2
|
|
||||||
"Kalender"
|
|
||||||
#elif L==3
|
|
||||||
"Calendar"
|
|
||||||
#elif L==4
|
|
||||||
"Calendario"
|
|
||||||
#elif L==5
|
|
||||||
"Calendrier"
|
|
||||||
#elif L==6
|
|
||||||
"Arapapaha"
|
|
||||||
#elif L==7
|
|
||||||
"Calendario"
|
|
||||||
#elif L==8
|
|
||||||
"Kalendarz"
|
|
||||||
#elif L==9
|
|
||||||
"Calendário"
|
|
||||||
#endif
|
|
||||||
,
|
|
||||||
#if L==1 // Sta_THEMES
|
#if L==1 // Sta_THEMES
|
||||||
"Tema (colors)"
|
"Tema (colors)"
|
||||||
#elif L==2
|
#elif L==2
|
||||||
|
|
59
swad_user.c
59
swad_user.c
|
@ -449,7 +449,6 @@ void Usr_GetEncryptedUsrCodFromUsrCod (struct UsrData *UsrDat) // TODO: Remove t
|
||||||
|
|
||||||
void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
{
|
{
|
||||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
|
||||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||||
extern const char *The_ThemeId[The_NUM_THEMES];
|
extern const char *The_ThemeId[The_NUM_THEMES];
|
||||||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
||||||
|
@ -460,11 +459,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
The_Theme_t Theme;
|
The_Theme_t Theme;
|
||||||
Ico_IconSet_t IconSet;
|
Ico_IconSet_t IconSet;
|
||||||
Txt_Language_t Lan;
|
Txt_Language_t Lan;
|
||||||
unsigned UnsignedNum;
|
|
||||||
|
|
||||||
/***** Get user's data from database *****/
|
/***** Get user's data from database *****/
|
||||||
sprintf (Query,"SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
sprintf (Query,"SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
||||||
"Theme,IconSet,Language,FirstDayOfWeek,Photo,PhotoVisibility,ProfileVisibility,"
|
"Theme,IconSet,Language,FirstDayOfWeek,DateFormat,"
|
||||||
|
"Photo,PhotoVisibility,ProfileVisibility,"
|
||||||
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
|
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
|
||||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,"
|
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,"
|
||||||
"DATE_FORMAT(Birthday,'%%Y%%m%%d'),Comments,"
|
"DATE_FORMAT(Birthday,'%%Y%%m%%d'),Comments,"
|
||||||
|
@ -542,52 +541,49 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get first day of week */
|
/* Get first day of week */
|
||||||
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
UsrDat->Prefs.FirstDayOfWeek = Cal_GetFirstDayOfWeekFromStr (row[9]);
|
||||||
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
/* Get date format */
|
||||||
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
UsrDat->Prefs.DateFormat = Dat_GetDateFormatFromStr (row[10]);
|
||||||
|
|
||||||
/* Get rest of data */
|
/* Get rest of data */
|
||||||
Str_Copy (UsrDat->Photo,row[10],
|
Str_Copy (UsrDat->Photo,row[11],
|
||||||
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
|
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
|
||||||
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[11]);
|
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[12]);
|
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[13]);
|
||||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[13]);
|
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[15]);
|
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||||
|
|
||||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[16]);
|
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[17]);
|
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[18]);
|
||||||
Str_Copy (UsrDat->Tch.Office,row[18],
|
Str_Copy (UsrDat->Tch.Office,row[19],
|
||||||
Usr_MAX_BYTES_ADDRESS);
|
Usr_MAX_BYTES_ADDRESS);
|
||||||
Str_Copy (UsrDat->Tch.OfficePhone,row[19],
|
Str_Copy (UsrDat->Tch.OfficePhone,row[20],
|
||||||
Usr_MAX_BYTES_PHONE);
|
Usr_MAX_BYTES_PHONE);
|
||||||
|
|
||||||
Str_Copy (UsrDat->LocalAddress,row[20],
|
Str_Copy (UsrDat->LocalAddress,row[21],
|
||||||
Usr_MAX_BYTES_ADDRESS);
|
Usr_MAX_BYTES_ADDRESS);
|
||||||
Str_Copy (UsrDat->LocalPhone,row[21],
|
Str_Copy (UsrDat->LocalPhone,row[22],
|
||||||
Usr_MAX_BYTES_PHONE);
|
Usr_MAX_BYTES_PHONE);
|
||||||
Str_Copy (UsrDat->FamilyAddress,row[22],
|
Str_Copy (UsrDat->FamilyAddress,row[23],
|
||||||
Usr_MAX_BYTES_ADDRESS);
|
Usr_MAX_BYTES_ADDRESS);
|
||||||
Str_Copy (UsrDat->FamilyPhone,row[23],
|
Str_Copy (UsrDat->FamilyPhone,row[24],
|
||||||
Usr_MAX_BYTES_PHONE);
|
Usr_MAX_BYTES_PHONE);
|
||||||
Str_Copy (UsrDat->OriginPlace,row[24],
|
Str_Copy (UsrDat->OriginPlace,row[25],
|
||||||
Usr_MAX_BYTES_ADDRESS);
|
Usr_MAX_BYTES_ADDRESS);
|
||||||
|
|
||||||
Dat_GetDateFromYYYYMMDD (&(UsrDat->Birthday),row[25]);
|
Dat_GetDateFromYYYYMMDD (&(UsrDat->Birthday),row[26]);
|
||||||
|
|
||||||
Usr_GetUsrCommentsFromString (row[26] ? row[26] :
|
Usr_GetUsrCommentsFromString (row[27] ? row[27] :
|
||||||
"",
|
"",
|
||||||
UsrDat); // Get the comments comunes a todas the courses
|
UsrDat); // Get the comments comunes a todas the courses
|
||||||
|
|
||||||
/* Get menu */
|
/* Get menu */
|
||||||
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
UsrDat->Prefs.Menu = Mnu_GetMenuFromStr (row[28]);
|
||||||
if (sscanf (row[27],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
|
||||||
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get if user wants to show side columns */
|
/* Get if user wants to show side columns */
|
||||||
if (sscanf (row[28],"%u",&UsrDat->Prefs.SideCols) == 1)
|
if (sscanf (row[29],"%u",&UsrDat->Prefs.SideCols) == 1)
|
||||||
{
|
{
|
||||||
if (UsrDat->Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
if (UsrDat->Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
||||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||||
|
@ -596,11 +592,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||||
|
|
||||||
/* Get on which events I want to be notified inside the platform */
|
/* Get on which events I want to be notified inside the platform */
|
||||||
if (sscanf (row[29],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
if (sscanf (row[30],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||||
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
||||||
|
|
||||||
/* Get on which events I want to be notified by email */
|
/* Get on which events I want to be notified by email */
|
||||||
if (sscanf (row[30],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
if (sscanf (row[31],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
||||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||||
if (UsrDat->Prefs.EmailNtfEvents >= (1 << Ntf_NUM_NOTIFY_EVENTS)) // Maximum binary value for NotifyEvents is 000...0011...11
|
if (UsrDat->Prefs.EmailNtfEvents >= (1 << Ntf_NUM_NOTIFY_EVENTS)) // Maximum binary value for NotifyEvents is 000...0011...11
|
||||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||||
|
@ -2847,6 +2843,7 @@ static void Usr_SetUsrRoleAndPrefs (void)
|
||||||
|
|
||||||
/***** Set preferences from my preferences *****/
|
/***** Set preferences from my preferences *****/
|
||||||
Gbl.Prefs.FirstDayOfWeek = Gbl.Usrs.Me.UsrDat.Prefs.FirstDayOfWeek;
|
Gbl.Prefs.FirstDayOfWeek = Gbl.Usrs.Me.UsrDat.Prefs.FirstDayOfWeek;
|
||||||
|
Gbl.Prefs.DateFormat = Gbl.Usrs.Me.UsrDat.Prefs.DateFormat;
|
||||||
Gbl.Prefs.Menu = Gbl.Usrs.Me.UsrDat.Prefs.Menu;
|
Gbl.Prefs.Menu = Gbl.Usrs.Me.UsrDat.Prefs.Menu;
|
||||||
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue