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,
|
||||
LastChange DATETIME NOT NULL,
|
||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||
DateFormat TINYINT NOT NULL DEFAULT 0,
|
||||
Theme CHAR(16) NOT NULL,
|
||||
IconSet CHAR(16) NOT NULL,
|
||||
Menu TINYINT NOT NULL DEFAULT 0,
|
||||
|
@ -1195,6 +1196,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
|||
IconSet CHAR(16) NOT NULL DEFAULT '',
|
||||
Language CHAR(2) NOT NULL DEFAULT '',
|
||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||
DateFormat TINYINT NOT NULL DEFAULT 0,
|
||||
Photo CHAR(43) NOT NULL DEFAULT '',
|
||||
PhotoVisibility 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(Language),
|
||||
INDEX(FirstDayOfWeek),
|
||||
INDEX(DateFormat),
|
||||
INDEX(PhotoVisibility),
|
||||
INDEX(ProfileVisibility),
|
||||
INDEX(CtyCod),
|
||||
|
|
|
@ -719,13 +719,15 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
|||
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB);
|
||||
sprintf (Query,"INSERT INTO usr_data"
|
||||
" (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
||||
"Theme,IconSet,Language,FirstDayOfWeek,PhotoVisibility,ProfileVisibility,"
|
||||
"Theme,IconSet,Language,FirstDayOfWeek,DateFormat,"
|
||||
"PhotoVisibility,ProfileVisibility,"
|
||||
"CtyCod,"
|
||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents)"
|
||||
" VALUES"
|
||||
" ('%s','%s','%s','%s','%s','%s',"
|
||||
"'%s','%s','%s',%u,'%s','%s',"
|
||||
"'%s','%s','%s',%u,%u,"
|
||||
"'%s','%s',"
|
||||
"%ld,"
|
||||
"'%s','%s','%s','%s','%s',%s,'%s',"
|
||||
"%u,%u,-1,0)",
|
||||
|
@ -737,6 +739,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
|||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||
Cal_FIRST_DAY_OF_WEEK_DEFAULT,
|
||||
(unsigned) Dat_FORMAT_DEFAULT,
|
||||
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
||||
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
||||
UsrDat->CtyCod,
|
||||
|
@ -746,8 +749,8 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat,bool CreatingMyOwnAccount)
|
|||
BirthdayStrDB,
|
||||
UsrDat->Comments ? UsrDat->Comments :
|
||||
"",
|
||||
Mnu_MENU_DEFAULT,
|
||||
Cfg_DEFAULT_COLUMNS);
|
||||
(unsigned) Mnu_MENU_DEFAULT,
|
||||
(unsigned) Cfg_DEFAULT_COLUMNS);
|
||||
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (Query,"can not create user");
|
||||
|
||||
/* Insert user's IDs as confirmed */
|
||||
|
|
|
@ -182,6 +182,21 @@ static unsigned Cal_GetParamFirstDayOfWeek (void)
|
|||
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 ****************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -47,6 +47,7 @@ void Cal_PutIconsToSelectFirstDayOfWeek (void);
|
|||
void Cal_ShowFormToSelFirstDayOfWeek (Act_Action_t Action,void (*FuncParams) (),
|
||||
const char *ClassIcon);
|
||||
void Cal_ChangeFirstDayOfWeek (void);
|
||||
unsigned Cal_GetFirstDayOfWeekFromStr (const char *Str);
|
||||
|
||||
void Cal_DrawCurrentMonth (void);
|
||||
Act_Action_t Cal_GetActionToSeeCalendar ();
|
||||
|
|
|
@ -233,13 +233,19 @@
|
|||
/****************************** 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 JS_FILE "swad16.181.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.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.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)
|
||||
|
|
|
@ -95,18 +95,20 @@ mysql> DESCRIBE IP_prefs;
|
|||
| UsrCod | int(11) | NO | MUL | -1 | |
|
||||
| LastChange | datetime | NO | MUL | NULL | |
|
||||
| FirstDayOfWeek | tinyint(4) | NO | | 0 | |
|
||||
| DateFormat | tinyint(4) | NO | | 0 | |
|
||||
| Theme | char(16) | NO | | NULL | |
|
||||
| IconSet | char(16) | NO | | NULL | |
|
||||
| Menu | tinyint(4) | NO | | 0 | |
|
||||
| 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 ("
|
||||
"IP CHAR(15) NOT NULL," // Cns_MAX_BYTES_IP
|
||||
"UsrCod INT NOT NULL DEFAULT -1,"
|
||||
"LastChange DATETIME NOT NULL,"
|
||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||
"DateFormat TINYINT NOT NULL DEFAULT 0,"
|
||||
"Theme CHAR(16) NOT NULL," // The_MAX_BYTES_THEME_ID
|
||||
"IconSet CHAR(16) NOT NULL," // Ico_MAX_BYTES_ICON_SET_ID
|
||||
"Menu TINYINT NOT NULL DEFAULT 0,"
|
||||
|
@ -2532,6 +2534,7 @@ mysql> DESCRIBE usr_data;
|
|||
| IconSet | char(16) | NO | MUL | | |
|
||||
| Language | char(2) | NO | MUL | | |
|
||||
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
|
||||
| DateFormat | tinyint(4) | NO | MUL | 0 | |
|
||||
| Photo | char(43) | NO | | | |
|
||||
| PhotoVisibility | 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 | |
|
||||
| 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 ("
|
||||
"UsrCod INT NOT NULL AUTO_INCREMENT,"
|
||||
|
@ -2568,6 +2571,7 @@ mysql> DESCRIBE usr_data;
|
|||
"IconSet CHAR(16) NOT NULL DEFAULT '',"
|
||||
"Language CHAR(2) NOT NULL DEFAULT '',"
|
||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||
"DateFormat TINYINT NOT NULL DEFAULT 0,"
|
||||
"Photo CHAR(43) NOT NULL DEFAULT ''," // Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64
|
||||
"PhotoVisibility 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(Language),"
|
||||
"INDEX(FirstDayOfWeek),"
|
||||
"INDEX(DateFormat),"
|
||||
"INDEX(PhotoVisibility),"
|
||||
"INDEX(ProfileVisibility),"
|
||||
"INDEX(CtyCod),"
|
||||
|
|
53
swad_date.c
53
swad_date.c
|
@ -42,6 +42,18 @@
|
|||
|
||||
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 ******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -76,14 +88,6 @@ const char *Dat_TimeStatusClassHidden[Dat_NUM_TIME_STATUS] =
|
|||
"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 *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -121,10 +125,10 @@ void Dat_PutIconsToSelectDateFormat (void)
|
|||
fprintf (Gbl.F.Out,"<li class=\"%s\">"
|
||||
"<label>"
|
||||
"<input type=\"radio\" name=\"DateFormat\" value=\"%u\"",
|
||||
(Format == Gbl.Usrs.Me.UsrDat.Prefs.DateFormat) ? "DAT_N LIGHT_BLUE" :
|
||||
"DAT",
|
||||
(Format == Gbl.Prefs.DateFormat) ? "DAT_N LIGHT_BLUE" :
|
||||
"DAT",
|
||||
(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," onclick=\"document.getElementById('%s').submit();\" />"
|
||||
"%s"
|
||||
|
@ -151,7 +155,7 @@ void Dat_PutIconsToSelectDateFormat (void)
|
|||
static void Dat_PutIconsDateFormat (void)
|
||||
{
|
||||
/***** Put icon to show a figure *****/
|
||||
Gbl.Stat.FigureType = Sta_FIRST_DAY_OF_WEEK; // TODO: Change!!!!!!!!!!!!!!
|
||||
Gbl.Stat.FigureType = Sta_DATE_FORMAT;
|
||||
Sta_PutIconToShowFigure ();
|
||||
}
|
||||
|
||||
|
@ -184,12 +188,27 @@ void Dat_ChangeDateFormat (void)
|
|||
/********************** Get parameter with date format ***********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static unsigned Dat_GetParamDateFormat (void)
|
||||
static Dat_Format_t Dat_GetParamDateFormat (void)
|
||||
{
|
||||
return (unsigned) Par_GetParToUnsignedLong ("DateFormat",
|
||||
0,
|
||||
Dat_NUM_OPTIONS_FORMAT - 1,
|
||||
Dat_FORMAT_DEFAULT);
|
||||
return (Dat_Format_t) Par_GetParToUnsignedLong ("DateFormat",
|
||||
0L,
|
||||
(unsigned long) (Dat_NUM_OPTIONS_FORMAT - 1),
|
||||
(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_DD_MONTH_YYYY = 1,
|
||||
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
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -115,6 +115,7 @@ typedef enum
|
|||
|
||||
void Dat_PutIconsToSelectDateFormat (void);
|
||||
void Dat_ChangeDateFormat (void);
|
||||
Dat_Format_t Dat_GetDateFormatFromStr (const char *Str);
|
||||
|
||||
void Dat_GetStartExecutionTimeUTC (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)
|
||||
{
|
||||
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];
|
||||
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1];
|
||||
char Query[2048];
|
||||
|
@ -465,8 +461,6 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
sprintf (Query,"UPDATE usr_data"
|
||||
" SET Password='%s',"
|
||||
"Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s',"
|
||||
"Theme='%s',IconSet='%s',Language='%s',FirstDayOfWeek=%u,"
|
||||
"PhotoVisibility='%s',ProfileVisibility='%s',"
|
||||
"CtyCod=%ld,"
|
||||
"LocalAddress='%s',LocalPhone='%s',"
|
||||
"FamilyAddress='%s',FamilyPhone='%s',"
|
||||
|
@ -476,12 +470,6 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
UsrDat->Password,
|
||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||
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->LocalAddress,UsrDat->LocalPhone,
|
||||
UsrDat->FamilyAddress,UsrDat->FamilyPhone,
|
||||
|
|
|
@ -127,12 +127,12 @@ void Gbl_InitializeGlobals (void)
|
|||
|
||||
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.DateFormat = Dat_FORMAT_DEFAULT; // Default date format
|
||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
|
||||
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
|
||||
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
||||
Gbl.Prefs.DateFormat = Dat_FORMAT_DEFAULT; // Default date format
|
||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
|
||||
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
|
||||
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
||||
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
||||
Cfg_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
||||
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,
|
||||
(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_ChangeMenu (void);
|
||||
Mnu_Menu_t Mnu_GetParamMenu (void);
|
||||
Mnu_Menu_t Mnu_GetMenuFromStr (const char *Str);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -135,17 +135,15 @@ static void Pre_PutIconsLanguage (void)
|
|||
|
||||
void Pre_GetPrefsFromIP (void)
|
||||
{
|
||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
||||
char Query[1024];
|
||||
unsigned long NumRows;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned UnsignedNum;
|
||||
|
||||
if (Gbl.IP[0])
|
||||
{
|
||||
/***** 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'",
|
||||
Gbl.IP);
|
||||
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);
|
||||
|
||||
/* Get first day of week (row[0]) */
|
||||
Gbl.Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||
if (sscanf (row[0],"%u",&UnsignedNum) == 1)
|
||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||
Gbl.Prefs.FirstDayOfWeek = UnsignedNum;
|
||||
Gbl.Prefs.FirstDayOfWeek = Cal_GetFirstDayOfWeekFromStr (row[0]);
|
||||
|
||||
/* Get theme (row[1]) */
|
||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[1]);
|
||||
/* Get date format (row[1]) */
|
||||
Gbl.Prefs.DateFormat = Dat_GetDateFormatFromStr (row[1]);
|
||||
|
||||
/* Get icon set (row[2]) */
|
||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
||||
/* Get theme (row[2]) */
|
||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[2]);
|
||||
|
||||
/* Get menu (row[3]) */
|
||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||
if (sscanf (row[3],"%u",&UnsignedNum) == 1)
|
||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||
Gbl.Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||
/* Get icon set (row[3]) */
|
||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[3]);
|
||||
|
||||
/* Get if user wants to show side columns (row[4]) */
|
||||
if (sscanf (row[4],"%u",&Gbl.Prefs.SideCols) == 1)
|
||||
/* Get menu (row[4]) */
|
||||
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)
|
||||
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
@ -198,11 +193,14 @@ void Pre_SetPrefsFromIP (void)
|
|||
|
||||
/***** Update preferences from current IP in database *****/
|
||||
sprintf (Query,"REPLACE INTO IP_prefs"
|
||||
" (IP,UsrCod,LastChange,FirstDayOfWeek,Theme,IconSet,Menu,SideCols)"
|
||||
" (IP,UsrCod,LastChange,"
|
||||
"FirstDayOfWeek,DateFormat,Theme,IconSet,Menu,SideCols)"
|
||||
" 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.Prefs.FirstDayOfWeek,
|
||||
(unsigned) Gbl.Prefs.DateFormat,
|
||||
The_ThemeId[Gbl.Prefs.Theme],
|
||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||
(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 (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",
|
||||
Gbl.Prefs.FirstDayOfWeek,
|
||||
(unsigned) Gbl.Prefs.DateFormat,
|
||||
The_ThemeId[Gbl.Prefs.Theme],
|
||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||
(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_GetAndShowNumUsrsPerPrivacyForAnObject (const char *TxtObject,const char *FieldName);
|
||||
static void Sta_GetAndShowNumUsrsPerLanguage (void);
|
||||
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
||||
static void Sta_GetAndShowNumUsrsPerDateFormat (void);
|
||||
static void Sta_GetAndShowNumUsrsPerIconSet (void);
|
||||
static void Sta_GetAndShowNumUsrsPerMenu (void);
|
||||
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
||||
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
||||
static void Sta_GetAndShowNumUsrsPerSideColumns (void);
|
||||
|
||||
|
@ -4001,9 +4002,10 @@ void Sta_ShowFigures (void)
|
|||
Sta_GetAndShowSurveysStats, // Sta_SURVEYS
|
||||
Net_ShowWebAndSocialNetworksStats, // Sta_SOCIAL_NETWORKS
|
||||
Sta_GetAndShowNumUsrsPerLanguage, // Sta_LANGUAGES
|
||||
Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK
|
||||
Sta_GetAndShowNumUsrsPerDateFormat, // Sta_DATE_FORMAT
|
||||
Sta_GetAndShowNumUsrsPerIconSet, // Sta_ICON_SETS
|
||||
Sta_GetAndShowNumUsrsPerMenu, // Sta_MENUS
|
||||
Sta_GetAndShowNumUsrsPerFirstDayOfWeek, // Sta_FIRST_DAY_OF_WEEK
|
||||
Sta_GetAndShowNumUsrsPerTheme, // Sta_THEMES
|
||||
Sta_GetAndShowNumUsrsPerSideColumns, // Sta_SIDE_COLUMNS
|
||||
Sta_GetAndShowNumUsrsPerPrivacy, // Sta_PRIVACY
|
||||
|
@ -8688,6 +8690,284 @@ static void Sta_GetAndShowNumUsrsPerLanguage (void)
|
|||
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 **********/
|
||||
/*****************************************************************************/
|
||||
|
@ -8971,149 +9251,6 @@ static void Sta_GetAndShowNumUsrsPerMenu (void)
|
|||
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 *************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -103,7 +103,7 @@ typedef enum
|
|||
} Sta_ClicksGroupedBy_t;
|
||||
#define Sta_CLICKS_GROUPED_BY_DEFAULT Sta_CLICKS_CRS_PER_USR
|
||||
|
||||
#define Sta_NUM_FIGURES 24
|
||||
#define Sta_NUM_FIGURES 25
|
||||
typedef enum
|
||||
{
|
||||
Sta_USERS, // Number of users
|
||||
|
@ -124,9 +124,10 @@ typedef enum
|
|||
Sta_SURVEYS, // Number of surveys
|
||||
Sta_SOCIAL_NETWORKS, // Number of users in social networks
|
||||
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_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_SIDE_COLUMNS, // Number of users per layout of columns
|
||||
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?";
|
||||
#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 =
|
||||
#if L==1
|
||||
"Foro"; // Necessita traduccio
|
||||
|
@ -39578,6 +39599,46 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
|||
"Lingua"
|
||||
#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
|
||||
"Icones"
|
||||
#elif L==2
|
||||
|
@ -39618,26 +39679,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
|||
"Menu"
|
||||
#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
|
||||
"Tema (colors)"
|
||||
#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)
|
||||
{
|
||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
||||
extern const char *Txt_STR_LANG_ID[1 + Txt_NUM_LANGUAGES];
|
||||
extern const char *The_ThemeId[The_NUM_THEMES];
|
||||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
||||
|
@ -460,11 +459,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
The_Theme_t Theme;
|
||||
Ico_IconSet_t IconSet;
|
||||
Txt_Language_t Lan;
|
||||
unsigned UnsignedNum;
|
||||
|
||||
/***** Get user's data from database *****/
|
||||
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,"
|
||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,"
|
||||
"DATE_FORMAT(Birthday,'%%Y%%m%%d'),Comments,"
|
||||
|
@ -542,52 +541,49 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
}
|
||||
|
||||
/* Get first day of week */
|
||||
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
||||
UsrDat->Prefs.FirstDayOfWeek = Cal_GetFirstDayOfWeekFromStr (row[9]);
|
||||
|
||||
/* Get date format */
|
||||
UsrDat->Prefs.DateFormat = Dat_GetDateFormatFromStr (row[10]);
|
||||
|
||||
/* Get rest of data */
|
||||
Str_Copy (UsrDat->Photo,row[10],
|
||||
Str_Copy (UsrDat->Photo,row[11],
|
||||
Cry_BYTES_ENCRYPTED_STR_SHA256_BASE64);
|
||||
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[11]);
|
||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[13]);
|
||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[13]);
|
||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||
|
||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||
Str_Copy (UsrDat->Tch.Office,row[18],
|
||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[18]);
|
||||
Str_Copy (UsrDat->Tch.Office,row[19],
|
||||
Usr_MAX_BYTES_ADDRESS);
|
||||
Str_Copy (UsrDat->Tch.OfficePhone,row[19],
|
||||
Str_Copy (UsrDat->Tch.OfficePhone,row[20],
|
||||
Usr_MAX_BYTES_PHONE);
|
||||
|
||||
Str_Copy (UsrDat->LocalAddress,row[20],
|
||||
Str_Copy (UsrDat->LocalAddress,row[21],
|
||||
Usr_MAX_BYTES_ADDRESS);
|
||||
Str_Copy (UsrDat->LocalPhone,row[21],
|
||||
Str_Copy (UsrDat->LocalPhone,row[22],
|
||||
Usr_MAX_BYTES_PHONE);
|
||||
Str_Copy (UsrDat->FamilyAddress,row[22],
|
||||
Str_Copy (UsrDat->FamilyAddress,row[23],
|
||||
Usr_MAX_BYTES_ADDRESS);
|
||||
Str_Copy (UsrDat->FamilyPhone,row[23],
|
||||
Str_Copy (UsrDat->FamilyPhone,row[24],
|
||||
Usr_MAX_BYTES_PHONE);
|
||||
Str_Copy (UsrDat->OriginPlace,row[24],
|
||||
Str_Copy (UsrDat->OriginPlace,row[25],
|
||||
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
|
||||
|
||||
/* Get menu */
|
||||
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||
if (sscanf (row[27],"%u",&UnsignedNum) == 1)
|
||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||
UsrDat->Prefs.Menu = Mnu_GetMenuFromStr (row[28]);
|
||||
|
||||
/* 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)
|
||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
@ -596,11 +592,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
||||
/* 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
|
||||
|
||||
/* 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;
|
||||
if (UsrDat->Prefs.EmailNtfEvents >= (1 << Ntf_NUM_NOTIFY_EVENTS)) // Maximum binary value for NotifyEvents is 000...0011...11
|
||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||
|
@ -2847,6 +2843,7 @@ static void Usr_SetUsrRoleAndPrefs (void)
|
|||
|
||||
/***** Set preferences from my preferences *****/
|
||||
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.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
||||
|
||||
|
|
Loading…
Reference in New Issue