Version 15.47

This commit is contained in:
Antonio Cañas Vargas 2015-11-27 12:57:56 +01:00
parent 26cf9e52a1
commit d0116b745e
27 changed files with 185 additions and 917 deletions

View File

@ -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),

View File

@ -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],

View File

@ -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

View File

@ -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 *******************************/

View File

@ -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)

View File

@ -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

View File

@ -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)
{ {

View File

@ -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 *****/
/* /*

View File

@ -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],

View File

@ -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

View File

@ -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;

View File

@ -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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); fprintf (Gbl.F.Out,"</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
/***** 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 ********************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -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[]);

View File

@ -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) *************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -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);

View File

@ -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;

View File

@ -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 ***********************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -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);

View File

@ -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_;

View File

@ -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 *************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -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

View File

@ -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 *************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -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);

View File

@ -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&ntilde;o";
#elif L==4
"Disposition";
#elif L==5
"Ta'&atilde;ngahai";
#elif L==6
"Layout";
#elif L==7
"Uk&lstrok;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&oacute;vil" // Necessita traduccio
#elif L==1
"Mobile" // Need Übersetzung
#elif L==2
"Mobile"
#elif L==3
"M&oacute;vil"
#elif L==4
"Mobile" // Besoin de traduction
#elif L==5
"M&oacute;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&aacute;rio" "Calend&aacute;rio"
#endif #endif
, ,
#if L==0 // Sta_LAYOUTS
"Disseny"
#elif L==1
"layout"
#elif L==2
"Layout"
#elif L==3
"Dise&ntilde;o"
#elif L==4
"Disposition"
#elif L==5
"Ta'&atilde;ngahai"
#elif L==6
"Layout"
#elif L==7
"Uk&lstrok;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

View File

@ -41,7 +41,6 @@
/*****************************************************************************/ /*****************************************************************************/
extern struct Globals Gbl; extern struct Globals Gbl;
const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS];
/*****************************************************************************/ /*****************************************************************************/
/******************************** Private constants **************************/ /******************************** Private constants **************************/

View File

@ -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",

View File

@ -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;