mirror of https://github.com/acanas/swad-core.git
Version 15.47
This commit is contained in:
parent
26cf9e52a1
commit
d0116b745e
|
@ -8,7 +8,6 @@ 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,
|
||||||
Layout 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,
|
||||||
|
@ -1125,7 +1124,6 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
Surname2 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,
|
Surname2 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,
|
||||||
FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,
|
FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,
|
||||||
Sex ENUM ('unknown','female','male') NOT NULL DEFAULT 'unknown',
|
Sex ENUM ('unknown','female','male') NOT NULL DEFAULT 'unknown',
|
||||||
Layout 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,
|
||||||
Language CHAR(2) NOT NULL,
|
Language CHAR(2) NOT NULL,
|
||||||
|
@ -1153,7 +1151,6 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
EmailNtfEvents INT NOT NULL DEFAULT 0,
|
EmailNtfEvents INT NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY(UsrCod),
|
PRIMARY KEY(UsrCod),
|
||||||
UNIQUE INDEX(EncryptedUsrCod),
|
UNIQUE INDEX(EncryptedUsrCod),
|
||||||
INDEX(Layout),
|
|
||||||
INDEX(Theme),
|
INDEX(Theme),
|
||||||
INDEX(IconSet),
|
INDEX(IconSet),
|
||||||
INDEX(Language),
|
INDEX(Language),
|
||||||
|
|
|
@ -434,12 +434,12 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
||||||
/***** Insert new user in database *****/
|
/***** Insert new user in database *****/
|
||||||
/* Insert user's data */
|
/* Insert user's data */
|
||||||
sprintf (Query,"INSERT INTO usr_data (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
sprintf (Query,"INSERT INTO usr_data (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
|
||||||
"Layout,Theme,IconSet,Language,FirstDayOfWeek,PhotoVisibility,ProfileVisibility,"
|
"Theme,IconSet,Language,FirstDayOfWeek,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 ('%s','%s','%s','%s','%s','%s',"
|
" VALUES ('%s','%s','%s','%s','%s','%s',"
|
||||||
"'%u','%s','%s','%s','%u','%s','%s',"
|
"'%s','%s','%s','%u','%s','%s',"
|
||||||
"'%ld',"
|
"'%ld',"
|
||||||
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
||||||
"'%u','%u','-1','0')",
|
"'%u','%u','-1','0')",
|
||||||
|
@ -447,7 +447,6 @@ void Acc_CreateNewUsr (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],
|
||||||
(unsigned) UsrDat->Prefs.Layout,
|
|
||||||
The_ThemeId[UsrDat->Prefs.Theme],
|
The_ThemeId[UsrDat->Prefs.Theme],
|
||||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||||
|
|
|
@ -1270,7 +1270,6 @@ Profile:
|
||||||
1075. ActReqEdiMyNet Request the edition of my social networks
|
1075. ActReqEdiMyNet Request the edition of my social networks
|
||||||
1076. ActChgMyNet Change my web and social networks
|
1076. ActChgMyNet Change my web and social networks
|
||||||
|
|
||||||
1077. ActChgLay Change layout
|
|
||||||
1078. ActChgThe Change theme
|
1078. ActChgThe Change theme
|
||||||
1079. ActReqChgLan Ask if change language
|
1079. ActReqChgLan Ask if change language
|
||||||
1080. ActChgLan Change language
|
1080. ActChgLan Change language
|
||||||
|
@ -2753,7 +2752,6 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
/* ActReqEdiMyNet */{1172,-1,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Net_ShowFormMyWebsAndSocialNets,NULL},
|
/* ActReqEdiMyNet */{1172,-1,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Net_ShowFormMyWebsAndSocialNets,NULL},
|
||||||
/* ActChgMyNet */{1173,-1,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Net_UpdateMyWebsAndSocialNets ,NULL},
|
/* ActChgMyNet */{1173,-1,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Net_UpdateMyWebsAndSocialNets ,NULL},
|
||||||
|
|
||||||
/* ActChgLay */{ 672,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Lay_ChangeLayout ,Pre_EditPrefs ,NULL},
|
|
||||||
/* ActChgThe */{ 841,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,The_ChangeTheme ,Pre_EditPrefs ,NULL},
|
/* ActChgThe */{ 841,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,The_ChangeTheme ,Pre_EditPrefs ,NULL},
|
||||||
/* ActReqChgLan */{ 992,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pre_AskChangeLanguage ,NULL},
|
/* ActReqChgLan */{ 992,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pre_AskChangeLanguage ,NULL},
|
||||||
/* ActChgLan */{ 654,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_ChangeLanguage ,Pre_EditPrefs ,NULL},
|
/* ActChgLan */{ 654,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_ChangeLanguage ,Pre_EditPrefs ,NULL},
|
||||||
|
@ -3467,7 +3465,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
||||||
ActHidRgtCol, // #669
|
ActHidRgtCol, // #669
|
||||||
ActShoLftCol, // #670
|
ActShoLftCol, // #670
|
||||||
ActShoRgtCol, // #671
|
ActShoRgtCol, // #671
|
||||||
ActChgLay, // #672
|
-1, // #672 (obsolete action)
|
||||||
ActEdiPrf, // #673
|
ActEdiPrf, // #673
|
||||||
ActChgCol, // #674
|
ActChgCol, // #674
|
||||||
ActSeeDpt, // #675
|
ActSeeDpt, // #675
|
||||||
|
|
|
@ -70,7 +70,7 @@ typedef enum
|
||||||
|
|
||||||
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
|
||||||
|
|
||||||
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+183+154+171+27+80)
|
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+183+154+171+27+79)
|
||||||
|
|
||||||
#define Act_MAX_ACTION_COD 1485
|
#define Act_MAX_ACTION_COD 1485
|
||||||
|
|
||||||
|
@ -1311,43 +1311,42 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
||||||
#define ActReqEdiMyNet (ActSeeAllStaCrs+44)
|
#define ActReqEdiMyNet (ActSeeAllStaCrs+44)
|
||||||
#define ActChgMyNet (ActSeeAllStaCrs+45)
|
#define ActChgMyNet (ActSeeAllStaCrs+45)
|
||||||
|
|
||||||
#define ActChgLay (ActSeeAllStaCrs+46)
|
#define ActChgThe (ActSeeAllStaCrs+46)
|
||||||
#define ActChgThe (ActSeeAllStaCrs+47)
|
#define ActReqChgLan (ActSeeAllStaCrs+47)
|
||||||
#define ActReqChgLan (ActSeeAllStaCrs+48)
|
#define ActChgLan (ActSeeAllStaCrs+48)
|
||||||
#define ActChgLan (ActSeeAllStaCrs+49)
|
#define ActChg1stDay (ActSeeAllStaCrs+49)
|
||||||
#define ActChg1stDay (ActSeeAllStaCrs+50)
|
#define ActChgCol (ActSeeAllStaCrs+50)
|
||||||
#define ActChgCol (ActSeeAllStaCrs+51)
|
#define ActHidLftCol (ActSeeAllStaCrs+51)
|
||||||
#define ActHidLftCol (ActSeeAllStaCrs+52)
|
#define ActHidRgtCol (ActSeeAllStaCrs+52)
|
||||||
#define ActHidRgtCol (ActSeeAllStaCrs+53)
|
#define ActShoLftCol (ActSeeAllStaCrs+53)
|
||||||
#define ActShoLftCol (ActSeeAllStaCrs+54)
|
#define ActShoRgtCol (ActSeeAllStaCrs+54)
|
||||||
#define ActShoRgtCol (ActSeeAllStaCrs+55)
|
#define ActChgIco (ActSeeAllStaCrs+55)
|
||||||
#define ActChgIco (ActSeeAllStaCrs+56)
|
#define ActChgMnu (ActSeeAllStaCrs+56)
|
||||||
#define ActChgMnu (ActSeeAllStaCrs+57)
|
#define ActChgNtfPrf (ActSeeAllStaCrs+57)
|
||||||
#define ActChgNtfPrf (ActSeeAllStaCrs+58)
|
|
||||||
|
|
||||||
#define ActPrnUsrQR (ActSeeAllStaCrs+59)
|
#define ActPrnUsrQR (ActSeeAllStaCrs+58)
|
||||||
|
|
||||||
#define ActPrnMyTimTbl (ActSeeAllStaCrs+60)
|
#define ActPrnMyTimTbl (ActSeeAllStaCrs+59)
|
||||||
#define ActEdiTut (ActSeeAllStaCrs+61)
|
#define ActEdiTut (ActSeeAllStaCrs+60)
|
||||||
#define ActChgTut (ActSeeAllStaCrs+62)
|
#define ActChgTut (ActSeeAllStaCrs+61)
|
||||||
#define ActReqRemFilBrf (ActSeeAllStaCrs+63)
|
#define ActReqRemFilBrf (ActSeeAllStaCrs+62)
|
||||||
#define ActRemFilBrf (ActSeeAllStaCrs+64)
|
#define ActRemFilBrf (ActSeeAllStaCrs+63)
|
||||||
#define ActRemFolBrf (ActSeeAllStaCrs+65)
|
#define ActRemFolBrf (ActSeeAllStaCrs+64)
|
||||||
#define ActCopBrf (ActSeeAllStaCrs+66)
|
#define ActCopBrf (ActSeeAllStaCrs+65)
|
||||||
#define ActPasBrf (ActSeeAllStaCrs+67)
|
#define ActPasBrf (ActSeeAllStaCrs+66)
|
||||||
#define ActRemTreBrf (ActSeeAllStaCrs+68)
|
#define ActRemTreBrf (ActSeeAllStaCrs+67)
|
||||||
#define ActFrmCreBrf (ActSeeAllStaCrs+69)
|
#define ActFrmCreBrf (ActSeeAllStaCrs+68)
|
||||||
#define ActCreFolBrf (ActSeeAllStaCrs+70)
|
#define ActCreFolBrf (ActSeeAllStaCrs+69)
|
||||||
#define ActCreLnkBrf (ActSeeAllStaCrs+71)
|
#define ActCreLnkBrf (ActSeeAllStaCrs+70)
|
||||||
#define ActRenFolBrf (ActSeeAllStaCrs+72)
|
#define ActRenFolBrf (ActSeeAllStaCrs+71)
|
||||||
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+73)
|
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+72)
|
||||||
#define ActRcvFilBrfCla (ActSeeAllStaCrs+74)
|
#define ActRcvFilBrfCla (ActSeeAllStaCrs+73)
|
||||||
#define ActExpBrf (ActSeeAllStaCrs+75)
|
#define ActExpBrf (ActSeeAllStaCrs+74)
|
||||||
#define ActConBrf (ActSeeAllStaCrs+76)
|
#define ActConBrf (ActSeeAllStaCrs+75)
|
||||||
#define ActZIPBrf (ActSeeAllStaCrs+77)
|
#define ActZIPBrf (ActSeeAllStaCrs+76)
|
||||||
#define ActReqDatBrf (ActSeeAllStaCrs+78)
|
#define ActReqDatBrf (ActSeeAllStaCrs+77)
|
||||||
#define ActChgDatBrf (ActSeeAllStaCrs+79)
|
#define ActChgDatBrf (ActSeeAllStaCrs+78)
|
||||||
#define ActDowBrf (ActSeeAllStaCrs+80)
|
#define ActDowBrf (ActSeeAllStaCrs+79)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************** Public types *******************************/
|
/******************************** Public types *******************************/
|
||||||
|
|
|
@ -115,11 +115,17 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 15.46.1 (2015/11/27)"
|
#define Log_PLATFORM_VERSION "SWAD 15.47 (2015/11/27)"
|
||||||
|
|
||||||
// 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 15.47: Nov 27, 2015 Mobile layout is removed (only 1.45% of users used it and now it is replaced by responsive design). (187426 lines)
|
||||||
|
3 changes necessary in database:
|
||||||
|
ALTER TABLE IP_prefs DROP COLUMN Layout;
|
||||||
|
ALTER TABLE usr_data DROP COLUMN Layout;
|
||||||
|
UPDATE actions SET Obsolete='Y' WHERE ActCod='672';
|
||||||
|
|
||||||
Version 15.46.1: Nov 27, 2015 Responsive design in search box (top of the page). (188094 lines)
|
Version 15.46.1: Nov 27, 2015 Responsive design in search box (top of the page). (188094 lines)
|
||||||
Version 15.46: Nov 27, 2015 First version with responsive design: both side columns are hidden when screen size is small. (188078 lines)
|
Version 15.46: Nov 27, 2015 First version with responsive design: both side columns are hidden when screen size is small. (188078 lines)
|
||||||
Version 15.45.15: Nov 25, 2015 Some CSS styles related to layout are moved to CSS file. (188021 lines)
|
Version 15.45.15: Nov 25, 2015 Some CSS styles related to layout are moved to CSS file. (188021 lines)
|
||||||
|
|
|
@ -309,9 +309,6 @@
|
||||||
/* Courses */
|
/* Courses */
|
||||||
#define Cfg_MIN_NUM_COURSES_TO_CONFIRM_SHOW_BIG_LIST 500 // If the number of courses in a list is greater than this, ask me for confirmation before showing the list
|
#define Cfg_MIN_NUM_COURSES_TO_CONFIRM_SHOW_BIG_LIST 500 // If the number of courses in a list is greater than this, ask me for confirmation before showing the list
|
||||||
|
|
||||||
/* Layout */
|
|
||||||
#define Cfg_LAYOUT_MOBILE_NUM_COLUMNS 3
|
|
||||||
|
|
||||||
/* Notifications */
|
/* Notifications */
|
||||||
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_SWAD 50
|
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_SWAD 50
|
||||||
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_WEB_SERVICE 100
|
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_WEB_SERVICE 100
|
||||||
|
|
|
@ -1130,11 +1130,6 @@ void Crs_FreeListCoursesInDegree (struct Degree *Deg)
|
||||||
void Crs_WriteSelectorMyCourses (void)
|
void Crs_WriteSelectorMyCourses (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_No_COURSE_SELECTED;
|
extern const char *Txt_No_COURSE_SELECTED;
|
||||||
static const unsigned SelectorWidth[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
175, // Lay_LAYOUT_DESKTOP
|
|
||||||
300, // Lay_LAYOUT_MOBILE
|
|
||||||
};
|
|
||||||
unsigned NumMyCrs;
|
unsigned NumMyCrs;
|
||||||
bool IBelongToCurrentCrs = false;
|
bool IBelongToCurrentCrs = false;
|
||||||
long CrsCod;
|
long CrsCod;
|
||||||
|
@ -1153,9 +1148,9 @@ void Crs_WriteSelectorMyCourses (void)
|
||||||
|
|
||||||
/***** Start of selector of courses *****/
|
/***** Start of selector of courses *****/
|
||||||
fprintf (Gbl.F.Out,"<select name=\"CrsCod\""
|
fprintf (Gbl.F.Out,"<select name=\"CrsCod\""
|
||||||
" style=\"width:%upx; margin:1px;\""
|
" style=\"width:175px; margin:1px;\""
|
||||||
" onchange=\"document.getElementById('%s').submit();\">",
|
" onchange=\"document.getElementById('%s').submit();\">",
|
||||||
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
|
Gbl.FormId);
|
||||||
|
|
||||||
if (Gbl.Usrs.Me.MyCourses.Num)
|
if (Gbl.Usrs.Me.MyCourses.Num)
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,20 +95,18 @@ 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 | |
|
||||||
| Layout | 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 | |
|
||||||
+----------------+------------+------+-----+---------+-------+
|
+----------------+------------+------+-----+---------+-------+
|
||||||
9 rows in set (0.01 sec)
|
8 rows in set (0.01 sec)
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
||||||
"IP CHAR(15) NOT NULL,"
|
"IP CHAR(15) NOT NULL,"
|
||||||
"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,"
|
||||||
"Layout 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,"
|
||||||
|
@ -2275,7 +2273,6 @@ mysql> DESCRIBE usr_data;
|
||||||
| Surname2 | varchar(32) | NO | | NULL | |
|
| Surname2 | varchar(32) | NO | | NULL | |
|
||||||
| FirstName | varchar(32) | NO | | NULL | |
|
| FirstName | varchar(32) | NO | | NULL | |
|
||||||
| Sex | enum('unknown','female','male') | NO | | unknown | |
|
| Sex | enum('unknown','female','male') | NO | | unknown | |
|
||||||
| Layout | tinyint(4) | NO | MUL | 0 | |
|
|
||||||
| Theme | char(16) | NO | MUL | NULL | |
|
| Theme | char(16) | NO | MUL | NULL | |
|
||||||
| IconSet | char(16) | NO | MUL | NULL | |
|
| IconSet | char(16) | NO | MUL | NULL | |
|
||||||
| Language | char(2) | NO | MUL | NULL | |
|
| Language | char(2) | NO | MUL | NULL | |
|
||||||
|
@ -2302,7 +2299,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 | |
|
||||||
+-------------------+----------------------------------------+------+-----+---------+----------------+
|
+-------------------+----------------------------------------+------+-----+---------+----------------+
|
||||||
33 rows in set (0.00 sec)
|
32 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,"
|
||||||
|
@ -2312,7 +2309,6 @@ mysql> DESCRIBE usr_data;
|
||||||
"Surname2 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,"
|
"Surname2 VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,"
|
||||||
"FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,"
|
"FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,"
|
||||||
"Sex ENUM ('unknown','female','male') NOT NULL DEFAULT 'unknown',"
|
"Sex ENUM ('unknown','female','male') NOT NULL DEFAULT 'unknown',"
|
||||||
"Layout 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,"
|
||||||
"Language CHAR(2) NOT NULL,"
|
"Language CHAR(2) NOT NULL,"
|
||||||
|
@ -2338,7 +2334,7 @@ mysql> DESCRIBE usr_data;
|
||||||
"SideCols TINYINT NOT NULL DEFAULT 3,"
|
"SideCols TINYINT NOT NULL DEFAULT 3,"
|
||||||
"NotifNtfEvents INT NOT NULL DEFAULT 0,"
|
"NotifNtfEvents INT NOT NULL DEFAULT 0,"
|
||||||
"EmailNtfEvents INT NOT NULL DEFAULT 0,"
|
"EmailNtfEvents INT NOT NULL DEFAULT 0,"
|
||||||
"PRIMARY KEY(UsrCod),UNIQUE INDEX(EncryptedUsrCod),INDEX(Layout),INDEX(Theme),INDEX(IconSet),INDEX(Language),INDEX(FirstDayOfWeek),INDEX(CtyCod),INDEX(InsCtyCod),INDEX(InsCod),INDEX(DptCod),INDEX(CtrCod),INDEX(Menu),INDEX(SideCols))");
|
"PRIMARY KEY(UsrCod),UNIQUE INDEX(EncryptedUsrCod),INDEX(Theme),INDEX(IconSet),INDEX(Language),INDEX(FirstDayOfWeek),INDEX(CtyCod),INDEX(InsCtyCod),INDEX(InsCod),INDEX(DptCod),INDEX(CtrCod),INDEX(Menu),INDEX(SideCols))");
|
||||||
|
|
||||||
/***** Table usr_emails *****/
|
/***** Table usr_emails *****/
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -447,14 +447,13 @@ 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',"
|
||||||
"Layout='%u',Theme='%s',IconSet='%s',Language='%s',FirstDayOfWeek='%u',PhotoVisibility='%s',ProfileVisibility='%s',"
|
"Theme='%s',IconSet='%s',Language='%s',FirstDayOfWeek='%u',PhotoVisibility='%s',ProfileVisibility='%s',"
|
||||||
"CtyCod='%ld',"
|
"CtyCod='%ld',"
|
||||||
"LocalAddress='%s',LocalPhone='%s',FamilyAddress='%s',FamilyPhone='%s',OriginPlace='%s',Birthday='%04u-%02u-%02u',Comments='%s'"
|
"LocalAddress='%s',LocalPhone='%s',FamilyAddress='%s',FamilyPhone='%s',OriginPlace='%s',Birthday='%04u-%02u-%02u',Comments='%s'"
|
||||||
" WHERE UsrCod='%ld'",
|
" WHERE UsrCod='%ld'",
|
||||||
UsrDat->Password,
|
UsrDat->Password,
|
||||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||||
Usr_StringsSexDB[UsrDat->Sex],
|
Usr_StringsSexDB[UsrDat->Sex],
|
||||||
(unsigned) UsrDat->Prefs.Layout,
|
|
||||||
The_ThemeId[UsrDat->Prefs.Theme],
|
The_ThemeId[UsrDat->Prefs.Theme],
|
||||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||||
|
|
|
@ -128,7 +128,6 @@ void Gbl_InitializeGlobals (void)
|
||||||
|
|
||||||
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.Layout = Lay_LAYOUT_DEFAULT; // Default layout
|
|
||||||
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
|
||||||
|
|
|
@ -132,7 +132,6 @@ struct Globals
|
||||||
{
|
{
|
||||||
Txt_Language_t Language;
|
Txt_Language_t Language;
|
||||||
unsigned FirstDayOfWeek;
|
unsigned FirstDayOfWeek;
|
||||||
Lay_Layout_t Layout;
|
|
||||||
Mnu_Menu_t Menu;
|
Mnu_Menu_t Menu;
|
||||||
unsigned SideCols;
|
unsigned SideCols;
|
||||||
The_Theme_t Theme;
|
The_Theme_t Theme;
|
||||||
|
|
362
swad_layout.c
362
swad_layout.c
|
@ -57,12 +57,6 @@ extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
"desktop",
|
|
||||||
"mobile",
|
|
||||||
};
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Private constants *****************************/
|
/***************************** Private constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -89,8 +83,7 @@ static void Lay_WriteScriptInit (void);
|
||||||
static void Lay_WriteScriptConnectedUsrs (void);
|
static void Lay_WriteScriptConnectedUsrs (void);
|
||||||
static void Lay_WriteScriptCustomDropzone (void);
|
static void Lay_WriteScriptCustomDropzone (void);
|
||||||
|
|
||||||
static void Lay_WritePageTopHeadingDesktop (void);
|
static void Lay_WritePageTopHeading (void);
|
||||||
static void Lay_WritePageTopHeadingMobile (void);
|
|
||||||
|
|
||||||
static void Lay_WriteTitleAction (void);
|
static void Lay_WriteTitleAction (void);
|
||||||
|
|
||||||
|
@ -127,8 +120,7 @@ void Lay_WriteStartOfPage (void)
|
||||||
|
|
||||||
/***** Compute connected users *****/
|
/***** Compute connected users *****/
|
||||||
if (Gbl.CurrentAct == ActLstCon ||
|
if (Gbl.CurrentAct == ActLstCon ||
|
||||||
(Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
((Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
||||||
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
|
||||||
Gbl.CurrentCrs.Crs.CrsCod > 0))
|
Gbl.CurrentCrs.Crs.CrsCod > 0))
|
||||||
// Right column visible && There is a course selected
|
// Right column visible && There is a course selected
|
||||||
Con_ComputeConnectedUsrsBelongingToCurrentCrs ();
|
Con_ComputeConnectedUsrsBelongingToCurrentCrs ();
|
||||||
|
@ -196,10 +188,8 @@ void Lay_WriteStartOfPage (void)
|
||||||
Gbl.Prefs.IconsURL);
|
Gbl.Prefs.IconsURL);
|
||||||
|
|
||||||
/* Style sheet for SWAD */
|
/* Style sheet for SWAD */
|
||||||
fprintf (Gbl.F.Out,"<link rel=\"StyleSheet\" href=\"%s/%s\" type=\"text/css\" />\n",
|
fprintf (Gbl.F.Out,"<link rel=\"StyleSheet\" href=\"%s/swad_desktop.css\" type=\"text/css\" />\n",
|
||||||
Cfg_HTTPS_URL_SWAD_PUBLIC,
|
Cfg_HTTPS_URL_SWAD_PUBLIC);
|
||||||
(Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP) ? "swad_desktop.css" :
|
|
||||||
"swad_mobile.css");
|
|
||||||
|
|
||||||
/* Style sheet for Dropzone.js (http://www.dropzonejs.com/) */
|
/* Style sheet for Dropzone.js (http://www.dropzonejs.com/) */
|
||||||
// The public directory dropzone must hold:
|
// The public directory dropzone must hold:
|
||||||
|
@ -265,38 +255,26 @@ void Lay_WriteStartOfPage (void)
|
||||||
fprintf (Gbl.F.Out,"<div id=\"%s\">",IdWholePage[Gbl.Prefs.Theme]);
|
fprintf (Gbl.F.Out,"<div id=\"%s\">",IdWholePage[Gbl.Prefs.Theme]);
|
||||||
|
|
||||||
/***** Header of layout *****/
|
/***** Header of layout *****/
|
||||||
switch (Gbl.Prefs.Layout)
|
Lay_WritePageTopHeading ();
|
||||||
{
|
|
||||||
case Lay_LAYOUT_DESKTOP:
|
|
||||||
Lay_WritePageTopHeadingDesktop ();
|
|
||||||
break;
|
|
||||||
case Lay_LAYOUT_MOBILE:
|
|
||||||
Lay_WritePageTopHeadingMobile ();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** 4th row: main zone *****/
|
/***** 4th row: main zone *****/
|
||||||
fprintf (Gbl.F.Out,"<div id=\"main_zone\">");
|
fprintf (Gbl.F.Out,"<div id=\"main_zone\">");
|
||||||
|
|
||||||
/* Left column */
|
/* Left column */
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) // Left column visible
|
||||||
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) // Left column visible
|
{
|
||||||
{
|
fprintf (Gbl.F.Out,"<div class=\"LEFT_COL\">");
|
||||||
fprintf (Gbl.F.Out,"<div class=\"LEFT_COL\">");
|
Lay_ShowLeftColumn ();
|
||||||
Lay_ShowLeftColumn ();
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Right column */
|
/* Right column */
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) // Right column visible
|
||||||
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) // Right column visible
|
{
|
||||||
{
|
fprintf (Gbl.F.Out,"<div class=\"RIGHT_COL\">");
|
||||||
fprintf (Gbl.F.Out,"<div class=\"RIGHT_COL\">");
|
Lay_ShowRightColumn ();
|
||||||
Lay_ShowRightColumn ();
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Central (main) part */
|
/* Central (main) part */
|
||||||
switch (Gbl.Prefs.SideCols)
|
switch (Gbl.Prefs.SideCols)
|
||||||
|
@ -317,47 +295,22 @@ void Lay_WriteStartOfPage (void)
|
||||||
fprintf (Gbl.F.Out,"<div id=\"main_zone_central_container\" class=\"%s\">"
|
fprintf (Gbl.F.Out,"<div id=\"main_zone_central_container\" class=\"%s\">"
|
||||||
"<div id=\"main_zone_central_content\">",
|
"<div id=\"main_zone_central_content\">",
|
||||||
The_TabOnBgColors[Gbl.Prefs.Theme]);
|
The_TabOnBgColors[Gbl.Prefs.Theme]);
|
||||||
switch (Gbl.Prefs.Layout)
|
|
||||||
|
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL)
|
||||||
{
|
{
|
||||||
case Lay_LAYOUT_DESKTOP:
|
/* Vertical menu (left) */
|
||||||
/* Left bar used to expand-contract central zone */
|
fprintf (Gbl.F.Out,"<div id=\"main_zone_menu_vertical\">");
|
||||||
/*
|
Mnu_WriteVerticalMenuThisTabDesktop ();
|
||||||
fprintf (Gbl.F.Out,"<div class=\"MAIN_ZONE_EXPAND\">");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
Pre_PutLeftIconToHideShowCols ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL)
|
|
||||||
{
|
|
||||||
/* Vertical menu (left) */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"main_zone_menu_vertical\">");
|
|
||||||
Mnu_WriteVerticalMenuThisTabDesktop ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Start of main zone for actions output */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"main_zone_canvas\">");
|
|
||||||
|
|
||||||
if (Gbl.Prefs.Menu == Mnu_MENU_HORIZONTAL)
|
|
||||||
/* Horizontal menu */
|
|
||||||
Mnu_WriteHorizontalMenuThisTabDesktop ();
|
|
||||||
break;
|
|
||||||
case Lay_LAYOUT_MOBILE:
|
|
||||||
/* Start of main zone for actions output */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"main_zone_canvas\">");
|
|
||||||
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
|
||||||
if (Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu < 0) // Write vertical menu
|
|
||||||
{
|
|
||||||
if (Gbl.CurrentAct == ActMnu)
|
|
||||||
Mnu_WriteMenuThisTabMobile ();
|
|
||||||
else
|
|
||||||
Tab_DrawTabsMobile ();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Start of main zone for actions output */
|
||||||
|
fprintf (Gbl.F.Out,"<div id=\"main_zone_canvas\">");
|
||||||
|
|
||||||
|
if (Gbl.Prefs.Menu == Mnu_MENU_HORIZONTAL)
|
||||||
|
/* Horizontal menu */
|
||||||
|
Mnu_WriteHorizontalMenuThisTabDesktop ();
|
||||||
|
|
||||||
/* Write warning when degree type does not allow direct login */
|
/* Write warning when degree type does not allow direct login */
|
||||||
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
||||||
|
|
||||||
|
@ -366,8 +319,7 @@ void Lay_WriteStartOfPage (void)
|
||||||
Inf_WriteMsgYouMustReadInfo ();
|
Inf_WriteMsgYouMustReadInfo ();
|
||||||
|
|
||||||
/* Write title of the current action */
|
/* Write title of the current action */
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
|
||||||
Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
|
|
||||||
Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu >= 0)
|
Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu >= 0)
|
||||||
Lay_WriteTitleAction ();
|
Lay_WriteTitleAction ();
|
||||||
|
|
||||||
|
@ -399,26 +351,13 @@ static void Lay_WriteEndOfPage (void)
|
||||||
{
|
{
|
||||||
if (!Gbl.Layout.TablEndWritten)
|
if (!Gbl.Layout.TablEndWritten)
|
||||||
{
|
{
|
||||||
Gbl.Layout.TablEndWritten = true;
|
fprintf (Gbl.F.Out,"</div>" // main_zone_canvas
|
||||||
fprintf (Gbl.F.Out,"</div>"); // main_zone_canvas
|
"</div>" // main_zone_central_content
|
||||||
|
|
||||||
/*
|
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
|
||||||
{
|
|
||||||
// Right bar used to expand-contract central zone
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"MAIN_ZONE_EXPAND\">");
|
|
||||||
Pre_PutRigthIconToHideShowCols ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</div>" // main_zone_central_content
|
|
||||||
"</div>" // main_zone_central_container
|
"</div>" // main_zone_central_container
|
||||||
"</div>" // main_zone_central
|
"</div>" // main_zone_central
|
||||||
"</div>"); // main_zone
|
"</div>" // main_zone
|
||||||
|
"</div>\n"); // whole_page_* (box that contains the whole page except the foot)
|
||||||
/***** End of box that contains the whole page except the foot *****/
|
Gbl.Layout.TablEndWritten = true;
|
||||||
fprintf (Gbl.F.Out,"</div>\n"); // whole_page_*
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,8 +453,7 @@ static void Lay_WriteScripts (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Prepare script to draw months *****/
|
/***** Prepare script to draw months *****/
|
||||||
if ((Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
if ((Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) || // Left column visible
|
||||||
(Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN)) || // Left column visible
|
|
||||||
Gbl.CurrentAct == ActSeeCal ||
|
Gbl.CurrentAct == ActSeeCal ||
|
||||||
Gbl.CurrentAct == ActPrnCal)
|
Gbl.CurrentAct == ActPrnCal)
|
||||||
{
|
{
|
||||||
|
@ -651,13 +589,11 @@ static void Lay_WriteScriptInit (void)
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n");
|
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n");
|
||||||
|
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
Dat_WriteScriptMonths ();
|
||||||
Dat_WriteScriptMonths ();
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"function init(){\n");
|
fprintf (Gbl.F.Out,"function init(){\n");
|
||||||
|
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
if ((Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)) // Right column visible
|
||||||
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)) // Right column visible
|
|
||||||
Con_WriteScriptClockConnected ();
|
Con_WriteScriptClockConnected ();
|
||||||
|
|
||||||
// Put the focus on login form
|
// Put the focus on login form
|
||||||
|
@ -720,7 +656,7 @@ static void Lay_WriteScriptCustomDropzone (void)
|
||||||
/************************ Write top heading of the page **********************/
|
/************************ Write top heading of the page **********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void Lay_WritePageTopHeadingDesktop (void)
|
static void Lay_WritePageTopHeading (void)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassHead[The_NUM_THEMES];
|
extern const char *The_ClassHead[The_NUM_THEMES];
|
||||||
const char *IdHeadRow1[The_NUM_THEMES] =
|
const char *IdHeadRow1[The_NUM_THEMES] =
|
||||||
|
@ -817,71 +753,6 @@ static void Lay_WritePageTopHeadingDesktop (void)
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Lay_WritePageTopHeadingMobile (void)
|
|
||||||
{
|
|
||||||
extern const char *The_ClassHead[The_NUM_THEMES];
|
|
||||||
const char *IdHeadRow1[The_NUM_THEMES] =
|
|
||||||
{
|
|
||||||
"head_row_1_white", // The_THEME_WHITE
|
|
||||||
"head_row_1_grey", // The_THEME_GREY
|
|
||||||
"head_row_1_blue", // The_THEME_BLUE
|
|
||||||
"head_row_1_yellow", // The_THEME_YELLOW
|
|
||||||
};
|
|
||||||
|
|
||||||
/***** 1st. row *****/
|
|
||||||
/* Start of 1st. row */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"%s\">",IdHeadRow1[Gbl.Prefs.Theme]);
|
|
||||||
|
|
||||||
/* 1st. row, 1st. column: logo */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"head_row_1_logo\" style=\"width:%upx;\">"
|
|
||||||
"<a href=\"%s\" target=\"_blank\">"
|
|
||||||
"<img src=\"%s/%s\""
|
|
||||||
" alt=\"%s\" title=\"%s\""
|
|
||||||
" class=\"CENTER_MIDDLE\""
|
|
||||||
" style=\"width:%upx; height:%upx;\" />"
|
|
||||||
"</a>"
|
|
||||||
"</div>",
|
|
||||||
Cfg_PLATFORM_LOGO_MOBILE_WIDTH,
|
|
||||||
Cfg_HTTPS_URL_SWAD_CGI,
|
|
||||||
Gbl.Prefs.IconsURL,Cfg_PLATFORM_LOGO_MOBILE_FILE,
|
|
||||||
Cfg_PLATFORM_SHORT_NAME,Cfg_PLATFORM_FULL_NAME,
|
|
||||||
Cfg_PLATFORM_LOGO_MOBILE_WIDTH,
|
|
||||||
Cfg_PLATFORM_LOGO_MOBILE_HEIGHT);
|
|
||||||
|
|
||||||
/* 1st. row, 2nd. column:
|
|
||||||
logged user / language selection */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"head_row_1_usr_lang\" class=\"%s\">",
|
|
||||||
The_ClassHead[Gbl.Prefs.Theme]);
|
|
||||||
if (Gbl.Usrs.Me.Logged)
|
|
||||||
Usr_WriteLoggedUsrHead ();
|
|
||||||
else
|
|
||||||
Pre_PutSelectorToSelectLanguage ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
|
|
||||||
/* 1st. row, 3rd. column: link to open/close session */
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"head_row_1_session\" class=\"%s\">",
|
|
||||||
The_ClassHead[Gbl.Prefs.Theme]);
|
|
||||||
if (Gbl.Usrs.Me.Logged)
|
|
||||||
Usr_PutFormLogOut ();
|
|
||||||
else
|
|
||||||
Usr_PutFormLogIn ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
|
|
||||||
/* End of 1st. row */
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
|
|
||||||
/***** 2nd. row *****/
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"head_row_2\">");
|
|
||||||
Deg_WriteCtyInsCtrDeg ();
|
|
||||||
Crs_WriteSelectorMyCourses ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
|
|
||||||
/***** 3rd. row (breadcrumb) *****/
|
|
||||||
fprintf (Gbl.F.Out,"<div id=\"head_row_3\">");
|
|
||||||
Tab_DrawBreadcrumb ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********** Write icon and title associated to the current action ***********/
|
/*********** Write icon and title associated to the current action ***********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1357,7 +1228,8 @@ void Lay_ShowErrorAndExit (const char *Message)
|
||||||
/***** End the output *****/
|
/***** End the output *****/
|
||||||
if (!Gbl.Layout.HTMLEndWritten)
|
if (!Gbl.Layout.HTMLEndWritten)
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"</body>\n</html>\n");
|
fprintf (Gbl.F.Out,"</body>\n"
|
||||||
|
"</html>\n");
|
||||||
Gbl.Layout.HTMLEndWritten = true;
|
Gbl.Layout.HTMLEndWritten = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1408,9 +1280,8 @@ void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message)
|
||||||
void Lay_RefreshNotifsAndConnected (void)
|
void Lay_RefreshNotifsAndConnected (void)
|
||||||
{
|
{
|
||||||
unsigned NumUsr;
|
unsigned NumUsr;
|
||||||
bool ShowConnected = (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
bool ShowConnected = (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
||||||
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
Gbl.CurrentCrs.Crs.CrsCod > 0; // Right column visible && There is a course selected
|
||||||
Gbl.CurrentCrs.Crs.CrsCod > 0); // Right column visible && There is a course selected
|
|
||||||
|
|
||||||
// Sometimes, someone must do this work, so who best than processes that refresh via AJAX?
|
// Sometimes, someone must do this work, so who best than processes that refresh via AJAX?
|
||||||
if (!(Gbl.PID % 11)) // Do this only one of 11 times ( 11 is prime)
|
if (!(Gbl.PID % 11)) // Do this only one of 11 times ( 11 is prime)
|
||||||
|
@ -1473,51 +1344,43 @@ void Lay_WritePageFooter (void)
|
||||||
extern const char *Txt_About_X;
|
extern const char *Txt_About_X;
|
||||||
extern const char *Txt_Questions_and_problems;
|
extern const char *Txt_Questions_and_problems;
|
||||||
|
|
||||||
switch (Gbl.Prefs.Layout)
|
Lay_WriteFootFromHTMLFile ();
|
||||||
{
|
|
||||||
case Lay_LAYOUT_DESKTOP:
|
|
||||||
Lay_WriteFootFromHTMLFile ();
|
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<div class=\"FOOT CENTER_MIDDLE\""
|
fprintf (Gbl.F.Out,"<div class=\"FOOT CENTER_MIDDLE\""
|
||||||
" style=\"padding-bottom:12px;\">");
|
" style=\"padding-bottom:12px;\">");
|
||||||
|
|
||||||
/***** Institution and centre hosting the platform *****/
|
/***** Institution and centre hosting the platform *****/
|
||||||
fprintf (Gbl.F.Out,"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">"
|
fprintf (Gbl.F.Out,"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">"
|
||||||
"<img src=\"%s/%s\""
|
"<img src=\"%s/%s\""
|
||||||
" alt=\"%s\" title=\"%s\""
|
" alt=\"%s\" title=\"%s\""
|
||||||
" style=\"width:%upx; height:%upx;\" />"
|
" style=\"width:%upx; height:%upx;\" />"
|
||||||
"<div>%s</div>"
|
"<div>%s</div>"
|
||||||
"</a>",
|
"</a>",
|
||||||
Cfg_ABOUT_URL,
|
Cfg_ABOUT_URL,
|
||||||
Gbl.Prefs.IconsURL,Cfg_ABOUT_LOGO,
|
Gbl.Prefs.IconsURL,Cfg_ABOUT_LOGO,
|
||||||
Cfg_ABOUT_NAME,Cfg_ABOUT_NAME,
|
Cfg_ABOUT_NAME,Cfg_ABOUT_NAME,
|
||||||
Cfg_ABOUT_LOGO_WIDTH,Cfg_ABOUT_LOGO_HEIGHT,
|
Cfg_ABOUT_LOGO_WIDTH,Cfg_ABOUT_LOGO_HEIGHT,
|
||||||
Cfg_ABOUT_NAME);
|
Cfg_ABOUT_NAME);
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"<div>"
|
fprintf (Gbl.F.Out,"<div>"
|
||||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">%s:</a> "
|
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">%s:</a> "
|
||||||
"<a href=\"mailto:%s\" class=\"FOOT\" target=\"_blank\">%s</a>"
|
"<a href=\"mailto:%s\" class=\"FOOT\" target=\"_blank\">%s</a>"
|
||||||
"</div>",
|
"</div>",
|
||||||
Cfg_HELP_WEB,Txt_Questions_and_problems,
|
Cfg_HELP_WEB,Txt_Questions_and_problems,
|
||||||
Cfg_PLATFORM_RESPONSIBLE_E_MAIL,Cfg_PLATFORM_RESPONSIBLE_E_MAIL);
|
Cfg_PLATFORM_RESPONSIBLE_E_MAIL,Cfg_PLATFORM_RESPONSIBLE_E_MAIL);
|
||||||
|
|
||||||
/***** About *****/
|
/***** About *****/
|
||||||
fprintf (Gbl.F.Out,"<div>"
|
fprintf (Gbl.F.Out,"<div>"
|
||||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">",
|
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">",
|
||||||
Cfg_ABOUT_SWAD_URL);
|
Cfg_ABOUT_SWAD_URL);
|
||||||
fprintf (Gbl.F.Out,Txt_About_X,Log_PLATFORM_VERSION);
|
fprintf (Gbl.F.Out,Txt_About_X,Log_PLATFORM_VERSION);
|
||||||
fprintf (Gbl.F.Out,"</a> ");
|
fprintf (Gbl.F.Out,"</a> ");
|
||||||
|
|
||||||
/***** Write time to generate and send page *****/
|
/***** Write time to generate and send page *****/
|
||||||
Sta_WriteTimeToGenerateAndSendPage ();
|
Sta_WriteTimeToGenerateAndSendPage ();
|
||||||
|
|
||||||
fprintf (Gbl.F.Out,"</div>"
|
fprintf (Gbl.F.Out,"</div>"
|
||||||
"</div>");
|
"</div>");
|
||||||
break;
|
|
||||||
case Lay_LAYOUT_MOBILE:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -1637,81 +1500,6 @@ void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingC
|
||||||
"</tr>");
|
"</tr>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************************ Put icons to select a layout ***********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Lay_PutIconsToSelectLayout (void)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Layout;
|
|
||||||
extern const char *Txt_LAYOUT_NAMES[Lay_NUM_LAYOUTS];
|
|
||||||
Lay_Layout_t Layout;
|
|
||||||
|
|
||||||
Lay_StartRoundFrameTable (NULL,2,Txt_Layout);
|
|
||||||
fprintf (Gbl.F.Out,"<tr>");
|
|
||||||
for (Layout = (Lay_Layout_t) 0;
|
|
||||||
Layout < Lay_NUM_LAYOUTS;
|
|
||||||
Layout++)
|
|
||||||
{
|
|
||||||
fprintf (Gbl.F.Out,"<td class=\"%s CENTER_MIDDLE\">",
|
|
||||||
Layout == Gbl.Prefs.Layout ? "PREF_ON" :
|
|
||||||
"PREF_OFF");
|
|
||||||
Act_FormStart (ActChgLay);
|
|
||||||
Par_PutHiddenParamUnsigned ("Layout",(unsigned) Layout);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/%s32x32.gif\""
|
|
||||||
" alt=\"%s\" title=\"%s\" class=\"ICON32x32B\""
|
|
||||||
" style=\"margin:0 auto;\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Lay_LayoutIcons[Layout],
|
|
||||||
Txt_LAYOUT_NAMES[Layout],
|
|
||||||
Txt_LAYOUT_NAMES[Layout]);
|
|
||||||
Act_FormEnd ();
|
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
|
||||||
}
|
|
||||||
fprintf (Gbl.F.Out,"</tr>");
|
|
||||||
Lay_EndRoundFrameTableWithButton (Lay_NO_BUTTON,NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/******************************** Change layout ******************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Lay_ChangeLayout (void)
|
|
||||||
{
|
|
||||||
char Query[512];
|
|
||||||
|
|
||||||
/***** Get param layout *****/
|
|
||||||
Gbl.Prefs.Layout = Lay_GetParamLayout ();
|
|
||||||
|
|
||||||
/***** Store layout in database *****/
|
|
||||||
if (Gbl.Usrs.Me.Logged)
|
|
||||||
{
|
|
||||||
sprintf (Query,"UPDATE usr_data SET Layout='%u' WHERE UsrCod='%ld'",
|
|
||||||
(unsigned) Gbl.Prefs.Layout,Gbl.Usrs.Me.UsrDat.UsrCod);
|
|
||||||
DB_QueryUPDATE (Query,"can not update your preference about layout");
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Set preferences from current IP *****/
|
|
||||||
Pre_SetPrefsFromIP ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**************************** Get parameter layout ***************************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
Lay_Layout_t Lay_GetParamLayout (void)
|
|
||||||
{
|
|
||||||
char UnsignedStr[1+10+1];
|
|
||||||
unsigned UnsignedNum;
|
|
||||||
|
|
||||||
Par_GetParToText ("Layout",UnsignedStr,1+10);
|
|
||||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Lay_NUM_LAYOUTS)
|
|
||||||
return (Lay_Layout_t) UnsignedNum;
|
|
||||||
|
|
||||||
return Lay_LAYOUT_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**************** Show advertisement about mobile version ********************/
|
/**************** Show advertisement about mobile version ********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -56,16 +56,6 @@ typedef enum
|
||||||
Lay_ERROR = 3,
|
Lay_ERROR = 3,
|
||||||
} Lay_AlertType_t;
|
} Lay_AlertType_t;
|
||||||
|
|
||||||
#define Lay_NUM_LAYOUTS 2
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
Lay_LAYOUT_DESKTOP = 0,
|
|
||||||
Lay_LAYOUT_MOBILE = 1,
|
|
||||||
Lay_LAYOUT_UNKNOWN = 2,
|
|
||||||
} Lay_Layout_t; // Stored in database. Don't change numbers!
|
|
||||||
|
|
||||||
#define Lay_LAYOUT_DEFAULT Lay_LAYOUT_DESKTOP
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Lay_NO_BUTTON,
|
Lay_NO_BUTTON,
|
||||||
|
@ -115,11 +105,6 @@ void Lay_WritePageFooter (void);
|
||||||
void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto,
|
void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto,
|
||||||
long InsCod,long DegCod,long CrsCod);
|
long InsCod,long DegCod,long CrsCod);
|
||||||
|
|
||||||
void Lay_PutIconsToSelectLayout (void);
|
|
||||||
void Lay_ChangeLayout (void);
|
|
||||||
Lay_Layout_t Lay_GetParamLayout (void);
|
|
||||||
Lay_Layout_t Lay_GetLayoutFromStr (const char *Str);
|
|
||||||
|
|
||||||
void Lay_AdvertisementMobile (void);
|
void Lay_AdvertisementMobile (void);
|
||||||
|
|
||||||
void Lay_IndentDependingOnLevel (unsigned Level,bool IsLastItemInLevel[]);
|
void Lay_IndentDependingOnLevel (unsigned Level,bool IsLastItemInLevel[]);
|
||||||
|
|
65
swad_menu.c
65
swad_menu.c
|
@ -235,71 +235,6 @@ void Mnu_WriteHorizontalMenuThisTabDesktop (void)
|
||||||
"</div>");
|
"</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************* Write the menu of current tab (mobile layout) *****************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Mnu_WriteMenuThisTabMobile (void)
|
|
||||||
{
|
|
||||||
extern const char *The_ClassMenuOn[The_NUM_THEMES];
|
|
||||||
extern const char *The_ClassMenuOff[The_NUM_THEMES];
|
|
||||||
extern const struct Act_Menu Act_Menu[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB];
|
|
||||||
extern const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB];
|
|
||||||
unsigned NumOptInMenu;
|
|
||||||
unsigned NumOptVisible; // Only options I can see
|
|
||||||
Act_Action_t NumAct;
|
|
||||||
const char *Title;
|
|
||||||
|
|
||||||
/***** Table start *****/
|
|
||||||
fprintf (Gbl.F.Out,"<table style=\"width:100%%;\">");
|
|
||||||
|
|
||||||
/***** Loop to write all options in menu. Each row holds an option *****/
|
|
||||||
for (NumOptInMenu = NumOptVisible = 0;
|
|
||||||
NumOptInMenu < Act_MAX_OPTIONS_IN_MENU_PER_TAB;
|
|
||||||
NumOptInMenu++)
|
|
||||||
{
|
|
||||||
if ((NumAct = Act_Menu[Gbl.CurrentTab][NumOptInMenu].Action) == 0) // At the end of each tab, actions are initialized to 0, so 0 marks the end of the menu
|
|
||||||
break;
|
|
||||||
if (Act_CheckIfIHavePermissionToExecuteAction (NumAct))
|
|
||||||
{
|
|
||||||
Title = Act_GetSubtitleAction (NumAct);
|
|
||||||
|
|
||||||
if (NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS == 0)
|
|
||||||
fprintf (Gbl.F.Out,"<tr>");
|
|
||||||
|
|
||||||
/* Icon at top and text at bottom */
|
|
||||||
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:25%%;\">"
|
|
||||||
"<div class=\"ICON_HIGHLIGHT\">");
|
|
||||||
|
|
||||||
Act_FormStart (NumAct);
|
|
||||||
Act_LinkFormSubmit (Title,
|
|
||||||
(NumAct == Act_Actions[Gbl.CurrentAct].SuperAction) ? The_ClassMenuOn[Gbl.Prefs.Theme] :
|
|
||||||
The_ClassMenuOff[Gbl.Prefs.Theme]);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/%s/%s64x64.gif\""
|
|
||||||
" alt=\"%s\" class=\"ICON64x64\""
|
|
||||||
" style=\"margin:5px;\" />"
|
|
||||||
"<div>%s</div>"
|
|
||||||
"</a>",
|
|
||||||
Gbl.Prefs.PathIconSet,Cfg_ICON_ACTION,
|
|
||||||
Act_Actions[NumAct].Icon,
|
|
||||||
Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu],
|
|
||||||
Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu]);
|
|
||||||
Act_FormEnd ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>"
|
|
||||||
"</td>");
|
|
||||||
|
|
||||||
if ((NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS) ==
|
|
||||||
(Cfg_LAYOUT_MOBILE_NUM_COLUMNS - 1))
|
|
||||||
fprintf (Gbl.F.Out,"</tr>");
|
|
||||||
|
|
||||||
NumOptVisible++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Table end *****/
|
|
||||||
fprintf (Gbl.F.Out,"</table>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************* Put icons to select menu (horizontal or vertical) *************/
|
/************* Put icons to select menu (horizontal or vertical) *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -51,7 +51,6 @@ typedef enum
|
||||||
|
|
||||||
void Mnu_WriteVerticalMenuThisTabDesktop (void);
|
void Mnu_WriteVerticalMenuThisTabDesktop (void);
|
||||||
void Mnu_WriteHorizontalMenuThisTabDesktop (void);
|
void Mnu_WriteHorizontalMenuThisTabDesktop (void);
|
||||||
void Mnu_WriteMenuThisTabMobile (void);
|
|
||||||
|
|
||||||
void Mnu_PutIconsToSelectMenu (void);
|
void Mnu_PutIconsToSelectMenu (void);
|
||||||
void Mnu_ChangeMenu (void);
|
void Mnu_ChangeMenu (void);
|
||||||
|
|
|
@ -127,7 +127,6 @@ void Par_GetMainParameters (void)
|
||||||
long OtherUsrCod;
|
long OtherUsrCod;
|
||||||
char LongStr[1+10+1];
|
char LongStr[1+10+1];
|
||||||
char YearStr[2+1];
|
char YearStr[2+1];
|
||||||
Lay_Layout_t LayoutFromForm;
|
|
||||||
|
|
||||||
/***** Reset codes of country, institution, centre, degree and course *****/
|
/***** Reset codes of country, institution, centre, degree and course *****/
|
||||||
Gbl.CurrentCty.Cty.CtyCod =
|
Gbl.CurrentCty.Cty.CtyCod =
|
||||||
|
@ -227,8 +226,6 @@ void Par_GetMainParameters (void)
|
||||||
|
|
||||||
/***** Try to get preferences changed from current IP *****/
|
/***** Try to get preferences changed from current IP *****/
|
||||||
Pre_GetPrefsFromIP ();
|
Pre_GetPrefsFromIP ();
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_UNKNOWN)
|
|
||||||
Gbl.Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
|
||||||
|
|
||||||
if (!Gbl.Session.IsOpen) // When no session open (no logged user)...
|
if (!Gbl.Session.IsOpen) // When no session open (no logged user)...
|
||||||
{
|
{
|
||||||
|
@ -236,20 +233,11 @@ void Par_GetMainParameters (void)
|
||||||
if (Gbl.Prefs.Theme == The_THEME_UNKNOWN)
|
if (Gbl.Prefs.Theme == The_THEME_UNKNOWN)
|
||||||
Gbl.Prefs.Theme = The_THEME_DEFAULT;
|
Gbl.Prefs.Theme = The_THEME_DEFAULT;
|
||||||
|
|
||||||
/***** Try to get parameter layout (sent via GET method) *****/
|
|
||||||
if ((LayoutFromForm = Lay_GetParamLayout ()) != Lay_LAYOUT_UNKNOWN)
|
|
||||||
{
|
|
||||||
/* Parameter is correct, so set layout */
|
|
||||||
Gbl.Prefs.Layout = LayoutFromForm;
|
|
||||||
|
|
||||||
/* Update preferences from current IP */
|
|
||||||
Pre_SetPrefsFromIP ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Set path of theme *****/
|
/***** Set path of theme *****/
|
||||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||||
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_THEMES,The_ThemeId[Gbl.Prefs.Theme]);
|
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_THEMES,The_ThemeId[Gbl.Prefs.Theme]);
|
||||||
/***** Set path of theme *****/
|
|
||||||
|
/***** Set path of icon set *****/
|
||||||
sprintf (Gbl.Prefs.PathIconSet,"%s/%s/%s",
|
sprintf (Gbl.Prefs.PathIconSet,"%s/%s/%s",
|
||||||
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_ICON_SETS,
|
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_ICON_SETS,
|
||||||
Ico_IconSetId[Gbl.Prefs.IconSet]);
|
Ico_IconSetId[Gbl.Prefs.IconSet]);
|
||||||
|
@ -446,7 +434,6 @@ unsigned Par_GetParameter (tParamType ParamType,const char *ParamName,
|
||||||
strcmp (ParamName,"act") && // To execute directly an action (allowed only for fully public actions)
|
strcmp (ParamName,"act") && // To execute directly an action (allowed only for fully public actions)
|
||||||
strcmp (ParamName,"ses") && // To use an open session when redirecting from one language to another
|
strcmp (ParamName,"ses") && // To use an open session when redirecting from one language to another
|
||||||
strcmp (ParamName,"key")) // To verify an email address
|
strcmp (ParamName,"key")) // To verify an email address
|
||||||
// strcmp (ParamName,"Layout") && // To change the layout of the page (wide or narrow)
|
|
||||||
return 0; // Return no-parameters-found when method is GET and parameter name is not one of these
|
return 0; // Return no-parameters-found when method is GET and parameter name is not one of these
|
||||||
}
|
}
|
||||||
PtrSrc = Gbl.QueryString;
|
PtrSrc = Gbl.QueryString;
|
||||||
|
|
|
@ -84,26 +84,20 @@ void Pre_EditPrefs (void)
|
||||||
"</tr>"
|
"</tr>"
|
||||||
"</table>");
|
"</table>");
|
||||||
|
|
||||||
/***** Layout, side columns, theme, icon set & menu *****/
|
/***** Menu, side columns, theme, icon set *****/
|
||||||
fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
|
fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
|
||||||
"<tr>"
|
"<tr>"
|
||||||
"<td>");
|
"<td>");
|
||||||
Lay_PutIconsToSelectLayout (); // 3. Layout
|
Mnu_PutIconsToSelectMenu (); // 3. Menu
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
"<td>");
|
||||||
{
|
Pre_PutIconsToSelectSideCols (); // 4. Side columns
|
||||||
fprintf (Gbl.F.Out,"<td>");
|
|
||||||
Mnu_PutIconsToSelectMenu (); // 4. Menu
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
|
||||||
"<td>");
|
|
||||||
Pre_PutIconsToSelectSideCols (); // 5. Side columns
|
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
|
||||||
}
|
|
||||||
fprintf (Gbl.F.Out,"<td>");
|
|
||||||
The_PutIconsToSelectTheme (); // 6. Theme
|
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"<td>");
|
"<td>");
|
||||||
Ico_PutIconsToSelectIconSet (); // 7. Icon set
|
The_PutIconsToSelectTheme (); // 5. Theme
|
||||||
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
"<td>");
|
||||||
|
Ico_PutIconsToSelectIconSet (); // 6. Icon set
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"</tr>"
|
"</tr>"
|
||||||
"</table>");
|
"</table>");
|
||||||
|
@ -135,7 +129,7 @@ void Pre_GetPrefsFromIP (void)
|
||||||
if (Gbl.IP[0])
|
if (Gbl.IP[0])
|
||||||
{
|
{
|
||||||
/***** Get preferences from database *****/
|
/***** Get preferences from database *****/
|
||||||
sprintf (Query,"SELECT FirstDayOfWeek,Layout,Theme,IconSet,Menu,SideCols"
|
sprintf (Query,"SELECT FirstDayOfWeek,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")))
|
||||||
|
@ -152,26 +146,20 @@ void Pre_GetPrefsFromIP (void)
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||||
Gbl.Prefs.FirstDayOfWeek = UnsignedNum;
|
Gbl.Prefs.FirstDayOfWeek = UnsignedNum;
|
||||||
|
|
||||||
/* Get layout (row[1]) */
|
/* Get theme (row[1]) */
|
||||||
Gbl.Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
Gbl.Prefs.Theme = The_GetThemeFromStr (row[1]);
|
||||||
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Lay_NUM_LAYOUTS)
|
|
||||||
Gbl.Prefs.Layout = (Lay_Layout_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get theme (row[2]) */
|
/* Get icon set (row[2]) */
|
||||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[2]);
|
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
||||||
|
|
||||||
/* Get icon set (row[3]) */
|
/* Get menu (row[3]) */
|
||||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[3]);
|
|
||||||
|
|
||||||
/* Get menu (row[4]) */
|
|
||||||
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT;
|
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||||
if (sscanf (row[4],"%u",&UnsignedNum) == 1)
|
if (sscanf (row[3],"%u",&UnsignedNum) == 1)
|
||||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||||
Gbl.Prefs.Menu = (Lay_Layout_t) UnsignedNum;
|
Gbl.Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||||
|
|
||||||
/* Get if user wants to show side columns (row[5]) */
|
/* Get if user wants to show side columns (row[4]) */
|
||||||
if (sscanf (row[5],"%u",&Gbl.Prefs.SideCols) == 1)
|
if (sscanf (row[4],"%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;
|
||||||
|
@ -193,11 +181,10 @@ void Pre_SetPrefsFromIP (void)
|
||||||
char Query[512];
|
char Query[512];
|
||||||
|
|
||||||
/***** Update preferences from current IP in database *****/
|
/***** Update preferences from current IP in database *****/
|
||||||
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,FirstDayOfWeek,Layout,Theme,IconSet,Menu,SideCols)"
|
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,FirstDayOfWeek,Theme,IconSet,Menu,SideCols)"
|
||||||
" VALUES ('%s','%ld',NOW(),'%u','%u','%s','%s','%u','%u')",
|
" VALUES ('%s','%ld',NOW(),'%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.Layout,
|
|
||||||
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,
|
||||||
|
@ -207,10 +194,9 @@ 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',Layout='%u',Theme='%s',IconSet='%s',Menu='%u',SideCols='%u'"
|
sprintf (Query,"UPDATE IP_prefs SET FirstDayOfWeek='%u',Theme='%s',IconSet='%s',Menu='%u',SideCols='%u'"
|
||||||
" WHERE UsrCod='%ld'",
|
" WHERE UsrCod='%ld'",
|
||||||
Gbl.Prefs.FirstDayOfWeek,
|
Gbl.Prefs.FirstDayOfWeek,
|
||||||
(unsigned) Gbl.Prefs.Layout,
|
|
||||||
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,
|
||||||
|
@ -244,17 +230,12 @@ void Pre_PutSelectorToSelectLanguage (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_STR_LANG_NAME[Txt_NUM_LANGUAGES];
|
extern const char *Txt_STR_LANG_NAME[Txt_NUM_LANGUAGES];
|
||||||
Txt_Language_t Lan;
|
Txt_Language_t Lan;
|
||||||
static const unsigned SelectorWidth[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
112, // Lay_LAYOUT_DESKTOP
|
|
||||||
150, // Lay_LAYOUT_MOBILE
|
|
||||||
};
|
|
||||||
|
|
||||||
Act_FormStart (ActReqChgLan);
|
Act_FormStart (ActReqChgLan);
|
||||||
fprintf (Gbl.F.Out,"<select name=\"Lan\""
|
fprintf (Gbl.F.Out,"<select name=\"Lan\""
|
||||||
" style=\"width:%upx; margin:0;\""
|
" style=\"width:112px; margin:0;\""
|
||||||
" onchange=\"document.getElementById('%s').submit();\">",
|
" onchange=\"document.getElementById('%s').submit();\">",
|
||||||
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
|
Gbl.FormId);
|
||||||
for (Lan = (Txt_Language_t) 0;
|
for (Lan = (Txt_Language_t) 0;
|
||||||
Lan < Txt_NUM_LANGUAGES;
|
Lan < Txt_NUM_LANGUAGES;
|
||||||
Lan++)
|
Lan++)
|
||||||
|
@ -377,70 +358,6 @@ static void Pre_PutIconsToSelectSideCols (void)
|
||||||
Lay_EndRoundFrameTable ();
|
Lay_EndRoundFrameTable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**************** Put left icon to hide/show side columns ********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Pre_PutLeftIconToHideShowCols (void)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Hide_left_column;
|
|
||||||
extern const char *Txt_Show_left_column;
|
|
||||||
|
|
||||||
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN)
|
|
||||||
{
|
|
||||||
Act_FormStart (ActHidLftCol);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\""
|
|
||||||
" src=\"%s/central_left_8x800.gif\" alt=\"%s\""
|
|
||||||
" title=\"%s\" class=\"ICON8x800\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Txt_Hide_left_column,
|
|
||||||
Txt_Hide_left_column);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Act_FormStart (ActShoLftCol);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\""
|
|
||||||
" src=\"%s/central_right_8x800.gif\" alt=\"%s\""
|
|
||||||
" title=\"%s\" class=\"ICON8x800\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Txt_Show_left_column,
|
|
||||||
Txt_Show_left_column);
|
|
||||||
}
|
|
||||||
Act_FormEnd ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/**************** Put right icon to hide/show side columns *******************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Pre_PutRigthIconToHideShowCols (void)
|
|
||||||
{
|
|
||||||
extern const char *Txt_Hide_right_column;
|
|
||||||
extern const char *Txt_Show_right_column;
|
|
||||||
|
|
||||||
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)
|
|
||||||
{
|
|
||||||
Act_FormStart (ActHidRgtCol);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\""
|
|
||||||
" src=\"%s/central_right_8x800.gif\" alt=\"%s\""
|
|
||||||
" title=\"%s\" class=\"ICON8x800\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Txt_Hide_right_column,
|
|
||||||
Txt_Hide_right_column);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Act_FormStart (ActShoRgtCol);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\""
|
|
||||||
" src=\"%s/central_left_8x800.gif\" alt=\"%s\""
|
|
||||||
" title=\"%s\" class=\"ICON8x800\" />",
|
|
||||||
Gbl.Prefs.IconsURL,
|
|
||||||
Txt_Show_right_column,
|
|
||||||
Txt_Show_right_column);
|
|
||||||
}
|
|
||||||
Act_FormEnd ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*********************** Change layout of side columns ***********************/
|
/*********************** Change layout of side columns ***********************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -50,8 +50,6 @@ void Pre_AskChangeLanguage (void);
|
||||||
void Pre_ChangeLanguage (void);
|
void Pre_ChangeLanguage (void);
|
||||||
Txt_Language_t Pre_GetParamLanguage (void);
|
Txt_Language_t Pre_GetParamLanguage (void);
|
||||||
|
|
||||||
void Pre_PutLeftIconToHideShowCols (void);
|
|
||||||
void Pre_PutRigthIconToHideShowCols (void);
|
|
||||||
void Pre_ChangeSideCols (void);
|
void Pre_ChangeSideCols (void);
|
||||||
void Pre_HideLeftCol (void);
|
void Pre_HideLeftCol (void);
|
||||||
void Pre_HideRightCol (void);
|
void Pre_HideRightCol (void);
|
||||||
|
|
|
@ -286,18 +286,12 @@ unsigned Rol_ConvertUnsignedStrToRoles (const char *UnsignedStr)
|
||||||
void Rol_PutFormToChangeMyRole (bool FormInHead)
|
void Rol_PutFormToChangeMyRole (bool FormInHead)
|
||||||
{
|
{
|
||||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
static const unsigned SelectorWidth[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
130, // Lay_LAYOUT_DESKTOP
|
|
||||||
200, // Lay_LAYOUT_MOBILE
|
|
||||||
};
|
|
||||||
Rol_Role_t Role;
|
Rol_Role_t Role;
|
||||||
|
|
||||||
Act_FormStart (ActChgMyRol);
|
Act_FormStart (ActChgMyRol);
|
||||||
fprintf (Gbl.F.Out,"<select name=\"UsrTyp\"");
|
fprintf (Gbl.F.Out,"<select name=\"UsrTyp\"");
|
||||||
if (FormInHead)
|
if (FormInHead)
|
||||||
fprintf (Gbl.F.Out," style=\"width:%upx;\"",
|
fprintf (Gbl.F.Out," style=\"width:130px;\"");
|
||||||
SelectorWidth[Gbl.Prefs.Layout]);
|
|
||||||
fprintf (Gbl.F.Out," onchange=\"document.getElementById('%s').submit();\">",
|
fprintf (Gbl.F.Out," onchange=\"document.getElementById('%s').submit();\">",
|
||||||
Gbl.FormId);
|
Gbl.FormId);
|
||||||
for (Role = Rol__GUEST_;
|
for (Role = Rol__GUEST_;
|
||||||
|
|
143
swad_statistic.c
143
swad_statistic.c
|
@ -241,7 +241,6 @@ 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_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerLayout (void);
|
|
||||||
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerIconSet (void);
|
static void Sta_GetAndShowNumUsrsPerIconSet (void);
|
||||||
static void Sta_GetAndShowNumUsrsPerMenu (void);
|
static void Sta_GetAndShowNumUsrsPerMenu (void);
|
||||||
|
@ -3935,10 +3934,6 @@ void Sta_ShowUseOfPlatform (void)
|
||||||
/***** Number of users who have chosen a first day of week *****/
|
/***** Number of users who have chosen a first day of week *****/
|
||||||
Sta_GetAndShowNumUsrsPerFirstDayOfWeek ();
|
Sta_GetAndShowNumUsrsPerFirstDayOfWeek ();
|
||||||
break;
|
break;
|
||||||
case Sta_LAYOUTS:
|
|
||||||
/***** Number of users who have chosen a layout *****/
|
|
||||||
Sta_GetAndShowNumUsrsPerLayout ();
|
|
||||||
break;
|
|
||||||
case Sta_THEMES:
|
case Sta_THEMES:
|
||||||
/***** Number of users who have chosen a theme *****/
|
/***** Number of users who have chosen a theme *****/
|
||||||
Sta_GetAndShowNumUsrsPerTheme ();
|
Sta_GetAndShowNumUsrsPerTheme ();
|
||||||
|
@ -7791,7 +7786,7 @@ static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
|
||||||
extern const char *Txt_PERCENT_of_users;
|
extern const char *Txt_PERCENT_of_users;
|
||||||
unsigned FirstDayOfWeek;
|
unsigned FirstDayOfWeek;
|
||||||
char Query[1024];
|
char Query[1024];
|
||||||
unsigned NumUsrs[Lay_NUM_LAYOUTS];
|
unsigned NumUsrs[7]; // 7: seven days in a week
|
||||||
unsigned NumUsrsTotal = 0;
|
unsigned NumUsrsTotal = 0;
|
||||||
|
|
||||||
Lay_StartRoundFrameTable (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK]);
|
Lay_StartRoundFrameTable (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_FIRST_DAY_OF_WEEK]);
|
||||||
|
@ -7915,142 +7910,6 @@ static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
|
||||||
Lay_EndRoundFrameTable ();
|
Lay_EndRoundFrameTable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/********* Get and show number of users who have chosen a layout *************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
static void Sta_GetAndShowNumUsrsPerLayout (void)
|
|
||||||
{
|
|
||||||
extern const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS];
|
|
||||||
extern const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES];
|
|
||||||
extern const char *Txt_Layout;
|
|
||||||
extern const char *Txt_No_of_users;
|
|
||||||
extern const char *Txt_PERCENT_of_users;
|
|
||||||
extern const char *Txt_LAYOUT_NAMES[Lay_NUM_LAYOUTS];
|
|
||||||
Lay_Layout_t Layout;
|
|
||||||
char Query[1024];
|
|
||||||
unsigned NumUsrs[Lay_NUM_LAYOUTS];
|
|
||||||
unsigned NumUsrsTotal = 0;
|
|
||||||
|
|
||||||
Lay_StartRoundFrameTable (NULL,2,Txt_STAT_USE_STAT_TYPES[Sta_LAYOUTS]);
|
|
||||||
|
|
||||||
/***** 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_Layout,
|
|
||||||
Txt_No_of_users,
|
|
||||||
Txt_PERCENT_of_users);
|
|
||||||
|
|
||||||
/***** For each layout... *****/
|
|
||||||
for (Layout = (Lay_Layout_t) 0;
|
|
||||||
Layout < Lay_NUM_LAYOUTS;
|
|
||||||
Layout++)
|
|
||||||
{
|
|
||||||
/***** Get number of users who have chosen this layout from database *****/
|
|
||||||
switch (Gbl.Scope.Current)
|
|
||||||
{
|
|
||||||
case Sco_SCOPE_SYS:
|
|
||||||
sprintf (Query,"SELECT COUNT(*) FROM usr_data"
|
|
||||||
" WHERE Layout='%u'",
|
|
||||||
(unsigned) Layout);
|
|
||||||
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.Layout='%u'",
|
|
||||||
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Layout);
|
|
||||||
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.Layout='%u'",
|
|
||||||
Gbl.CurrentIns.Ins.InsCod,(unsigned) Layout);
|
|
||||||
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.Layout='%u'",
|
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Layout);
|
|
||||||
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.Layout='%u'",
|
|
||||||
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Layout);
|
|
||||||
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.Layout='%u'",
|
|
||||||
Gbl.CurrentCrs.Crs.CrsCod,(unsigned) Layout);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Lay_ShowErrorAndExit ("Wrong scope.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
NumUsrs[Layout] = (unsigned) DB_QueryCOUNT (Query,"can not get the number of users who have chosen a layout");
|
|
||||||
|
|
||||||
/* Update total number of users */
|
|
||||||
NumUsrsTotal += NumUsrs[Layout];
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** Write number of users who have chosen each layout *****/
|
|
||||||
for (Layout = (Lay_Layout_t) 0;
|
|
||||||
Layout < Lay_NUM_LAYOUTS;
|
|
||||||
Layout++)
|
|
||||||
fprintf (Gbl.F.Out,"<tr>"
|
|
||||||
"<td class=\"CENTER_MIDDLE\">"
|
|
||||||
"<img src=\"%s/%s32x32.gif\""
|
|
||||||
" alt=\"%s\" title=\"%s\""
|
|
||||||
" class=\"ICON32x32\" />"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%u"
|
|
||||||
"</td>"
|
|
||||||
"<td class=\"DAT RIGHT_MIDDLE\">"
|
|
||||||
"%5.2f%%"
|
|
||||||
"</td>"
|
|
||||||
"</tr>",
|
|
||||||
Gbl.Prefs.IconsURL,Lay_LayoutIcons[Layout],
|
|
||||||
Txt_LAYOUT_NAMES[Layout],
|
|
||||||
Txt_LAYOUT_NAMES[Layout],
|
|
||||||
NumUsrs[Layout],
|
|
||||||
NumUsrsTotal ? (float) NumUsrs[Layout] * 100.0 /
|
|
||||||
(float) NumUsrsTotal :
|
|
||||||
0);
|
|
||||||
|
|
||||||
Lay_EndRoundFrameTable ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********** Get and show number of users who have chosen a theme *************/
|
/********** Get and show number of users who have chosen a theme *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -97,7 +97,7 @@ typedef enum
|
||||||
Sta_CLICKS_GBL_PER_COURSE = 23,
|
Sta_CLICKS_GBL_PER_COURSE = 23,
|
||||||
} Sta_ClicksGroupedBy_t;
|
} Sta_ClicksGroupedBy_t;
|
||||||
|
|
||||||
#define Sta_NUM_FIGURES 22
|
#define Sta_NUM_FIGURES 21
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
Sta_USERS, // Number of users
|
Sta_USERS, // Number of users
|
||||||
|
@ -117,7 +117,6 @@ typedef enum
|
||||||
Sta_PRIVACY, // Number of users per privacity
|
Sta_PRIVACY, // Number of users per privacity
|
||||||
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_FIRST_DAY_OF_WEEK, // Number of users per first day of week
|
||||||
Sta_LAYOUTS, // Number of users per layout
|
|
||||||
Sta_THEMES, // Number of users per theme
|
Sta_THEMES, // Number of users per theme
|
||||||
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
|
||||||
|
|
74
swad_tab.c
74
swad_tab.c
|
@ -159,80 +159,6 @@ void Tab_DrawTabsDeskTop (void)
|
||||||
fprintf (Gbl.F.Out,"</ul>");
|
fprintf (Gbl.F.Out,"</ul>");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/************************ Draw vertical menu with tabs ***********************/
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
void Tab_DrawTabsMobile (void)
|
|
||||||
{
|
|
||||||
extern const char *The_ClassMenuOff[The_NUM_THEMES];
|
|
||||||
extern const char *Txt_TABS_FULL_TXT[Tab_NUM_TABS];
|
|
||||||
unsigned NumTabVisible;
|
|
||||||
Act_Tab_t NumTab;
|
|
||||||
bool ICanViewTab;
|
|
||||||
|
|
||||||
/***** Table start *****/
|
|
||||||
fprintf (Gbl.F.Out,"<table style=\"width:100%%;\">");
|
|
||||||
|
|
||||||
/***** Loop to write all tabs. Each row holds a tab *****/
|
|
||||||
for (NumTabVisible = 0, NumTab = (Act_Tab_t) 1;
|
|
||||||
NumTab <= (Act_Tab_t) Tab_NUM_TABS - 1;
|
|
||||||
NumTab++)
|
|
||||||
{
|
|
||||||
ICanViewTab = Tab_CheckIfICanViewTab (NumTab);
|
|
||||||
|
|
||||||
if (ICanViewTab || NumTab > TabCrs) // Don't show the first hidden tabs
|
|
||||||
{
|
|
||||||
if (NumTabVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS == 0)
|
|
||||||
fprintf (Gbl.F.Out,"<tr>");
|
|
||||||
|
|
||||||
/* Icon at top and text at bottom */
|
|
||||||
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:25%%;\">");
|
|
||||||
if (ICanViewTab)
|
|
||||||
{
|
|
||||||
fprintf (Gbl.F.Out,"<div class=\"ICON_HIGHLIGHT\">");
|
|
||||||
Act_FormStart (ActMnu);
|
|
||||||
Par_PutHiddenParamUnsigned ("NxtTab",(unsigned) NumTab);
|
|
||||||
Act_LinkFormSubmit (Txt_TABS_FULL_TXT[NumTab],The_ClassMenuOff[Gbl.Prefs.Theme]);
|
|
||||||
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/%s/%s64x64.gif\""
|
|
||||||
" alt=\"%s\" title=\"%s\" class=\"ICON64x64\""
|
|
||||||
" style=\"margin:5px;\" />"
|
|
||||||
"<div>%s</div>"
|
|
||||||
"</a>",
|
|
||||||
Gbl.Prefs.PathIconSet,Cfg_ICON_ACTION,
|
|
||||||
Tab_TabIcons[NumTab],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab]);
|
|
||||||
Act_FormEnd ();
|
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fprintf (Gbl.F.Out,"<div class=\"ICON_HIDDEN\">"
|
|
||||||
"<img src=\"%s/%s/%s64x64.gif\""
|
|
||||||
" alt=\"%s\" title=\"%s\""
|
|
||||||
" class=\"ICON64x64\" style=\"margin:5px;\" />"
|
|
||||||
"<div class=\"%s\">%s</div>"
|
|
||||||
"</div>",
|
|
||||||
Gbl.Prefs.PathIconSet,
|
|
||||||
Cfg_ICON_ACTION,
|
|
||||||
Tab_TabIcons[NumTab],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab],
|
|
||||||
The_ClassMenuOff[Gbl.Prefs.Theme],
|
|
||||||
Txt_TABS_FULL_TXT[NumTab]);
|
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
|
||||||
if ((NumTabVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS) == (Cfg_LAYOUT_MOBILE_NUM_COLUMNS-1))
|
|
||||||
fprintf (Gbl.F.Out,"</tr>");
|
|
||||||
|
|
||||||
NumTabVisible++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***** End of the table *****/
|
|
||||||
fprintf (Gbl.F.Out,"</table>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************************* Check if I can view a tab *************************/
|
/************************* Check if I can view a tab *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -42,7 +42,6 @@
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Tab_DrawTabsDeskTop (void);
|
void Tab_DrawTabsDeskTop (void);
|
||||||
void Tab_DrawTabsMobile (void);
|
|
||||||
void Tab_DrawBreadcrumb (void);
|
void Tab_DrawBreadcrumb (void);
|
||||||
|
|
||||||
void Tab_SetCurrentTab (void);
|
void Tab_SetCurrentTab (void);
|
||||||
|
|
84
swad_text.c
84
swad_text.c
|
@ -15257,70 +15257,6 @@ const char *Txt_Last_BR_year = // "Last academic year", the opposite to "First a
|
||||||
"Last<br />year"; // Necessita de tradução
|
"Last<br />year"; // Necessita de tradução
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *Txt_Layout =
|
|
||||||
#if L==0
|
|
||||||
"Disseny";
|
|
||||||
#elif L==1
|
|
||||||
"Layout";
|
|
||||||
#elif L==2
|
|
||||||
"Layout";
|
|
||||||
#elif L==3
|
|
||||||
"Diseño";
|
|
||||||
#elif L==4
|
|
||||||
"Disposition";
|
|
||||||
#elif L==5
|
|
||||||
"Ta'ãngahai";
|
|
||||||
#elif L==6
|
|
||||||
"Layout";
|
|
||||||
#elif L==7
|
|
||||||
"Układ";
|
|
||||||
#elif L==8
|
|
||||||
"Layout";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *Txt_LAYOUT_NAMES[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
#if L==0
|
|
||||||
"Pantalla grande" // Necessita traduccio
|
|
||||||
#elif L==1
|
|
||||||
"Desktop" // Need Übersetzung
|
|
||||||
#elif L==2
|
|
||||||
"Desktop"
|
|
||||||
#elif L==3
|
|
||||||
"Pantalla grande"
|
|
||||||
#elif L==4
|
|
||||||
"Desktop" // Besoin de traduction
|
|
||||||
#elif L==5
|
|
||||||
"Pantalla grande" // Okoteve traducción
|
|
||||||
#elif L==6
|
|
||||||
"Desktop"
|
|
||||||
#elif L==7
|
|
||||||
"Pulpit"
|
|
||||||
#elif L==8
|
|
||||||
"Desktop" // Necessita de tradução
|
|
||||||
#endif
|
|
||||||
,
|
|
||||||
#if L==0
|
|
||||||
"Móvil" // Necessita traduccio
|
|
||||||
#elif L==1
|
|
||||||
"Mobile" // Need Übersetzung
|
|
||||||
#elif L==2
|
|
||||||
"Mobile"
|
|
||||||
#elif L==3
|
|
||||||
"Móvil"
|
|
||||||
#elif L==4
|
|
||||||
"Mobile" // Besoin de traduction
|
|
||||||
#elif L==5
|
|
||||||
"Móvil" // Okoteve traducción
|
|
||||||
#elif L==6
|
|
||||||
"Cellulare"
|
|
||||||
#elif L==7
|
|
||||||
"Komorka"
|
|
||||||
#elif L==8
|
|
||||||
"Mobile" // Necessita de tradução
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *Txt_LAYOUT_SIDE_COLUMNS[4] =
|
const char *Txt_LAYOUT_SIDE_COLUMNS[4] =
|
||||||
{
|
{
|
||||||
#if L==0
|
#if L==0
|
||||||
|
@ -36735,26 +36671,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
||||||
"Calendário"
|
"Calendário"
|
||||||
#endif
|
#endif
|
||||||
,
|
,
|
||||||
#if L==0 // Sta_LAYOUTS
|
|
||||||
"Disseny"
|
|
||||||
#elif L==1
|
|
||||||
"layout"
|
|
||||||
#elif L==2
|
|
||||||
"Layout"
|
|
||||||
#elif L==3
|
|
||||||
"Diseño"
|
|
||||||
#elif L==4
|
|
||||||
"Disposition"
|
|
||||||
#elif L==5
|
|
||||||
"Ta'ãngahai"
|
|
||||||
#elif L==6
|
|
||||||
"Layout"
|
|
||||||
#elif L==7
|
|
||||||
"Układ"
|
|
||||||
#elif L==8
|
|
||||||
"Layout"
|
|
||||||
#endif
|
|
||||||
,
|
|
||||||
#if L==0 // Sta_THEMES
|
#if L==0 // Sta_THEMES
|
||||||
"Tema (colors)"
|
"Tema (colors)"
|
||||||
#elif L==1
|
#elif L==1
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
extern struct Globals Gbl;
|
extern struct Globals Gbl;
|
||||||
const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS];
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************** Private constants **************************/
|
/******************************** Private constants **************************/
|
||||||
|
|
76
swad_user.c
76
swad_user.c
|
@ -274,7 +274,6 @@ void Usr_ResetUsrDataExceptUsrCodAndIDs (struct UsrData *UsrDat)
|
||||||
|
|
||||||
UsrDat->Prefs.Language = Cfg_DEFAULT_LANGUAGE_FOR_NEW_USERS;
|
UsrDat->Prefs.Language = Cfg_DEFAULT_LANGUAGE_FOR_NEW_USERS;
|
||||||
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
|
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
|
||||||
UsrDat->Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
|
||||||
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
||||||
UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT;
|
UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT;
|
||||||
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||||
|
@ -403,7 +402,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
|
|
||||||
/***** 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,"
|
||||||
"Layout,Theme,IconSet,Language,FirstDayOfWeek,Photo,PhotoVisibility,ProfileVisibility,"
|
"Theme,IconSet,Language,FirstDayOfWeek,Photo,PhotoVisibility,ProfileVisibility,"
|
||||||
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
|
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
|
||||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||||
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
|
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
|
||||||
|
@ -445,18 +444,12 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
/* Get sex */
|
/* Get sex */
|
||||||
UsrDat->Sex = Usr_GetSexFromStr (row[5]);
|
UsrDat->Sex = Usr_GetSexFromStr (row[5]);
|
||||||
|
|
||||||
/* Get layout */
|
|
||||||
UsrDat->Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
|
||||||
if (sscanf (row[6],"%u",&UnsignedNum) == 1)
|
|
||||||
if (UnsignedNum < Lay_NUM_LAYOUTS)
|
|
||||||
UsrDat->Prefs.Layout = (Lay_Layout_t) UnsignedNum;
|
|
||||||
|
|
||||||
/* Get theme */
|
/* Get theme */
|
||||||
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
||||||
for (Theme = (The_Theme_t) 0;
|
for (Theme = (The_Theme_t) 0;
|
||||||
Theme < The_NUM_THEMES;
|
Theme < The_NUM_THEMES;
|
||||||
Theme++)
|
Theme++)
|
||||||
if (!strcasecmp (row[7],The_ThemeId[Theme]))
|
if (!strcasecmp (row[6],The_ThemeId[Theme]))
|
||||||
{
|
{
|
||||||
UsrDat->Prefs.Theme = Theme;
|
UsrDat->Prefs.Theme = Theme;
|
||||||
break;
|
break;
|
||||||
|
@ -467,7 +460,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
for (IconSet = (Ico_IconSet_t) 0;
|
for (IconSet = (Ico_IconSet_t) 0;
|
||||||
IconSet < Ico_NUM_ICON_SETS;
|
IconSet < Ico_NUM_ICON_SETS;
|
||||||
IconSet++)
|
IconSet++)
|
||||||
if (!strcasecmp (row[8],Ico_IconSetId[IconSet]))
|
if (!strcasecmp (row[7],Ico_IconSetId[IconSet]))
|
||||||
{
|
{
|
||||||
UsrDat->Prefs.IconSet = IconSet;
|
UsrDat->Prefs.IconSet = IconSet;
|
||||||
break;
|
break;
|
||||||
|
@ -478,7 +471,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
for (Lan = (Txt_Language_t) 0;
|
for (Lan = (Txt_Language_t) 0;
|
||||||
Lan < Txt_NUM_LANGUAGES;
|
Lan < Txt_NUM_LANGUAGES;
|
||||||
Lan++)
|
Lan++)
|
||||||
if (!strcasecmp (row[9],Txt_STR_LANG_ID[Lan]))
|
if (!strcasecmp (row[8],Txt_STR_LANG_ID[Lan]))
|
||||||
{
|
{
|
||||||
UsrDat->Prefs.Language = Lan;
|
UsrDat->Prefs.Language = Lan;
|
||||||
break;
|
break;
|
||||||
|
@ -486,51 +479,51 @@ 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_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||||
if (sscanf (row[10],"%u",&UnsignedNum) == 1)
|
if (sscanf (row[9],"%u",&UnsignedNum) == 1)
|
||||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||||
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
||||||
|
|
||||||
/* Get rest of data */
|
/* Get rest of data */
|
||||||
strncpy (UsrDat->Photo,row[11],sizeof (UsrDat->Photo) - 1);
|
strncpy (UsrDat->Photo,row[10],sizeof (UsrDat->Photo) - 1);
|
||||||
UsrDat->Photo[sizeof (UsrDat->Photo) - 1] = '\0';
|
UsrDat->Photo[sizeof (UsrDat->Photo) - 1] = '\0';
|
||||||
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[12]);
|
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[11]);
|
||||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[13]);
|
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[13]);
|
||||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[15]);
|
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[16]);
|
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||||
|
|
||||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[17]);
|
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[18]);
|
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||||
strncpy (UsrDat->Tch.Office ,row[19],sizeof (UsrDat->Tch.Office ) - 1);
|
strncpy (UsrDat->Tch.Office ,row[18],sizeof (UsrDat->Tch.Office ) - 1);
|
||||||
UsrDat->Tch.Office [sizeof (UsrDat->Tch.Office ) - 1] = '\0';
|
UsrDat->Tch.Office [sizeof (UsrDat->Tch.Office ) - 1] = '\0';
|
||||||
strncpy (UsrDat->Tch.OfficePhone,row[20],sizeof (UsrDat->Tch.OfficePhone) - 1);
|
strncpy (UsrDat->Tch.OfficePhone,row[19],sizeof (UsrDat->Tch.OfficePhone) - 1);
|
||||||
UsrDat->Tch.OfficePhone[sizeof (UsrDat->Tch.OfficePhone) - 1] = '\0';
|
UsrDat->Tch.OfficePhone[sizeof (UsrDat->Tch.OfficePhone) - 1] = '\0';
|
||||||
|
|
||||||
strncpy (UsrDat->LocalAddress ,row[21],sizeof (UsrDat->LocalAddress ) - 1);
|
strncpy (UsrDat->LocalAddress ,row[20],sizeof (UsrDat->LocalAddress ) - 1);
|
||||||
UsrDat->LocalAddress [sizeof (UsrDat->LocalAddress ) - 1] = '\0';
|
UsrDat->LocalAddress [sizeof (UsrDat->LocalAddress ) - 1] = '\0';
|
||||||
strncpy (UsrDat->LocalPhone ,row[22],sizeof (UsrDat->LocalPhone ) - 1);
|
strncpy (UsrDat->LocalPhone ,row[21],sizeof (UsrDat->LocalPhone ) - 1);
|
||||||
UsrDat->LocalPhone [sizeof (UsrDat->LocalPhone ) - 1] = '\0';
|
UsrDat->LocalPhone [sizeof (UsrDat->LocalPhone ) - 1] = '\0';
|
||||||
strncpy (UsrDat->FamilyAddress,row[23],sizeof (UsrDat->FamilyAddress) - 1);
|
strncpy (UsrDat->FamilyAddress,row[22],sizeof (UsrDat->FamilyAddress) - 1);
|
||||||
UsrDat->FamilyAddress[sizeof (UsrDat->FamilyAddress) - 1] = '\0';
|
UsrDat->FamilyAddress[sizeof (UsrDat->FamilyAddress) - 1] = '\0';
|
||||||
strncpy (UsrDat->FamilyPhone ,row[24],sizeof (UsrDat->FamilyPhone ) - 1);
|
strncpy (UsrDat->FamilyPhone ,row[23],sizeof (UsrDat->FamilyPhone ) - 1);
|
||||||
UsrDat->FamilyPhone [sizeof (UsrDat->FamilyPhone ) - 1] = '\0';
|
UsrDat->FamilyPhone [sizeof (UsrDat->FamilyPhone ) - 1] = '\0';
|
||||||
strncpy (UsrDat->OriginPlace ,row[25],sizeof (UsrDat->OriginPlace ) - 1);
|
strncpy (UsrDat->OriginPlace ,row[24],sizeof (UsrDat->OriginPlace ) - 1);
|
||||||
UsrDat->OriginPlace [sizeof (UsrDat->OriginPlace ) - 1] = '\0';
|
UsrDat->OriginPlace [sizeof (UsrDat->OriginPlace ) - 1] = '\0';
|
||||||
strcpy (StrBirthday,
|
strcpy (StrBirthday,
|
||||||
row[26] ? row[26] :
|
row[25] ? row[25] :
|
||||||
"0000-00-00");
|
"0000-00-00");
|
||||||
Usr_GetUsrCommentsFromString (row[27] ? row[27] :
|
Usr_GetUsrCommentsFromString (row[26] ? row[26] :
|
||||||
"",
|
"",
|
||||||
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_MENU_DEFAULT;
|
||||||
if (sscanf (row[28],"%u",&UnsignedNum) == 1)
|
if (sscanf (row[27],"%u",&UnsignedNum) == 1)
|
||||||
if (UnsignedNum < Mnu_NUM_MENUS)
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||||
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
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[29],"%u",&UsrDat->Prefs.SideCols) == 1)
|
if (sscanf (row[28],"%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;
|
||||||
|
@ -539,11 +532,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[30],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
if (sscanf (row[29],"%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 e-mail */
|
/* Get on which events I want to be notified by e-mail */
|
||||||
if (sscanf (row[31],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
if (sscanf (row[30],"%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;
|
||||||
|
@ -1633,11 +1626,6 @@ void Usr_WriteLoggedUsrHead (void)
|
||||||
extern const char *The_ClassUsr[The_NUM_THEMES];
|
extern const char *The_ClassUsr[The_NUM_THEMES];
|
||||||
extern const char *The_ClassHead[The_NUM_THEMES];
|
extern const char *The_ClassHead[The_NUM_THEMES];
|
||||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||||
static const unsigned NumCharsName[Lay_NUM_LAYOUTS] =
|
|
||||||
{
|
|
||||||
12, // Lay_LAYOUT_DESKTOP
|
|
||||||
10, // Lay_LAYOUT_MOBILE
|
|
||||||
};
|
|
||||||
bool ShowPhoto;
|
bool ShowPhoto;
|
||||||
char PhotoURL[PATH_MAX+1];
|
char PhotoURL[PATH_MAX+1];
|
||||||
char UsrName[Usr_MAX_BYTES_NAME+1];
|
char UsrName[Usr_MAX_BYTES_NAME+1];
|
||||||
|
@ -1668,7 +1656,7 @@ void Usr_WriteLoggedUsrHead (void)
|
||||||
if (Gbl.Usrs.Me.UsrDat.FullName[0])
|
if (Gbl.Usrs.Me.UsrDat.FullName[0])
|
||||||
{
|
{
|
||||||
strcpy (UsrName,Gbl.Usrs.Me.UsrDat.FirstName);
|
strcpy (UsrName,Gbl.Usrs.Me.UsrDat.FirstName);
|
||||||
Str_LimitLengthHTMLStr (UsrName,NumCharsName[Gbl.Prefs.Layout]);
|
Str_LimitLengthHTMLStr (UsrName,12);
|
||||||
fprintf (Gbl.F.Out,"%s",UsrName);
|
fprintf (Gbl.F.Out,"%s",UsrName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1984,8 +1972,7 @@ void Usr_ChkUsrAndGetUsrData (void)
|
||||||
Act_AdjustActionWhenNoUsrLogged ();
|
Act_AdjustActionWhenNoUsrLogged ();
|
||||||
|
|
||||||
/***** When I change to another tab, go to the first option allowed *****/
|
/***** When I change to another tab, go to the first option allowed *****/
|
||||||
if (Gbl.CurrentAct == ActMnu &&
|
if (Gbl.CurrentAct == ActMnu)
|
||||||
Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
|
||||||
{
|
{
|
||||||
if (Gbl.Usrs.Me.Logged)
|
if (Gbl.Usrs.Me.Logged)
|
||||||
{
|
{
|
||||||
|
@ -2375,11 +2362,8 @@ 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.Layout = Gbl.Usrs.Me.UsrDat.Prefs.Layout;
|
Gbl.Prefs.Menu = Gbl.Usrs.Me.UsrDat.Prefs.Menu;
|
||||||
// TODO: Should layout depend on session instead of user prefs?
|
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
||||||
// (for example, one user with two sessions with different layouts)
|
|
||||||
Gbl.Prefs.Menu = Gbl.Usrs.Me.UsrDat.Prefs.Menu;
|
|
||||||
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
|
||||||
|
|
||||||
Gbl.Prefs.Theme = Gbl.Usrs.Me.UsrDat.Prefs.Theme;
|
Gbl.Prefs.Theme = Gbl.Usrs.Me.UsrDat.Prefs.Theme;
|
||||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||||
|
|
|
@ -152,7 +152,6 @@ struct UsrData
|
||||||
{
|
{
|
||||||
Txt_Language_t Language;
|
Txt_Language_t Language;
|
||||||
unsigned FirstDayOfWeek;
|
unsigned FirstDayOfWeek;
|
||||||
Lay_Layout_t Layout;
|
|
||||||
The_Theme_t Theme;
|
The_Theme_t Theme;
|
||||||
Ico_IconSet_t IconSet;
|
Ico_IconSet_t IconSet;
|
||||||
Mnu_Menu_t Menu;
|
Mnu_Menu_t Menu;
|
||||||
|
|
Loading…
Reference in New Issue