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,
|
||||
LastChange DATETIME NOT NULL,
|
||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||
Layout TINYINT NOT NULL DEFAULT 0,
|
||||
Theme CHAR(16) NOT NULL,
|
||||
IconSet CHAR(16) NOT NULL,
|
||||
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,
|
||||
FirstName VARCHAR(32) COLLATE latin1_spanish_ci NOT NULL,
|
||||
Sex ENUM ('unknown','female','male') NOT NULL DEFAULT 'unknown',
|
||||
Layout TINYINT NOT NULL DEFAULT 0,
|
||||
Theme CHAR(16) NOT NULL,
|
||||
IconSet CHAR(16) NOT NULL,
|
||||
Language CHAR(2) NOT NULL,
|
||||
|
@ -1153,7 +1151,6 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
|||
EmailNtfEvents INT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(UsrCod),
|
||||
UNIQUE INDEX(EncryptedUsrCod),
|
||||
INDEX(Layout),
|
||||
INDEX(Theme),
|
||||
INDEX(IconSet),
|
||||
INDEX(Language),
|
||||
|
|
|
@ -434,12 +434,12 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
|||
/***** Insert new user in database *****/
|
||||
/* Insert user's data */
|
||||
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,"
|
||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents)"
|
||||
" VALUES ('%s','%s','%s','%s','%s','%s',"
|
||||
"'%u','%s','%s','%s','%u','%s','%s',"
|
||||
"'%s','%s','%s','%u','%s','%s',"
|
||||
"'%ld',"
|
||||
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
||||
"'%u','%u','-1','0')",
|
||||
|
@ -447,7 +447,6 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
|||
UsrDat->Password,
|
||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||
Usr_StringsSexDB[UsrDat->Sex],
|
||||
(unsigned) UsrDat->Prefs.Layout,
|
||||
The_ThemeId[UsrDat->Prefs.Theme],
|
||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||
|
|
|
@ -1270,7 +1270,6 @@ Profile:
|
|||
1075. ActReqEdiMyNet Request the edition of my social networks
|
||||
1076. ActChgMyNet Change my web and social networks
|
||||
|
||||
1077. ActChgLay Change layout
|
||||
1078. ActChgThe Change theme
|
||||
1079. ActReqChgLan Ask if 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},
|
||||
/* 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},
|
||||
/* 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},
|
||||
|
@ -3467,7 +3465,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
|||
ActHidRgtCol, // #669
|
||||
ActShoLftCol, // #670
|
||||
ActShoRgtCol, // #671
|
||||
ActChgLay, // #672
|
||||
-1, // #672 (obsolete action)
|
||||
ActEdiPrf, // #673
|
||||
ActChgCol, // #674
|
||||
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
|
||||
|
||||
#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
|
||||
|
||||
|
@ -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 ActChgMyNet (ActSeeAllStaCrs+45)
|
||||
|
||||
#define ActChgLay (ActSeeAllStaCrs+46)
|
||||
#define ActChgThe (ActSeeAllStaCrs+47)
|
||||
#define ActReqChgLan (ActSeeAllStaCrs+48)
|
||||
#define ActChgLan (ActSeeAllStaCrs+49)
|
||||
#define ActChg1stDay (ActSeeAllStaCrs+50)
|
||||
#define ActChgCol (ActSeeAllStaCrs+51)
|
||||
#define ActHidLftCol (ActSeeAllStaCrs+52)
|
||||
#define ActHidRgtCol (ActSeeAllStaCrs+53)
|
||||
#define ActShoLftCol (ActSeeAllStaCrs+54)
|
||||
#define ActShoRgtCol (ActSeeAllStaCrs+55)
|
||||
#define ActChgIco (ActSeeAllStaCrs+56)
|
||||
#define ActChgMnu (ActSeeAllStaCrs+57)
|
||||
#define ActChgNtfPrf (ActSeeAllStaCrs+58)
|
||||
#define ActChgThe (ActSeeAllStaCrs+46)
|
||||
#define ActReqChgLan (ActSeeAllStaCrs+47)
|
||||
#define ActChgLan (ActSeeAllStaCrs+48)
|
||||
#define ActChg1stDay (ActSeeAllStaCrs+49)
|
||||
#define ActChgCol (ActSeeAllStaCrs+50)
|
||||
#define ActHidLftCol (ActSeeAllStaCrs+51)
|
||||
#define ActHidRgtCol (ActSeeAllStaCrs+52)
|
||||
#define ActShoLftCol (ActSeeAllStaCrs+53)
|
||||
#define ActShoRgtCol (ActSeeAllStaCrs+54)
|
||||
#define ActChgIco (ActSeeAllStaCrs+55)
|
||||
#define ActChgMnu (ActSeeAllStaCrs+56)
|
||||
#define ActChgNtfPrf (ActSeeAllStaCrs+57)
|
||||
|
||||
#define ActPrnUsrQR (ActSeeAllStaCrs+59)
|
||||
#define ActPrnUsrQR (ActSeeAllStaCrs+58)
|
||||
|
||||
#define ActPrnMyTimTbl (ActSeeAllStaCrs+60)
|
||||
#define ActEdiTut (ActSeeAllStaCrs+61)
|
||||
#define ActChgTut (ActSeeAllStaCrs+62)
|
||||
#define ActReqRemFilBrf (ActSeeAllStaCrs+63)
|
||||
#define ActRemFilBrf (ActSeeAllStaCrs+64)
|
||||
#define ActRemFolBrf (ActSeeAllStaCrs+65)
|
||||
#define ActCopBrf (ActSeeAllStaCrs+66)
|
||||
#define ActPasBrf (ActSeeAllStaCrs+67)
|
||||
#define ActRemTreBrf (ActSeeAllStaCrs+68)
|
||||
#define ActFrmCreBrf (ActSeeAllStaCrs+69)
|
||||
#define ActCreFolBrf (ActSeeAllStaCrs+70)
|
||||
#define ActCreLnkBrf (ActSeeAllStaCrs+71)
|
||||
#define ActRenFolBrf (ActSeeAllStaCrs+72)
|
||||
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+73)
|
||||
#define ActRcvFilBrfCla (ActSeeAllStaCrs+74)
|
||||
#define ActExpBrf (ActSeeAllStaCrs+75)
|
||||
#define ActConBrf (ActSeeAllStaCrs+76)
|
||||
#define ActZIPBrf (ActSeeAllStaCrs+77)
|
||||
#define ActReqDatBrf (ActSeeAllStaCrs+78)
|
||||
#define ActChgDatBrf (ActSeeAllStaCrs+79)
|
||||
#define ActDowBrf (ActSeeAllStaCrs+80)
|
||||
#define ActPrnMyTimTbl (ActSeeAllStaCrs+59)
|
||||
#define ActEdiTut (ActSeeAllStaCrs+60)
|
||||
#define ActChgTut (ActSeeAllStaCrs+61)
|
||||
#define ActReqRemFilBrf (ActSeeAllStaCrs+62)
|
||||
#define ActRemFilBrf (ActSeeAllStaCrs+63)
|
||||
#define ActRemFolBrf (ActSeeAllStaCrs+64)
|
||||
#define ActCopBrf (ActSeeAllStaCrs+65)
|
||||
#define ActPasBrf (ActSeeAllStaCrs+66)
|
||||
#define ActRemTreBrf (ActSeeAllStaCrs+67)
|
||||
#define ActFrmCreBrf (ActSeeAllStaCrs+68)
|
||||
#define ActCreFolBrf (ActSeeAllStaCrs+69)
|
||||
#define ActCreLnkBrf (ActSeeAllStaCrs+70)
|
||||
#define ActRenFolBrf (ActSeeAllStaCrs+71)
|
||||
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+72)
|
||||
#define ActRcvFilBrfCla (ActSeeAllStaCrs+73)
|
||||
#define ActExpBrf (ActSeeAllStaCrs+74)
|
||||
#define ActConBrf (ActSeeAllStaCrs+75)
|
||||
#define ActZIPBrf (ActSeeAllStaCrs+76)
|
||||
#define ActReqDatBrf (ActSeeAllStaCrs+77)
|
||||
#define ActChgDatBrf (ActSeeAllStaCrs+78)
|
||||
#define ActDowBrf (ActSeeAllStaCrs+79)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
|
|
|
@ -115,11 +115,17 @@
|
|||
/****************************** 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:
|
||||
// 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: 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)
|
||||
|
|
|
@ -309,9 +309,6 @@
|
|||
/* 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
|
||||
|
||||
/* Layout */
|
||||
#define Cfg_LAYOUT_MOBILE_NUM_COLUMNS 3
|
||||
|
||||
/* Notifications */
|
||||
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_SWAD 50
|
||||
#define Cfg_MAX_CHARS_NOTIF_SUMMARY_WEB_SERVICE 100
|
||||
|
|
|
@ -1130,11 +1130,6 @@ void Crs_FreeListCoursesInDegree (struct Degree *Deg)
|
|||
void Crs_WriteSelectorMyCourses (void)
|
||||
{
|
||||
extern const char *Txt_No_COURSE_SELECTED;
|
||||
static const unsigned SelectorWidth[Lay_NUM_LAYOUTS] =
|
||||
{
|
||||
175, // Lay_LAYOUT_DESKTOP
|
||||
300, // Lay_LAYOUT_MOBILE
|
||||
};
|
||||
unsigned NumMyCrs;
|
||||
bool IBelongToCurrentCrs = false;
|
||||
long CrsCod;
|
||||
|
@ -1153,9 +1148,9 @@ void Crs_WriteSelectorMyCourses (void)
|
|||
|
||||
/***** Start of selector of courses *****/
|
||||
fprintf (Gbl.F.Out,"<select name=\"CrsCod\""
|
||||
" style=\"width:%upx; margin:1px;\""
|
||||
" style=\"width:175px; margin:1px;\""
|
||||
" onchange=\"document.getElementById('%s').submit();\">",
|
||||
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
|
||||
Gbl.FormId);
|
||||
|
||||
if (Gbl.Usrs.Me.MyCourses.Num)
|
||||
{
|
||||
|
|
|
@ -95,20 +95,18 @@ mysql> DESCRIBE IP_prefs;
|
|||
| UsrCod | int(11) | NO | MUL | -1 | |
|
||||
| LastChange | datetime | NO | MUL | NULL | |
|
||||
| FirstDayOfWeek | tinyint(4) | NO | | 0 | |
|
||||
| Layout | tinyint(4) | NO | | 0 | |
|
||||
| Theme | char(16) | NO | | NULL | |
|
||||
| IconSet | char(16) | NO | | NULL | |
|
||||
| Menu | tinyint(4) | NO | | 0 | |
|
||||
| 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 ("
|
||||
"IP CHAR(15) NOT NULL,"
|
||||
"UsrCod INT NOT NULL DEFAULT -1,"
|
||||
"LastChange DATETIME NOT NULL,"
|
||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||
"Layout TINYINT NOT NULL DEFAULT 0,"
|
||||
"Theme CHAR(16) NOT NULL,"
|
||||
"IconSet CHAR(16) NOT NULL,"
|
||||
"Menu TINYINT NOT NULL DEFAULT 0,"
|
||||
|
@ -2275,7 +2273,6 @@ mysql> DESCRIBE usr_data;
|
|||
| Surname2 | varchar(32) | NO | | NULL | |
|
||||
| FirstName | varchar(32) | NO | | NULL | |
|
||||
| Sex | enum('unknown','female','male') | NO | | unknown | |
|
||||
| Layout | tinyint(4) | NO | MUL | 0 | |
|
||||
| Theme | char(16) | NO | MUL | NULL | |
|
||||
| IconSet | char(16) | NO | MUL | NULL | |
|
||||
| Language | char(2) | NO | MUL | NULL | |
|
||||
|
@ -2302,7 +2299,7 @@ mysql> DESCRIBE usr_data;
|
|||
| NotifNtfEvents | 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 ("
|
||||
"UsrCod INT NOT NULL AUTO_INCREMENT,"
|
||||
|
@ -2312,7 +2309,6 @@ mysql> DESCRIBE usr_data;
|
|||
"Surname2 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',"
|
||||
"Layout TINYINT NOT NULL DEFAULT 0,"
|
||||
"Theme CHAR(16) NOT NULL,"
|
||||
"IconSet CHAR(16) NOT NULL,"
|
||||
"Language CHAR(2) NOT NULL,"
|
||||
|
@ -2338,7 +2334,7 @@ mysql> DESCRIBE usr_data;
|
|||
"SideCols TINYINT NOT NULL DEFAULT 3,"
|
||||
"NotifNtfEvents 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 *****/
|
||||
/*
|
||||
|
|
|
@ -447,14 +447,13 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
sprintf (Query,"UPDATE usr_data"
|
||||
" SET Password='%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',"
|
||||
"LocalAddress='%s',LocalPhone='%s',FamilyAddress='%s',FamilyPhone='%s',OriginPlace='%s',Birthday='%04u-%02u-%02u',Comments='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
UsrDat->Password,
|
||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||
Usr_StringsSexDB[UsrDat->Sex],
|
||||
(unsigned) UsrDat->Prefs.Layout,
|
||||
The_ThemeId[UsrDat->Prefs.Theme],
|
||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||
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.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.Theme = The_THEME_DEFAULT; // Default theme
|
||||
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
||||
|
|
|
@ -132,7 +132,6 @@ struct Globals
|
|||
{
|
||||
Txt_Language_t Language;
|
||||
unsigned FirstDayOfWeek;
|
||||
Lay_Layout_t Layout;
|
||||
Mnu_Menu_t Menu;
|
||||
unsigned SideCols;
|
||||
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 *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS] =
|
||||
{
|
||||
"desktop",
|
||||
"mobile",
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -89,8 +83,7 @@ static void Lay_WriteScriptInit (void);
|
|||
static void Lay_WriteScriptConnectedUsrs (void);
|
||||
static void Lay_WriteScriptCustomDropzone (void);
|
||||
|
||||
static void Lay_WritePageTopHeadingDesktop (void);
|
||||
static void Lay_WritePageTopHeadingMobile (void);
|
||||
static void Lay_WritePageTopHeading (void);
|
||||
|
||||
static void Lay_WriteTitleAction (void);
|
||||
|
||||
|
@ -127,8 +120,7 @@ void Lay_WriteStartOfPage (void)
|
|||
|
||||
/***** Compute connected users *****/
|
||||
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))
|
||||
// Right column visible && There is a course selected
|
||||
Con_ComputeConnectedUsrsBelongingToCurrentCrs ();
|
||||
|
@ -196,10 +188,8 @@ void Lay_WriteStartOfPage (void)
|
|||
Gbl.Prefs.IconsURL);
|
||||
|
||||
/* Style sheet for SWAD */
|
||||
fprintf (Gbl.F.Out,"<link rel=\"StyleSheet\" href=\"%s/%s\" type=\"text/css\" />\n",
|
||||
Cfg_HTTPS_URL_SWAD_PUBLIC,
|
||||
(Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP) ? "swad_desktop.css" :
|
||||
"swad_mobile.css");
|
||||
fprintf (Gbl.F.Out,"<link rel=\"StyleSheet\" href=\"%s/swad_desktop.css\" type=\"text/css\" />\n",
|
||||
Cfg_HTTPS_URL_SWAD_PUBLIC);
|
||||
|
||||
/* Style sheet for Dropzone.js (http://www.dropzonejs.com/) */
|
||||
// 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]);
|
||||
|
||||
/***** Header of layout *****/
|
||||
switch (Gbl.Prefs.Layout)
|
||||
{
|
||||
case Lay_LAYOUT_DESKTOP:
|
||||
Lay_WritePageTopHeadingDesktop ();
|
||||
break;
|
||||
case Lay_LAYOUT_MOBILE:
|
||||
Lay_WritePageTopHeadingMobile ();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
Lay_WritePageTopHeading ();
|
||||
|
||||
/***** 4th row: main zone *****/
|
||||
fprintf (Gbl.F.Out,"<div id=\"main_zone\">");
|
||||
|
||||
/* Left column */
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) // Left column visible
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"LEFT_COL\">");
|
||||
Lay_ShowLeftColumn ();
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
if (Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) // Left column visible
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"LEFT_COL\">");
|
||||
Lay_ShowLeftColumn ();
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
|
||||
/* Right column */
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) // Right column visible
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"RIGHT_COL\">");
|
||||
Lay_ShowRightColumn ();
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
if (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) // Right column visible
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<div class=\"RIGHT_COL\">");
|
||||
Lay_ShowRightColumn ();
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
}
|
||||
|
||||
/* Central (main) part */
|
||||
switch (Gbl.Prefs.SideCols)
|
||||
|
@ -317,47 +295,22 @@ void Lay_WriteStartOfPage (void)
|
|||
fprintf (Gbl.F.Out,"<div id=\"main_zone_central_container\" class=\"%s\">"
|
||||
"<div id=\"main_zone_central_content\">",
|
||||
The_TabOnBgColors[Gbl.Prefs.Theme]);
|
||||
switch (Gbl.Prefs.Layout)
|
||||
|
||||
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL)
|
||||
{
|
||||
case Lay_LAYOUT_DESKTOP:
|
||||
/* Left bar used to expand-contract central zone */
|
||||
/*
|
||||
fprintf (Gbl.F.Out,"<div class=\"MAIN_ZONE_EXPAND\">");
|
||||
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;
|
||||
/* 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 ();
|
||||
|
||||
/* Write warning when degree type does not allow direct login */
|
||||
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
||||
|
||||
|
@ -366,8 +319,7 @@ void Lay_WriteStartOfPage (void)
|
|||
Inf_WriteMsgYouMustReadInfo ();
|
||||
|
||||
/* Write title of the current action */
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||
Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
|
||||
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
|
||||
Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu >= 0)
|
||||
Lay_WriteTitleAction ();
|
||||
|
||||
|
@ -399,26 +351,13 @@ static void Lay_WriteEndOfPage (void)
|
|||
{
|
||||
if (!Gbl.Layout.TablEndWritten)
|
||||
{
|
||||
Gbl.Layout.TablEndWritten = true;
|
||||
fprintf (Gbl.F.Out,"</div>"); // main_zone_canvas
|
||||
|
||||
/*
|
||||
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
|
||||
fprintf (Gbl.F.Out,"</div>" // main_zone_canvas
|
||||
"</div>" // main_zone_central_content
|
||||
"</div>" // main_zone_central_container
|
||||
"</div>" // main_zone_central
|
||||
"</div>"); // main_zone
|
||||
|
||||
/***** End of box that contains the whole page except the foot *****/
|
||||
fprintf (Gbl.F.Out,"</div>\n"); // whole_page_*
|
||||
"</div>" // main_zone
|
||||
"</div>\n"); // whole_page_* (box that contains the whole page except the foot)
|
||||
Gbl.Layout.TablEndWritten = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -514,8 +453,7 @@ static void Lay_WriteScripts (void)
|
|||
}
|
||||
|
||||
/***** Prepare script to draw months *****/
|
||||
if ((Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||
(Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN)) || // Left column visible
|
||||
if ((Gbl.Prefs.SideCols & Lay_SHOW_LEFT_COLUMN) || // Left column visible
|
||||
Gbl.CurrentAct == ActSeeCal ||
|
||||
Gbl.CurrentAct == ActPrnCal)
|
||||
{
|
||||
|
@ -651,13 +589,11 @@ static void Lay_WriteScriptInit (void)
|
|||
|
||||
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");
|
||||
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)) // Right column visible
|
||||
if ((Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN)) // Right column visible
|
||||
Con_WriteScriptClockConnected ();
|
||||
|
||||
// Put the focus on login form
|
||||
|
@ -720,7 +656,7 @@ static void Lay_WriteScriptCustomDropzone (void)
|
|||
/************************ Write top heading of the page **********************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Lay_WritePageTopHeadingDesktop (void)
|
||||
static void Lay_WritePageTopHeading (void)
|
||||
{
|
||||
extern const char *The_ClassHead[The_NUM_THEMES];
|
||||
const char *IdHeadRow1[The_NUM_THEMES] =
|
||||
|
@ -817,71 +753,6 @@ static void Lay_WritePageTopHeadingDesktop (void)
|
|||
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 ***********/
|
||||
/*****************************************************************************/
|
||||
|
@ -1357,7 +1228,8 @@ void Lay_ShowErrorAndExit (const char *Message)
|
|||
/***** End the output *****/
|
||||
if (!Gbl.Layout.HTMLEndWritten)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"</body>\n</html>\n");
|
||||
fprintf (Gbl.F.Out,"</body>\n"
|
||||
"</html>\n");
|
||||
Gbl.Layout.HTMLEndWritten = true;
|
||||
}
|
||||
}
|
||||
|
@ -1408,9 +1280,8 @@ void Lay_ShowAlert (Lay_AlertType_t MsgType,const char *Message)
|
|||
void Lay_RefreshNotifsAndConnected (void)
|
||||
{
|
||||
unsigned NumUsr;
|
||||
bool ShowConnected = (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||
(Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
||||
Gbl.CurrentCrs.Crs.CrsCod > 0); // Right column visible && There is a course selected
|
||||
bool ShowConnected = (Gbl.Prefs.SideCols & Lay_SHOW_RIGHT_COLUMN) &&
|
||||
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?
|
||||
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_Questions_and_problems;
|
||||
|
||||
switch (Gbl.Prefs.Layout)
|
||||
{
|
||||
case Lay_LAYOUT_DESKTOP:
|
||||
Lay_WriteFootFromHTMLFile ();
|
||||
Lay_WriteFootFromHTMLFile ();
|
||||
|
||||
fprintf (Gbl.F.Out,"<div class=\"FOOT CENTER_MIDDLE\""
|
||||
" style=\"padding-bottom:12px;\">");
|
||||
fprintf (Gbl.F.Out,"<div class=\"FOOT CENTER_MIDDLE\""
|
||||
" style=\"padding-bottom:12px;\">");
|
||||
|
||||
/***** Institution and centre hosting the platform *****/
|
||||
fprintf (Gbl.F.Out,"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">"
|
||||
"<img src=\"%s/%s\""
|
||||
" alt=\"%s\" title=\"%s\""
|
||||
" style=\"width:%upx; height:%upx;\" />"
|
||||
"<div>%s</div>"
|
||||
"</a>",
|
||||
Cfg_ABOUT_URL,
|
||||
Gbl.Prefs.IconsURL,Cfg_ABOUT_LOGO,
|
||||
Cfg_ABOUT_NAME,Cfg_ABOUT_NAME,
|
||||
Cfg_ABOUT_LOGO_WIDTH,Cfg_ABOUT_LOGO_HEIGHT,
|
||||
Cfg_ABOUT_NAME);
|
||||
/***** Institution and centre hosting the platform *****/
|
||||
fprintf (Gbl.F.Out,"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">"
|
||||
"<img src=\"%s/%s\""
|
||||
" alt=\"%s\" title=\"%s\""
|
||||
" style=\"width:%upx; height:%upx;\" />"
|
||||
"<div>%s</div>"
|
||||
"</a>",
|
||||
Cfg_ABOUT_URL,
|
||||
Gbl.Prefs.IconsURL,Cfg_ABOUT_LOGO,
|
||||
Cfg_ABOUT_NAME,Cfg_ABOUT_NAME,
|
||||
Cfg_ABOUT_LOGO_WIDTH,Cfg_ABOUT_LOGO_HEIGHT,
|
||||
Cfg_ABOUT_NAME);
|
||||
|
||||
fprintf (Gbl.F.Out,"<div>"
|
||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">%s:</a> "
|
||||
"<a href=\"mailto:%s\" class=\"FOOT\" target=\"_blank\">%s</a>"
|
||||
"</div>",
|
||||
Cfg_HELP_WEB,Txt_Questions_and_problems,
|
||||
Cfg_PLATFORM_RESPONSIBLE_E_MAIL,Cfg_PLATFORM_RESPONSIBLE_E_MAIL);
|
||||
fprintf (Gbl.F.Out,"<div>"
|
||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">%s:</a> "
|
||||
"<a href=\"mailto:%s\" class=\"FOOT\" target=\"_blank\">%s</a>"
|
||||
"</div>",
|
||||
Cfg_HELP_WEB,Txt_Questions_and_problems,
|
||||
Cfg_PLATFORM_RESPONSIBLE_E_MAIL,Cfg_PLATFORM_RESPONSIBLE_E_MAIL);
|
||||
|
||||
/***** About *****/
|
||||
fprintf (Gbl.F.Out,"<div>"
|
||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">",
|
||||
Cfg_ABOUT_SWAD_URL);
|
||||
fprintf (Gbl.F.Out,Txt_About_X,Log_PLATFORM_VERSION);
|
||||
fprintf (Gbl.F.Out,"</a> ");
|
||||
/***** About *****/
|
||||
fprintf (Gbl.F.Out,"<div>"
|
||||
"<a href=\"%s\" class=\"FOOT\" target=\"_blank\">",
|
||||
Cfg_ABOUT_SWAD_URL);
|
||||
fprintf (Gbl.F.Out,Txt_About_X,Log_PLATFORM_VERSION);
|
||||
fprintf (Gbl.F.Out,"</a> ");
|
||||
|
||||
/***** Write time to generate and send page *****/
|
||||
Sta_WriteTimeToGenerateAndSendPage ();
|
||||
/***** Write time to generate and send page *****/
|
||||
Sta_WriteTimeToGenerateAndSendPage ();
|
||||
|
||||
fprintf (Gbl.F.Out,"</div>"
|
||||
"</div>");
|
||||
break;
|
||||
case Lay_LAYOUT_MOBILE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</div>"
|
||||
"</div>");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -1637,81 +1500,6 @@ void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingC
|
|||
"</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 ********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -56,16 +56,6 @@ typedef enum
|
|||
Lay_ERROR = 3,
|
||||
} 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
|
||||
{
|
||||
Lay_NO_BUTTON,
|
||||
|
@ -115,11 +105,6 @@ void Lay_WritePageFooter (void);
|
|||
void Lay_WriteHeaderClassPhoto (unsigned NumColumns,bool PrintView,bool DrawingClassPhoto,
|
||||
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_IndentDependingOnLevel (unsigned Level,bool IsLastItemInLevel[]);
|
||||
|
|
65
swad_menu.c
65
swad_menu.c
|
@ -235,71 +235,6 @@ void Mnu_WriteHorizontalMenuThisTabDesktop (void)
|
|||
"</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) *************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -51,7 +51,6 @@ typedef enum
|
|||
|
||||
void Mnu_WriteVerticalMenuThisTabDesktop (void);
|
||||
void Mnu_WriteHorizontalMenuThisTabDesktop (void);
|
||||
void Mnu_WriteMenuThisTabMobile (void);
|
||||
|
||||
void Mnu_PutIconsToSelectMenu (void);
|
||||
void Mnu_ChangeMenu (void);
|
||||
|
|
|
@ -127,7 +127,6 @@ void Par_GetMainParameters (void)
|
|||
long OtherUsrCod;
|
||||
char LongStr[1+10+1];
|
||||
char YearStr[2+1];
|
||||
Lay_Layout_t LayoutFromForm;
|
||||
|
||||
/***** Reset codes of country, institution, centre, degree and course *****/
|
||||
Gbl.CurrentCty.Cty.CtyCod =
|
||||
|
@ -227,8 +226,6 @@ void Par_GetMainParameters (void)
|
|||
|
||||
/***** Try to get preferences changed from current IP *****/
|
||||
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)...
|
||||
{
|
||||
|
@ -236,20 +233,11 @@ void Par_GetMainParameters (void)
|
|||
if (Gbl.Prefs.Theme == The_THEME_UNKNOWN)
|
||||
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 *****/
|
||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||
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",
|
||||
Gbl.Prefs.IconsURL,Cfg_ICON_FOLDER_ICON_SETS,
|
||||
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,"ses") && // To use an open session when redirecting from one language to another
|
||||
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
|
||||
}
|
||||
PtrSrc = Gbl.QueryString;
|
||||
|
|
|
@ -84,26 +84,20 @@ void Pre_EditPrefs (void)
|
|||
"</tr>"
|
||||
"</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;\">"
|
||||
"<tr>"
|
||||
"<td>");
|
||||
Lay_PutIconsToSelectLayout (); // 3. Layout
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||
{
|
||||
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
|
||||
Mnu_PutIconsToSelectMenu (); // 3. Menu
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td>");
|
||||
Pre_PutIconsToSelectSideCols (); // 4. Side columns
|
||||
fprintf (Gbl.F.Out,"</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>"
|
||||
"</tr>"
|
||||
"</table>");
|
||||
|
@ -135,7 +129,7 @@ void Pre_GetPrefsFromIP (void)
|
|||
if (Gbl.IP[0])
|
||||
{
|
||||
/***** 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'",
|
||||
Gbl.IP);
|
||||
if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get preferences")))
|
||||
|
@ -152,26 +146,20 @@ void Pre_GetPrefsFromIP (void)
|
|||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||
Gbl.Prefs.FirstDayOfWeek = UnsignedNum;
|
||||
|
||||
/* Get layout (row[1]) */
|
||||
Gbl.Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
||||
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
|
||||
if (UnsignedNum < Lay_NUM_LAYOUTS)
|
||||
Gbl.Prefs.Layout = (Lay_Layout_t) UnsignedNum;
|
||||
/* Get theme (row[1]) */
|
||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[1]);
|
||||
|
||||
/* Get theme (row[2]) */
|
||||
Gbl.Prefs.Theme = The_GetThemeFromStr (row[2]);
|
||||
/* Get icon set (row[2]) */
|
||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
||||
|
||||
/* Get icon set (row[3]) */
|
||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[3]);
|
||||
|
||||
/* Get menu (row[4]) */
|
||||
/* Get menu (row[3]) */
|
||||
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)
|
||||
Gbl.Prefs.Menu = (Lay_Layout_t) UnsignedNum;
|
||||
Gbl.Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||
|
||||
/* Get if user wants to show side columns (row[5]) */
|
||||
if (sscanf (row[5],"%u",&Gbl.Prefs.SideCols) == 1)
|
||||
/* Get if user wants to show side columns (row[4]) */
|
||||
if (sscanf (row[4],"%u",&Gbl.Prefs.SideCols) == 1)
|
||||
{
|
||||
if (Gbl.Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
||||
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
@ -193,11 +181,10 @@ void Pre_SetPrefsFromIP (void)
|
|||
char Query[512];
|
||||
|
||||
/***** Update preferences from current IP in database *****/
|
||||
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,FirstDayOfWeek,Layout,Theme,IconSet,Menu,SideCols)"
|
||||
" VALUES ('%s','%ld',NOW(),'%u','%u','%s','%s','%u','%u')",
|
||||
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,FirstDayOfWeek,Theme,IconSet,Menu,SideCols)"
|
||||
" VALUES ('%s','%ld',NOW(),'%u','%s','%s','%u','%u')",
|
||||
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Gbl.Prefs.FirstDayOfWeek,
|
||||
(unsigned) Gbl.Prefs.Layout,
|
||||
The_ThemeId[Gbl.Prefs.Theme],
|
||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||
(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 (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'",
|
||||
Gbl.Prefs.FirstDayOfWeek,
|
||||
(unsigned) Gbl.Prefs.Layout,
|
||||
The_ThemeId[Gbl.Prefs.Theme],
|
||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||
(unsigned) Gbl.Prefs.Menu,
|
||||
|
@ -244,17 +230,12 @@ void Pre_PutSelectorToSelectLanguage (void)
|
|||
{
|
||||
extern const char *Txt_STR_LANG_NAME[Txt_NUM_LANGUAGES];
|
||||
Txt_Language_t Lan;
|
||||
static const unsigned SelectorWidth[Lay_NUM_LAYOUTS] =
|
||||
{
|
||||
112, // Lay_LAYOUT_DESKTOP
|
||||
150, // Lay_LAYOUT_MOBILE
|
||||
};
|
||||
|
||||
Act_FormStart (ActReqChgLan);
|
||||
fprintf (Gbl.F.Out,"<select name=\"Lan\""
|
||||
" style=\"width:%upx; margin:0;\""
|
||||
" style=\"width:112px; margin:0;\""
|
||||
" onchange=\"document.getElementById('%s').submit();\">",
|
||||
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
|
||||
Gbl.FormId);
|
||||
for (Lan = (Txt_Language_t) 0;
|
||||
Lan < Txt_NUM_LANGUAGES;
|
||||
Lan++)
|
||||
|
@ -377,70 +358,6 @@ static void Pre_PutIconsToSelectSideCols (void)
|
|||
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 ***********************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -50,8 +50,6 @@ void Pre_AskChangeLanguage (void);
|
|||
void Pre_ChangeLanguage (void);
|
||||
Txt_Language_t Pre_GetParamLanguage (void);
|
||||
|
||||
void Pre_PutLeftIconToHideShowCols (void);
|
||||
void Pre_PutRigthIconToHideShowCols (void);
|
||||
void Pre_ChangeSideCols (void);
|
||||
void Pre_HideLeftCol (void);
|
||||
void Pre_HideRightCol (void);
|
||||
|
|
|
@ -286,18 +286,12 @@ unsigned Rol_ConvertUnsignedStrToRoles (const char *UnsignedStr)
|
|||
void Rol_PutFormToChangeMyRole (bool FormInHead)
|
||||
{
|
||||
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;
|
||||
|
||||
Act_FormStart (ActChgMyRol);
|
||||
fprintf (Gbl.F.Out,"<select name=\"UsrTyp\"");
|
||||
if (FormInHead)
|
||||
fprintf (Gbl.F.Out," style=\"width:%upx;\"",
|
||||
SelectorWidth[Gbl.Prefs.Layout]);
|
||||
fprintf (Gbl.F.Out," style=\"width:130px;\"");
|
||||
fprintf (Gbl.F.Out," onchange=\"document.getElementById('%s').submit();\">",
|
||||
Gbl.FormId);
|
||||
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_GetAndShowNumUsrsPerLanguage (void);
|
||||
static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void);
|
||||
static void Sta_GetAndShowNumUsrsPerLayout (void);
|
||||
static void Sta_GetAndShowNumUsrsPerTheme (void);
|
||||
static void Sta_GetAndShowNumUsrsPerIconSet (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 *****/
|
||||
Sta_GetAndShowNumUsrsPerFirstDayOfWeek ();
|
||||
break;
|
||||
case Sta_LAYOUTS:
|
||||
/***** Number of users who have chosen a layout *****/
|
||||
Sta_GetAndShowNumUsrsPerLayout ();
|
||||
break;
|
||||
case Sta_THEMES:
|
||||
/***** Number of users who have chosen a theme *****/
|
||||
Sta_GetAndShowNumUsrsPerTheme ();
|
||||
|
@ -7791,7 +7786,7 @@ static void Sta_GetAndShowNumUsrsPerFirstDayOfWeek (void)
|
|||
extern const char *Txt_PERCENT_of_users;
|
||||
unsigned FirstDayOfWeek;
|
||||
char Query[1024];
|
||||
unsigned NumUsrs[Lay_NUM_LAYOUTS];
|
||||
unsigned NumUsrs[7]; // 7: seven days in a week
|
||||
unsigned NumUsrsTotal = 0;
|
||||
|
||||
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 ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* 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 *************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -97,7 +97,7 @@ typedef enum
|
|||
Sta_CLICKS_GBL_PER_COURSE = 23,
|
||||
} Sta_ClicksGroupedBy_t;
|
||||
|
||||
#define Sta_NUM_FIGURES 22
|
||||
#define Sta_NUM_FIGURES 21
|
||||
typedef enum
|
||||
{
|
||||
Sta_USERS, // Number of users
|
||||
|
@ -117,7 +117,6 @@ typedef enum
|
|||
Sta_PRIVACY, // Number of users per privacity
|
||||
Sta_LANGUAGES, // Number of users per language
|
||||
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_ICON_SETS, // Number of users per icon set
|
||||
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>");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************ 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 *************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
void Tab_DrawTabsDeskTop (void);
|
||||
void Tab_DrawTabsMobile (void);
|
||||
void Tab_DrawBreadcrumb (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
|
||||
#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] =
|
||||
{
|
||||
#if L==0
|
||||
|
@ -36735,26 +36671,6 @@ const char *Txt_STAT_USE_STAT_TYPES[Sta_NUM_FIGURES] =
|
|||
"Calendário"
|
||||
#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
|
||||
"Tema (colors)"
|
||||
#elif L==1
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS];
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** 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.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.IconSet = Ico_ICON_SET_DEFAULT;
|
||||
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||
|
@ -403,7 +402,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
|
||||
/***** Get user's data from database *****/
|
||||
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,"
|
||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
|
||||
|
@ -445,18 +444,12 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
/* Get sex */
|
||||
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 */
|
||||
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
||||
for (Theme = (The_Theme_t) 0;
|
||||
Theme < The_NUM_THEMES;
|
||||
Theme++)
|
||||
if (!strcasecmp (row[7],The_ThemeId[Theme]))
|
||||
if (!strcasecmp (row[6],The_ThemeId[Theme]))
|
||||
{
|
||||
UsrDat->Prefs.Theme = Theme;
|
||||
break;
|
||||
|
@ -467,7 +460,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
for (IconSet = (Ico_IconSet_t) 0;
|
||||
IconSet < Ico_NUM_ICON_SETS;
|
||||
IconSet++)
|
||||
if (!strcasecmp (row[8],Ico_IconSetId[IconSet]))
|
||||
if (!strcasecmp (row[7],Ico_IconSetId[IconSet]))
|
||||
{
|
||||
UsrDat->Prefs.IconSet = IconSet;
|
||||
break;
|
||||
|
@ -478,7 +471,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
for (Lan = (Txt_Language_t) 0;
|
||||
Lan < Txt_NUM_LANGUAGES;
|
||||
Lan++)
|
||||
if (!strcasecmp (row[9],Txt_STR_LANG_ID[Lan]))
|
||||
if (!strcasecmp (row[8],Txt_STR_LANG_ID[Lan]))
|
||||
{
|
||||
UsrDat->Prefs.Language = Lan;
|
||||
break;
|
||||
|
@ -486,51 +479,51 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
|
||||
/* Get first day of week */
|
||||
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])
|
||||
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
||||
|
||||
/* 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->PhotoVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[13]);
|
||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[11]);
|
||||
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[12]);
|
||||
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[13]);
|
||||
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[14]);
|
||||
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[15]);
|
||||
|
||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[18]);
|
||||
strncpy (UsrDat->Tch.Office ,row[19],sizeof (UsrDat->Tch.Office ) - 1);
|
||||
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[16]);
|
||||
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[17]);
|
||||
strncpy (UsrDat->Tch.Office ,row[18],sizeof (UsrDat->Tch.Office ) - 1);
|
||||
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';
|
||||
|
||||
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';
|
||||
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';
|
||||
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';
|
||||
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';
|
||||
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';
|
||||
strcpy (StrBirthday,
|
||||
row[26] ? row[26] :
|
||||
row[25] ? row[25] :
|
||||
"0000-00-00");
|
||||
Usr_GetUsrCommentsFromString (row[27] ? row[27] :
|
||||
Usr_GetUsrCommentsFromString (row[26] ? row[26] :
|
||||
"",
|
||||
UsrDat); // Get the comments comunes a todas the courses
|
||||
|
||||
/* Get menu */
|
||||
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)
|
||||
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||
|
||||
/* 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)
|
||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
@ -539,11 +532,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
||||
/* Get on which events I want to be notified inside the platform */
|
||||
if (sscanf (row[30],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||
if (sscanf (row[29],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
||||
|
||||
/* 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;
|
||||
if (UsrDat->Prefs.EmailNtfEvents >= (1 << Ntf_NUM_NOTIFY_EVENTS)) // Maximum binary value for NotifyEvents is 000...0011...11
|
||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||
|
@ -1633,11 +1626,6 @@ void Usr_WriteLoggedUsrHead (void)
|
|||
extern const char *The_ClassUsr[The_NUM_THEMES];
|
||||
extern const char *The_ClassHead[The_NUM_THEMES];
|
||||
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;
|
||||
char PhotoURL[PATH_MAX+1];
|
||||
char UsrName[Usr_MAX_BYTES_NAME+1];
|
||||
|
@ -1668,7 +1656,7 @@ void Usr_WriteLoggedUsrHead (void)
|
|||
if (Gbl.Usrs.Me.UsrDat.FullName[0])
|
||||
{
|
||||
strcpy (UsrName,Gbl.Usrs.Me.UsrDat.FirstName);
|
||||
Str_LimitLengthHTMLStr (UsrName,NumCharsName[Gbl.Prefs.Layout]);
|
||||
Str_LimitLengthHTMLStr (UsrName,12);
|
||||
fprintf (Gbl.F.Out,"%s",UsrName);
|
||||
}
|
||||
|
||||
|
@ -1984,8 +1972,7 @@ void Usr_ChkUsrAndGetUsrData (void)
|
|||
Act_AdjustActionWhenNoUsrLogged ();
|
||||
|
||||
/***** When I change to another tab, go to the first option allowed *****/
|
||||
if (Gbl.CurrentAct == ActMnu &&
|
||||
Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||
if (Gbl.CurrentAct == ActMnu)
|
||||
{
|
||||
if (Gbl.Usrs.Me.Logged)
|
||||
{
|
||||
|
@ -2375,11 +2362,8 @@ static void Usr_SetUsrRoleAndPrefs (void)
|
|||
|
||||
/***** Set preferences from my preferences *****/
|
||||
Gbl.Prefs.FirstDayOfWeek = Gbl.Usrs.Me.UsrDat.Prefs.FirstDayOfWeek;
|
||||
Gbl.Prefs.Layout = Gbl.Usrs.Me.UsrDat.Prefs.Layout;
|
||||
// TODO: Should layout depend on session instead of user prefs?
|
||||
// (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.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;
|
||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||
|
|
|
@ -152,7 +152,6 @@ struct UsrData
|
|||
{
|
||||
Txt_Language_t Language;
|
||||
unsigned FirstDayOfWeek;
|
||||
Lay_Layout_t Layout;
|
||||
The_Theme_t Theme;
|
||||
Ico_IconSet_t IconSet;
|
||||
Mnu_Menu_t Menu;
|
||||
|
|
Loading…
Reference in New Issue