mirror of https://github.com/acanas/swad-core.git
Version 14.51
This commit is contained in:
parent
2bda10d434
commit
f4d8a97900
2
Makefile
2
Makefile
|
@ -36,7 +36,7 @@ OBJS = swad_account.o swad_action.o swad_announcement.o swad_assignment.o swad_a
|
||||||
swad_holiday.o \
|
swad_holiday.o \
|
||||||
swad_icon.o swad_ID.o swad_import.o swad_indicator.o swad_info.o swad_institution.o \
|
swad_icon.o swad_ID.o swad_import.o swad_indicator.o swad_info.o swad_institution.o \
|
||||||
swad_layout.o swad_link.o \
|
swad_layout.o swad_link.o \
|
||||||
swad_mail.o swad_main.o swad_mark.o swad_message.o \
|
swad_mail.o swad_main.o swad_mark.o swad_menu.o swad_message.o \
|
||||||
swad_network.o swad_nickname.o swad_notice.o swad_notification.o \
|
swad_network.o swad_nickname.o swad_notice.o swad_notification.o \
|
||||||
swad_pagination.o swad_parameter.o swad_password.o swad_photo.o swad_place.o swad_plugin.o swad_preference.o \
|
swad_pagination.o swad_parameter.o swad_password.o swad_photo.o swad_place.o swad_plugin.o swad_preference.o \
|
||||||
swad_QR.o \
|
swad_QR.o \
|
||||||
|
|
|
@ -658,15 +658,15 @@ a:hover img.CENTRE_PHOTO_SHOW
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************* Menu fonts ********************************/
|
/********************************* Menu fonts ********************************/
|
||||||
.WHITE_MENU_OFF {color:#4D88A1; font-size:11pt; font-weight:bold; line-height:110%;}
|
.WHITE_MENU_OFF {color:#4D88A1; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.GREY_MENU_OFF {color:#707070; font-size:11pt; font-weight:bold; line-height:110%;}
|
.GREY_MENU_OFF {color:#707070; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.BLUE_MENU_OFF {color:#4D88A1; font-size:11pt; font-weight:bold; line-height:110%;}
|
.BLUE_MENU_OFF {color:#4D88A1; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.YELLOW_MENU_OFF {color:#BD4815; font-size:11pt; font-weight:bold; line-height:110%;}
|
.YELLOW_MENU_OFF {color:#BD4815; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
|
|
||||||
.WHITE_MENU_ON {color:#4D88A1; font-size:11pt; font-weight:bold; line-height:110%;}
|
.WHITE_MENU_ON {color:#4D88A1; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.GREY_MENU_ON {color:#606060; font-size:11pt; font-weight:bold; line-height:110%;}
|
.GREY_MENU_ON {color:#606060; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.BLUE_MENU_ON {color:#4D88A1; font-size:11pt; font-weight:bold; line-height:110%;}
|
.BLUE_MENU_ON {color:#4D88A1; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
.YELLOW_MENU_ON {color:#BD4815; font-size:11pt; font-weight:bold; line-height:110%;}
|
.YELLOW_MENU_ON {color:#BD4815; font-size:10pt; font-weight:bold; line-height:110%;}
|
||||||
|
|
||||||
/********************************* Form fonts ********************************/
|
/********************************* Form fonts ********************************/
|
||||||
.WHITE_FORM {color:#4D88A1; font-size:11pt;}
|
.WHITE_FORM {color:#4D88A1; font-size:11pt;}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 169 B |
Binary file not shown.
After Width: | Height: | Size: 165 B |
|
@ -10441,4 +10441,12 @@ INSERT INTO announcements (Roles,Subject,Content) VALUES ('16','ENCUESTA AN&Oacu
|
||||||
|
|
||||||
SELECT tst_questions.QstCod,tst_questions.AnsType,tst_questions.Shuffle,tst_questions.Stem,tst_questions.Feedback FROM tst_questions,tst_question_tags,tst_tags WHERE tst_questions.CrsCod='5432' AND tst_questions.QstCod NOT IN (SELECT tst_question_tags.QstCod FROM tst_tags,tst_question_tags WHERE tst_tags.CrsCod='5432' AND tst_tags.TagHidden='Y' AND tst_tags.TagCod=tst_question_tags.TagCod) AND tst_questions.QstCod=tst_question_tags.QstCod AND tst_question_tags.TagCod=tst_tags.TagCod AND tst_tags.CrsCod='5432' AND (UNIX_TIMESTAMP(tst_questions.EditTime)>='0' OR UNIX_TIMESTAMP(tst_tags.ChangeTime)>='0') ORDER BY QstCod;
|
SELECT tst_questions.QstCod,tst_questions.AnsType,tst_questions.Shuffle,tst_questions.Stem,tst_questions.Feedback FROM tst_questions,tst_question_tags,tst_tags WHERE tst_questions.CrsCod='5432' AND tst_questions.QstCod NOT IN (SELECT tst_question_tags.QstCod FROM tst_tags,tst_question_tags WHERE tst_tags.CrsCod='5432' AND tst_tags.TagHidden='Y' AND tst_tags.TagCod=tst_question_tags.TagCod) AND tst_questions.QstCod=tst_question_tags.QstCod AND tst_question_tags.TagCod=tst_tags.TagCod AND tst_tags.CrsCod='5432' AND (UNIX_TIMESTAMP(tst_questions.EditTime)>='0' OR UNIX_TIMESTAMP(tst_tags.ChangeTime)>='0') ORDER BY QstCod;
|
||||||
|
|
||||||
|
----- 2015-01-01, swad14.51
|
||||||
|
|
||||||
|
ALTER TABLE usr_data ADD COLUMN Menu TINYINT NOT NULL DEFAULT 0 AFTER Comments;
|
||||||
|
ALTER TABLE usr_data ADD INDEX (Menu);
|
||||||
|
UPDATE usr_data SET Menu=1;
|
||||||
|
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1243','es','N','Cambiar menú');
|
||||||
|
ALTER TABLE IP_prefs ADD COLUMN Menu TINYINT NOT NULL DEFAULT 0 AFTER IconSet;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ CREATE TABLE IF NOT EXISTS IP_prefs (
|
||||||
Layout 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,
|
||||||
SideCols TINYINT NOT NULL,
|
SideCols TINYINT NOT NULL,
|
||||||
PRIMARY KEY(IP),
|
PRIMARY KEY(IP),
|
||||||
INDEX(UsrCod),
|
INDEX(UsrCod),
|
||||||
|
@ -1137,6 +1138,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
OriginPlace VARCHAR(127) NOT NULL,
|
OriginPlace VARCHAR(127) NOT NULL,
|
||||||
Birthday DATE NOT NULL,
|
Birthday DATE NOT NULL,
|
||||||
Comments TEXT NOT NULL,
|
Comments TEXT NOT NULL,
|
||||||
|
Menu TINYINT NOT NULL DEFAULT 0,
|
||||||
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,
|
||||||
|
@ -1146,12 +1148,14 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
||||||
INDEX(Theme),
|
INDEX(Theme),
|
||||||
INDEX(IconSet),
|
INDEX(IconSet),
|
||||||
INDEX(Language),
|
INDEX(Language),
|
||||||
INDEX(SideCols),
|
|
||||||
INDEX(CtyCod),
|
INDEX(CtyCod),
|
||||||
INDEX(InsCtyCod),
|
INDEX(InsCtyCod),
|
||||||
INDEX(InsCod),
|
INDEX(InsCod),
|
||||||
INDEX(DptCod),
|
INDEX(DptCod),
|
||||||
INDEX(CtrCod));
|
INDEX(CtrCod),
|
||||||
|
INDEX(Menu),
|
||||||
|
INDEX(SideCols));
|
||||||
|
);
|
||||||
--
|
--
|
||||||
-- Table usr_emails: stores the users' e-mails
|
-- Table usr_emails: stores the users' e-mails
|
||||||
--
|
--
|
||||||
|
|
|
@ -434,12 +434,12 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
||||||
"Layout,Theme,IconSet,Language,PublicPhoto,"
|
"Layout,Theme,IconSet,Language,PublicPhoto,"
|
||||||
"CtyCod,"
|
"CtyCod,"
|
||||||
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
|
||||||
"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','%c',"
|
"'%u','%s','%s','%s','%c',"
|
||||||
"'%ld',"
|
"'%ld',"
|
||||||
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
||||||
"'%u','-1','0')",
|
"'%u','%u','-1','0')",
|
||||||
UsrDat->EncryptedUsrCod,
|
UsrDat->EncryptedUsrCod,
|
||||||
UsrDat->Password,
|
UsrDat->Password,
|
||||||
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
UsrDat->Surname1,UsrDat->Surname2,UsrDat->FirstName,
|
||||||
|
@ -457,6 +457,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
||||||
UsrDat->Birthday.Year,UsrDat->Birthday.Month,UsrDat->Birthday.Day,
|
UsrDat->Birthday.Year,UsrDat->Birthday.Month,UsrDat->Birthday.Day,
|
||||||
UsrDat->Comments ? UsrDat->Comments :
|
UsrDat->Comments ? UsrDat->Comments :
|
||||||
"",
|
"",
|
||||||
|
Mnu_MENU_DEFAULT,
|
||||||
Cfg_DEFAULT_COLUMNS);
|
Cfg_DEFAULT_COLUMNS);
|
||||||
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (Query,"can not create user");
|
UsrDat->UsrCod = DB_QueryINSERTandReturnCode (Query,"can not create user");
|
||||||
|
|
||||||
|
|
|
@ -1021,6 +1021,7 @@ Profile:
|
||||||
875. ActShoLftCol Show left side column
|
875. ActShoLftCol Show left side column
|
||||||
876. ActShoRgtCol Show right side column
|
876. ActShoRgtCol Show right side column
|
||||||
877. ActChgIco Change icon set
|
877. ActChgIco Change icon set
|
||||||
|
---. ActChgMnu Change menu
|
||||||
879. ActChgNtfPrf Change whether to notify by e-mail new messages
|
879. ActChgNtfPrf Change whether to notify by e-mail new messages
|
||||||
880. ActPrnUsrQR Show my QR code ready to print
|
880. ActPrnUsrQR Show my QR code ready to print
|
||||||
881. ActPrnMyTimTbl Show the timetable listo to impresión of all my courses
|
881. ActPrnMyTimTbl Show the timetable listo to impresión of all my courses
|
||||||
|
@ -2243,6 +2244,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
||||||
/* ActShoLftCol */{ 670,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Prf_ShowLeftCol ,Prf_EditPrefs ,NULL},
|
/* ActShoLftCol */{ 670,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Prf_ShowLeftCol ,Prf_EditPrefs ,NULL},
|
||||||
/* ActShoRgtCol */{ 671,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Prf_ShowRightCol ,Prf_EditPrefs ,NULL},
|
/* ActShoRgtCol */{ 671,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Prf_ShowRightCol ,Prf_EditPrefs ,NULL},
|
||||||
/* ActChgIco */{1092,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ico_ChangeIconSet ,Prf_EditPrefs ,NULL},
|
/* ActChgIco */{1092,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ico_ChangeIconSet ,Prf_EditPrefs ,NULL},
|
||||||
|
/* ActChgMnu */{1243,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Mnu_ChangeMenu ,Prf_EditPrefs ,NULL},
|
||||||
/* ActChgNtfPrf */{ 775,-1,TabPrf,ActEdiPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ntf_ChangeNotifyEvents ,Prf_EditPrefs ,NULL},
|
/* ActChgNtfPrf */{ 775,-1,TabPrf,ActEdiPrf ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ntf_ChangeNotifyEvents ,Prf_EditPrefs ,NULL},
|
||||||
|
|
||||||
/* ActPrnUsrQR */{1022,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,QR_PrintQRCode ,NULL},
|
/* ActPrnUsrQR */{1022,-1,TabPrf,ActFrmUsrAcc ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,QR_PrintQRCode ,NULL},
|
||||||
|
@ -3516,6 +3518,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
||||||
ActRemIDOth, // #1240
|
ActRemIDOth, // #1240
|
||||||
ActNewIDOth, // #1241
|
ActNewIDOth, // #1241
|
||||||
ActSeeSyl, // #1242
|
ActSeeSyl, // #1242
|
||||||
|
ActChgMnu, // #1243
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -71,9 +71,9 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
||||||
|
|
||||||
/* Related with tabs, menus, etc. */
|
/* Related with tabs, menus, etc. */
|
||||||
#define Act_NUM_TABS (1+11)
|
#define Act_NUM_TABS (1+11)
|
||||||
#define Act_NUM_ACTIONS (7+52+15+39+22+17+206+182+94+168+28+74)
|
#define Act_NUM_ACTIONS (7+52+15+39+22+17+206+182+94+168+28+75)
|
||||||
|
|
||||||
#define Act_MAX_ACTION_COD 1242
|
#define Act_MAX_ACTION_COD 1243
|
||||||
|
|
||||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
||||||
|
|
||||||
|
@ -1088,31 +1088,32 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
||||||
#define ActShoLftCol (ActSeeAllStaCrs+49)
|
#define ActShoLftCol (ActSeeAllStaCrs+49)
|
||||||
#define ActShoRgtCol (ActSeeAllStaCrs+50)
|
#define ActShoRgtCol (ActSeeAllStaCrs+50)
|
||||||
#define ActChgIco (ActSeeAllStaCrs+51)
|
#define ActChgIco (ActSeeAllStaCrs+51)
|
||||||
#define ActChgNtfPrf (ActSeeAllStaCrs+52)
|
#define ActChgMnu (ActSeeAllStaCrs+52)
|
||||||
|
#define ActChgNtfPrf (ActSeeAllStaCrs+53)
|
||||||
|
|
||||||
#define ActPrnUsrQR (ActSeeAllStaCrs+53)
|
#define ActPrnUsrQR (ActSeeAllStaCrs+54)
|
||||||
|
|
||||||
#define ActPrnMyTimTbl (ActSeeAllStaCrs+54)
|
#define ActPrnMyTimTbl (ActSeeAllStaCrs+55)
|
||||||
#define ActEdiTut (ActSeeAllStaCrs+55)
|
#define ActEdiTut (ActSeeAllStaCrs+56)
|
||||||
#define ActChgTut (ActSeeAllStaCrs+56)
|
#define ActChgTut (ActSeeAllStaCrs+57)
|
||||||
#define ActReqRemFilBrf (ActSeeAllStaCrs+57)
|
#define ActReqRemFilBrf (ActSeeAllStaCrs+58)
|
||||||
#define ActRemFilBrf (ActSeeAllStaCrs+58)
|
#define ActRemFilBrf (ActSeeAllStaCrs+59)
|
||||||
#define ActRemFolBrf (ActSeeAllStaCrs+59)
|
#define ActRemFolBrf (ActSeeAllStaCrs+60)
|
||||||
#define ActCopBrf (ActSeeAllStaCrs+60)
|
#define ActCopBrf (ActSeeAllStaCrs+61)
|
||||||
#define ActPasBrf (ActSeeAllStaCrs+61)
|
#define ActPasBrf (ActSeeAllStaCrs+62)
|
||||||
#define ActRemTreBrf (ActSeeAllStaCrs+62)
|
#define ActRemTreBrf (ActSeeAllStaCrs+63)
|
||||||
#define ActFrmCreBrf (ActSeeAllStaCrs+63)
|
#define ActFrmCreBrf (ActSeeAllStaCrs+64)
|
||||||
#define ActCreFolBrf (ActSeeAllStaCrs+64)
|
#define ActCreFolBrf (ActSeeAllStaCrs+65)
|
||||||
#define ActCreLnkBrf (ActSeeAllStaCrs+65)
|
#define ActCreLnkBrf (ActSeeAllStaCrs+66)
|
||||||
#define ActRenFolBrf (ActSeeAllStaCrs+66)
|
#define ActRenFolBrf (ActSeeAllStaCrs+67)
|
||||||
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+67)
|
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+68)
|
||||||
#define ActRcvFilBrfCla (ActSeeAllStaCrs+68)
|
#define ActRcvFilBrfCla (ActSeeAllStaCrs+69)
|
||||||
#define ActExpBrf (ActSeeAllStaCrs+69)
|
#define ActExpBrf (ActSeeAllStaCrs+70)
|
||||||
#define ActConBrf (ActSeeAllStaCrs+70)
|
#define ActConBrf (ActSeeAllStaCrs+71)
|
||||||
#define ActZIPBrf (ActSeeAllStaCrs+71)
|
#define ActZIPBrf (ActSeeAllStaCrs+72)
|
||||||
#define ActReqDatBrf (ActSeeAllStaCrs+72)
|
#define ActReqDatBrf (ActSeeAllStaCrs+73)
|
||||||
#define ActChgDatBrf (ActSeeAllStaCrs+73)
|
#define ActChgDatBrf (ActSeeAllStaCrs+74)
|
||||||
#define ActDowBrf (ActSeeAllStaCrs+74)
|
#define ActDowBrf (ActSeeAllStaCrs+75)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/******************************** Public types *******************************/
|
/******************************** Public types *******************************/
|
||||||
|
|
|
@ -35,11 +35,20 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 14.50.4 (2015/01/01)"
|
#define Log_PLATFORM_VERSION "SWAD 14.51 (2015/01/01)"
|
||||||
|
|
||||||
// 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 | tail -1
|
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h | tail -1
|
||||||
/*
|
/*
|
||||||
|
Version 14.51 :Jan 01, 2014 Users can select horizontal or vertical menu. (172958 lines)
|
||||||
|
1 change necessary in Makefile:
|
||||||
|
Add swad_menu.o to list of object files
|
||||||
|
4 changes necessary in database:
|
||||||
|
ALTER TABLE usr_data ADD COLUMN Menu TINYINT NOT NULL DEFAULT 0 AFTER Comments;
|
||||||
|
ALTER TABLE usr_data ADD INDEX (Menu);
|
||||||
|
UPDATE usr_data SET Menu=1;
|
||||||
|
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1243','es','N','Cambiar menú');
|
||||||
|
|
||||||
Version 14.50.4 :Jan 01, 2014 Changes in preferences and photos. (172705 lines)
|
Version 14.50.4 :Jan 01, 2014 Changes in preferences and photos. (172705 lines)
|
||||||
Version 14.50.3 :Jan 01, 2014 Changes in layout of preferences. (172691 lines)
|
Version 14.50.3 :Jan 01, 2014 Changes in layout of preferences. (172691 lines)
|
||||||
Version 14.50.2 :Jan 01, 2014 Changes in CSS. (172739 lines)
|
Version 14.50.2 :Jan 01, 2014 Changes in CSS. (172739 lines)
|
||||||
|
|
|
@ -113,9 +113,10 @@ mysql> DESCRIBE IP_prefs;
|
||||||
| Layout | 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 | |
|
||||||
| SideCols | tinyint(4) | NO | | NULL | |
|
| SideCols | tinyint(4) | NO | | NULL | |
|
||||||
+------------+------------+------+-----+---------+-------+
|
+------------+------------+------+-----+---------+-------+
|
||||||
7 rows in set (0.00 sec)
|
8 rows in set (0.00 sec)
|
||||||
*/
|
*/
|
||||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
|
||||||
"IP CHAR(15) NOT NULL,"
|
"IP CHAR(15) NOT NULL,"
|
||||||
|
@ -124,6 +125,7 @@ mysql> DESCRIBE IP_prefs;
|
||||||
"Layout 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,"
|
||||||
"SideCols TINYINT NOT NULL,"
|
"SideCols TINYINT NOT NULL,"
|
||||||
"PRIMARY KEY (IP),INDEX(UsrCod),INDEX(LastChange))");
|
"PRIMARY KEY (IP),INDEX(UsrCod),INDEX(LastChange))");
|
||||||
|
|
||||||
|
@ -2280,11 +2282,12 @@ mysql> DESCRIBE usr_data;
|
||||||
| OriginPlace | varchar(127) | NO | | NULL | |
|
| OriginPlace | varchar(127) | NO | | NULL | |
|
||||||
| Birthday | date | NO | | NULL | |
|
| Birthday | date | NO | | NULL | |
|
||||||
| Comments | text | NO | | NULL | |
|
| Comments | text | NO | | NULL | |
|
||||||
|
| Menu | tinyint(4) | NO | MUL | 0 | |
|
||||||
| SideCols | tinyint(4) | NO | MUL | 3 | |
|
| SideCols | tinyint(4) | NO | MUL | 3 | |
|
||||||
| 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)
|
34 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,"
|
||||||
|
@ -2317,10 +2320,11 @@ mysql> DESCRIBE usr_data;
|
||||||
"OriginPlace VARCHAR(127) NOT NULL,"
|
"OriginPlace VARCHAR(127) NOT NULL,"
|
||||||
"Birthday DATE NOT NULL,"
|
"Birthday DATE NOT NULL,"
|
||||||
"Comments TEXT NOT NULL,"
|
"Comments TEXT NOT NULL,"
|
||||||
|
"Menu TINYINT NOT NULL DEFAULT 0,"
|
||||||
"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(SideCols),INDEX(CtyCod),INDEX(InsCtyCod),INDEX(InsCod),INDEX(DptCod),INDEX(CtrCod))");
|
"PRIMARY KEY(UsrCod),UNIQUE INDEX(EncryptedUsrCod),INDEX(Layout),INDEX(Theme),INDEX(IconSet),INDEX(Language),INDEX(CtyCod),INDEX(InsCtyCod),INDEX(InsCod),INDEX(DptCod),INDEX(CtrCod),INDEX(Menu),INDEX(SideCols))");
|
||||||
|
|
||||||
/***** Table usr_emails *****/
|
/***** Table usr_emails *****/
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -130,6 +130,7 @@ void Gbl_InitializeGlobals (void)
|
||||||
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
||||||
Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
||||||
Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language;
|
Gbl.Prefs.Language = Txt_Current_CGI_SWAD_Language;
|
||||||
|
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT; // Default menu
|
||||||
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS; // Show both side columns, left and right
|
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS; // Show both side columns, left and right
|
||||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||||
Gbl.Prefs.IconsURL,
|
Gbl.Prefs.IconsURL,
|
||||||
|
|
|
@ -51,9 +51,10 @@
|
||||||
#include "swad_institution.h"
|
#include "swad_institution.h"
|
||||||
#include "swad_layout.h"
|
#include "swad_layout.h"
|
||||||
#include "swad_link.h"
|
#include "swad_link.h"
|
||||||
#include "swad_message.h"
|
|
||||||
#include "swad_mail.h"
|
#include "swad_mail.h"
|
||||||
#include "swad_mark.h"
|
#include "swad_mark.h"
|
||||||
|
#include "swad_message.h"
|
||||||
|
#include "swad_menu.h"
|
||||||
#include "swad_password.h"
|
#include "swad_password.h"
|
||||||
#include "swad_photo.h"
|
#include "swad_photo.h"
|
||||||
#include "swad_place.h"
|
#include "swad_place.h"
|
||||||
|
@ -136,6 +137,7 @@ struct Globals
|
||||||
Ico_IconSet_t IconSet;
|
Ico_IconSet_t IconSet;
|
||||||
char PathIconSet[PATH_MAX+1];
|
char PathIconSet[PATH_MAX+1];
|
||||||
char IconsURL[PATH_MAX+1];
|
char IconsURL[PATH_MAX+1];
|
||||||
|
Mnu_Menu_t Menu;
|
||||||
} Prefs;
|
} Prefs;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
|
@ -63,8 +63,6 @@ const char *Lay_LayoutIcons[Lay_NUM_LAYOUTS] =
|
||||||
/****************************** Private constants ****************************/
|
/****************************** Private constants ****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define HORIZONTAL_MENU 1
|
|
||||||
|
|
||||||
const char *Lay_TabIcons[Act_NUM_TABS] =
|
const char *Lay_TabIcons[Act_NUM_TABS] =
|
||||||
{
|
{
|
||||||
/* TabUnk */ NULL,
|
/* TabUnk */ NULL,
|
||||||
|
@ -109,20 +107,14 @@ static void Lay_DrawTabsDeskTop (void);
|
||||||
static void Lay_DrawTabsMobile (void);
|
static void Lay_DrawTabsMobile (void);
|
||||||
static bool Lay_CheckIfICanViewTab (Act_Tab_t Tab);
|
static bool Lay_CheckIfICanViewTab (Act_Tab_t Tab);
|
||||||
static void Lay_DrawBreadcrumb (void);
|
static void Lay_DrawBreadcrumb (void);
|
||||||
#ifndef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteVerticalMenuThisTabDesktop (void);
|
static void Lay_WriteVerticalMenuThisTabDesktop (void);
|
||||||
#endif
|
|
||||||
#ifdef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteHorizontalMenuThisTabDesktop (void);
|
static void Lay_WriteHorizontalMenuThisTabDesktop (void);
|
||||||
#endif
|
|
||||||
static void Lay_WriteMenuThisTabMobile (void);
|
static void Lay_WriteMenuThisTabMobile (void);
|
||||||
|
|
||||||
static void Lay_WriteBreadcrumbHome (void);
|
static void Lay_WriteBreadcrumbHome (void);
|
||||||
static void Lay_WriteBreadcrumbTab (void);
|
static void Lay_WriteBreadcrumbTab (void);
|
||||||
static void Lay_WriteBreadcrumbAction (void);
|
static void Lay_WriteBreadcrumbAction (void);
|
||||||
#ifndef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteTitleAction (void);
|
static void Lay_WriteTitleAction (void);
|
||||||
#endif
|
|
||||||
|
|
||||||
static void Lay_ShowLeftColumn (void);
|
static void Lay_ShowLeftColumn (void);
|
||||||
static void Lay_ShowRightColumn (void);
|
static void Lay_ShowRightColumn (void);
|
||||||
|
@ -304,14 +296,14 @@ void Lay_WriteStartOfPage (void)
|
||||||
Prf_PutLeftIconToHideShowCols ();
|
Prf_PutLeftIconToHideShowCols ();
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
|
||||||
#ifndef HORIZONTAL_MENU
|
if (Gbl.Prefs.Menu == Mnu_MENU_VERTICAL)
|
||||||
/* Tab content, including always vertical menu (left) and always main zone (right) */
|
{
|
||||||
fprintf (Gbl.F.Out,"<td style=\"width:140px; text-align:left;"
|
/* Tab content, including vertical menu (left) and main zone (right) */
|
||||||
" vertical-align:top;\">");
|
fprintf (Gbl.F.Out,"<td style=\"width:140px; text-align:left;"
|
||||||
Lay_WriteVerticalMenuThisTabDesktop ();
|
" vertical-align:top;\">");
|
||||||
fprintf (Gbl.F.Out,"</td>");
|
Lay_WriteVerticalMenuThisTabDesktop ();
|
||||||
#endif
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Lay_LAYOUT_MOBILE:
|
case Lay_LAYOUT_MOBILE:
|
||||||
/* Tab content */
|
/* Tab content */
|
||||||
|
@ -335,10 +327,9 @@ void Lay_WriteStartOfPage (void)
|
||||||
fprintf (Gbl.F.Out,"<td style=\"padding:0 10px 10px 10px;"
|
fprintf (Gbl.F.Out,"<td style=\"padding:0 10px 10px 10px;"
|
||||||
" text-align:left; vertical-align:top;\">");
|
" text-align:left; vertical-align:top;\">");
|
||||||
|
|
||||||
#ifdef HORIZONTAL_MENU
|
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
Gbl.Prefs.Menu == Mnu_MENU_HORIZONTAL)
|
||||||
Lay_WriteHorizontalMenuThisTabDesktop ();
|
Lay_WriteHorizontalMenuThisTabDesktop ();
|
||||||
#endif
|
|
||||||
|
|
||||||
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin ();
|
||||||
|
|
||||||
|
@ -346,12 +337,11 @@ void Lay_WriteStartOfPage (void)
|
||||||
if (Gbl.CurrentCrs.Info.ShowMsgMustBeRead)
|
if (Gbl.CurrentCrs.Info.ShowMsgMustBeRead)
|
||||||
Inf_WriteMsgYouMustReadInfo ();
|
Inf_WriteMsgYouMustReadInfo ();
|
||||||
|
|
||||||
#ifndef HORIZONTAL_MENU
|
|
||||||
/* Write title of the current action */
|
/* Write title of the current action */
|
||||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP &&
|
||||||
Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu >= 0)
|
Gbl.Prefs.Menu == Mnu_MENU_VERTICAL &&
|
||||||
|
Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu >= 0)
|
||||||
Lay_WriteTitleAction ();
|
Lay_WriteTitleAction ();
|
||||||
#endif
|
|
||||||
|
|
||||||
Gbl.Layout.WritingHTMLStart = false;
|
Gbl.Layout.WritingHTMLStart = false;
|
||||||
Gbl.Layout.HTMLStartWritten = true;
|
Gbl.Layout.HTMLStartWritten = true;
|
||||||
|
@ -1132,7 +1122,6 @@ static void Lay_DrawBreadcrumb (void)
|
||||||
/************* Write the menu of current tab (desktop layout) ****************/
|
/************* Write the menu of current tab (desktop layout) ****************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#ifndef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteVerticalMenuThisTabDesktop (void)
|
static void Lay_WriteVerticalMenuThisTabDesktop (void)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassMenuOn[The_NUM_THEMES];
|
extern const char *The_ClassMenuOn[The_NUM_THEMES];
|
||||||
|
@ -1220,13 +1209,11 @@ static void Lay_WriteVerticalMenuThisTabDesktop (void)
|
||||||
/***** List end *****/
|
/***** List end *****/
|
||||||
fprintf (Gbl.F.Out,"</ul>");
|
fprintf (Gbl.F.Out,"</ul>");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/********** Write horizontal menu of current tab (desktop layout) ************/
|
/********** Write horizontal menu of current tab (desktop layout) ************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#ifdef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteHorizontalMenuThisTabDesktop (void)
|
static void Lay_WriteHorizontalMenuThisTabDesktop (void)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassMenuOn[The_NUM_THEMES];
|
extern const char *The_ClassMenuOn[The_NUM_THEMES];
|
||||||
|
@ -1293,7 +1280,6 @@ static void Lay_WriteHorizontalMenuThisTabDesktop (void)
|
||||||
fprintf (Gbl.F.Out,"</ul>"
|
fprintf (Gbl.F.Out,"</ul>"
|
||||||
"</div>");
|
"</div>");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/************* Write the menu of current tab (mobile layout) *****************/
|
/************* Write the menu of current tab (mobile layout) *****************/
|
||||||
|
@ -1419,7 +1405,6 @@ static void Lay_WriteBreadcrumbAction (void)
|
||||||
/*********** Write icon and title associated to the current action ***********/
|
/*********** Write icon and title associated to the current action ***********/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#ifndef HORIZONTAL_MENU
|
|
||||||
static void Lay_WriteTitleAction (void)
|
static void Lay_WriteTitleAction (void)
|
||||||
{
|
{
|
||||||
extern const char *The_ClassTitleAction[The_NUM_THEMES];
|
extern const char *The_ClassTitleAction[The_NUM_THEMES];
|
||||||
|
@ -1446,7 +1431,6 @@ static void Lay_WriteTitleAction (void)
|
||||||
/***** Container end *****/
|
/***** Container end *****/
|
||||||
fprintf (Gbl.F.Out,"</div>");
|
fprintf (Gbl.F.Out,"</div>");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/***************************** Show left column ******************************/
|
/***************************** Show left column ******************************/
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "swad_global.h"
|
#include "swad_global.h"
|
||||||
#include "swad_layout.h"
|
#include "swad_layout.h"
|
||||||
#include "swad_notification.h"
|
#include "swad_notification.h"
|
||||||
|
#include "swad_menu.h"
|
||||||
#include "swad_parameter.h"
|
#include "swad_parameter.h"
|
||||||
#include "swad_preference.h"
|
#include "swad_preference.h"
|
||||||
#include "swad_text.h"
|
#include "swad_text.h"
|
||||||
|
@ -53,6 +54,7 @@ extern struct Globals Gbl;
|
||||||
/****************************** Private prototypes ***************************/
|
/****************************** Private prototypes ***************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static void Prf_PutIconsToSelectSideCols (void);
|
||||||
static void Prf_UpdateSideColsOnUsrDataTable (void);
|
static void Prf_UpdateSideColsOnUsrDataTable (void);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -85,11 +87,17 @@ void Prf_EditPrefs (void)
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
"<td>");
|
"<td>");
|
||||||
The_PutIconsToSelectTheme ();
|
The_PutIconsToSelectTheme ();
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
"<td>");
|
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||||
Prf_PutIconsToSelectSideCols ();
|
{
|
||||||
fprintf (Gbl.F.Out,"</td>"
|
fprintf (Gbl.F.Out,"<td>");
|
||||||
"</tr>"
|
Mnu_PutIconsToSelectMenu ();
|
||||||
|
fprintf (Gbl.F.Out,"</td>"
|
||||||
|
"<td>");
|
||||||
|
Prf_PutIconsToSelectSideCols ();
|
||||||
|
fprintf (Gbl.F.Out,"</td>");
|
||||||
|
}
|
||||||
|
fprintf (Gbl.F.Out,"</tr>"
|
||||||
"</table>");
|
"</table>");
|
||||||
|
|
||||||
if (Gbl.Usrs.Me.Logged)
|
if (Gbl.Usrs.Me.Logged)
|
||||||
|
@ -118,7 +126,7 @@ void Prf_GetPrefsFromIP (void)
|
||||||
if (Gbl.IP[0])
|
if (Gbl.IP[0])
|
||||||
{
|
{
|
||||||
/***** Get preferences from database *****/
|
/***** Get preferences from database *****/
|
||||||
sprintf (Query,"SELECT Layout,Theme,IconSet,SideCols"
|
sprintf (Query,"SELECT Layout,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")))
|
||||||
|
@ -141,8 +149,14 @@ void Prf_GetPrefsFromIP (void)
|
||||||
/* Get icon set (row[2]) */
|
/* Get icon set (row[2]) */
|
||||||
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
Gbl.Prefs.IconSet = Ico_GetIconSetFromStr (row[2]);
|
||||||
|
|
||||||
/* Get if user wants to show side columns (row[3]) */
|
/* Get menu (row[3]) */
|
||||||
if (sscanf (row[3],"%u",&Gbl.Prefs.SideCols) == 1)
|
Gbl.Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||||
|
if (sscanf (row[3],"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||||
|
Gbl.Prefs.Menu = (Lay_Layout_t) UnsignedNum;
|
||||||
|
|
||||||
|
/* 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)
|
if (Gbl.Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
||||||
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
Gbl.Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||||
|
@ -164,23 +178,25 @@ void Prf_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,Layout,Theme,IconSet,SideCols)"
|
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,Layout,Theme,IconSet,Menu,SideCols)"
|
||||||
" VALUES ('%s','%ld',NOW(),'%u','%s','%s','%u')",
|
" VALUES ('%s','%ld',NOW(),'%u','%s','%s','%u','%u')",
|
||||||
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||||
(unsigned) Gbl.Prefs.Layout,
|
(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,
|
||||||
Gbl.Prefs.SideCols);
|
Gbl.Prefs.SideCols);
|
||||||
DB_QueryREPLACE (Query,"can not store preferences from current IP address");
|
DB_QueryREPLACE (Query,"can not store preferences from current IP address");
|
||||||
|
|
||||||
/***** 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 Layout='%u',Theme='%s',IconSet='%s',SideCols='%u'"
|
sprintf (Query,"UPDATE IP_prefs SET Layout='%u',Theme='%s',IconSet='%s',Menu='%u',SideCols='%u'"
|
||||||
" WHERE UsrCod='%ld'",
|
" WHERE UsrCod='%ld'",
|
||||||
(unsigned) Gbl.Prefs.Layout,
|
(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,
|
||||||
Gbl.Prefs.SideCols,
|
Gbl.Prefs.SideCols,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
DB_QueryUPDATE (Query,"can not update your preferences");
|
DB_QueryUPDATE (Query,"can not update your preferences");
|
||||||
|
@ -320,7 +336,7 @@ Txt_Language_t Prf_GetParamLanguage (void)
|
||||||
/************ Put icons to select the layout of the side columns *************/
|
/************ Put icons to select the layout of the side columns *************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
void Prf_PutIconsToSelectSideCols (void)
|
static void Prf_PutIconsToSelectSideCols (void)
|
||||||
{
|
{
|
||||||
extern const char *Txt_Columns;
|
extern const char *Txt_Columns;
|
||||||
extern const char *Txt_LAYOUT_SIDE_COLUMNS[4];
|
extern const char *Txt_LAYOUT_SIDE_COLUMNS[4];
|
||||||
|
|
|
@ -50,7 +50,6 @@ void Prf_AskChangeLanguage (void);
|
||||||
void Prf_ChangeLanguage (void);
|
void Prf_ChangeLanguage (void);
|
||||||
Txt_Language_t Prf_GetParamLanguage (void);
|
Txt_Language_t Prf_GetParamLanguage (void);
|
||||||
|
|
||||||
void Prf_PutIconsToSelectSideCols (void);
|
|
||||||
void Prf_PutLeftIconToHideShowCols (void);
|
void Prf_PutLeftIconToHideShowCols (void);
|
||||||
void Prf_PutRigthIconToHideShowCols (void);
|
void Prf_PutRigthIconToHideShowCols (void);
|
||||||
void Prf_ChangeSideCols (void);
|
void Prf_ChangeSideCols (void);
|
||||||
|
|
65
swad_text.c
65
swad_text.c
|
@ -75,6 +75,7 @@
|
||||||
#include "swad_forum.h"
|
#include "swad_forum.h"
|
||||||
#include "swad_holiday.h"
|
#include "swad_holiday.h"
|
||||||
#include "swad_info.h"
|
#include "swad_info.h"
|
||||||
|
#include "swad_menu.h"
|
||||||
#include "swad_notification.h"
|
#include "swad_notification.h"
|
||||||
#include "swad_photo.h"
|
#include "swad_photo.h"
|
||||||
#include "swad_QR.h"
|
#include "swad_QR.h"
|
||||||
|
@ -15515,6 +15516,70 @@ const char *Txt_maximum =
|
||||||
"máximo";
|
"máximo";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_Menu =
|
||||||
|
#if L==0
|
||||||
|
"Menú";
|
||||||
|
#elif L==1
|
||||||
|
"Menü";
|
||||||
|
#elif L==2
|
||||||
|
"Menu";
|
||||||
|
#elif L==3
|
||||||
|
"Menú";
|
||||||
|
#elif L==4
|
||||||
|
"Menu";
|
||||||
|
#elif L==5
|
||||||
|
"Menú"; // Okoteve traducción
|
||||||
|
#elif L==6
|
||||||
|
"Menu";
|
||||||
|
#elif L==7
|
||||||
|
"Menu";
|
||||||
|
#elif L==8
|
||||||
|
"Menu";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *Txt_MENU_NAMES[Mnu_NUM_MENUS] =
|
||||||
|
{
|
||||||
|
#if L==0
|
||||||
|
"Horitzontal"
|
||||||
|
#elif L==1
|
||||||
|
"Horizontal"
|
||||||
|
#elif L==2
|
||||||
|
"Horizontal"
|
||||||
|
#elif L==3
|
||||||
|
"Horizontal"
|
||||||
|
#elif L==4
|
||||||
|
"Horizontal"
|
||||||
|
#elif L==5
|
||||||
|
"Horizontal" // Okoteve traducción
|
||||||
|
#elif L==6
|
||||||
|
"Orizzontale"
|
||||||
|
#elif L==7
|
||||||
|
"Poziomy"
|
||||||
|
#elif L==8
|
||||||
|
"Horizontal"
|
||||||
|
#endif
|
||||||
|
,
|
||||||
|
#if L==0
|
||||||
|
"Vertical"
|
||||||
|
#elif L==1
|
||||||
|
"Vertikal"
|
||||||
|
#elif L==2
|
||||||
|
"Vertical"
|
||||||
|
#elif L==3
|
||||||
|
"Vertical"
|
||||||
|
#elif L==4
|
||||||
|
"Vertical"
|
||||||
|
#elif L==5
|
||||||
|
"Vertical" // Okoteve traducción
|
||||||
|
#elif L==6
|
||||||
|
"Verticale"
|
||||||
|
#elif L==7
|
||||||
|
"Pionowy"
|
||||||
|
#elif L==8
|
||||||
|
"Vertical"
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
18
swad_user.c
18
swad_user.c
|
@ -266,8 +266,9 @@ 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.Layout = Lay_LAYOUT_DEFAULT;
|
UsrDat->Prefs.Layout = Lay_LAYOUT_DEFAULT;
|
||||||
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
UsrDat->Prefs.Theme = The_THEME_DEFAULT;
|
||||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
|
||||||
UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT;
|
UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT;
|
||||||
|
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||||
|
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||||
UsrDat->Prefs.EmailNtfEvents = 0; // By default, don't notify anything
|
UsrDat->Prefs.EmailNtfEvents = 0; // By default, don't notify anything
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -394,7 +395,7 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
"Layout,Theme,IconSet,Language,Photo,PublicPhoto,"
|
"Layout,Theme,IconSet,Language,Photo,PublicPhoto,"
|
||||||
"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,"
|
||||||
"SideCols,NotifNtfEvents,EmailNtfEvents"
|
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
|
||||||
" FROM usr_data WHERE UsrCod='%ld'",
|
" FROM usr_data WHERE UsrCod='%ld'",
|
||||||
UsrDat->UsrCod);
|
UsrDat->UsrCod);
|
||||||
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's data");
|
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's data");
|
||||||
|
@ -494,8 +495,14 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||||
"",
|
"",
|
||||||
UsrDat); // Get the comments comunes a todas the courses
|
UsrDat); // Get the comments comunes a todas the courses
|
||||||
|
|
||||||
|
/* Get menu */
|
||||||
|
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||||
|
if (sscanf (row[26],"%u",&UnsignedNum) == 1)
|
||||||
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
||||||
|
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
|
||||||
|
|
||||||
/* Get if user wants to show side columns */
|
/* Get if user wants to show side columns */
|
||||||
if (sscanf (row[26],"%u",&UsrDat->Prefs.SideCols) == 1)
|
if (sscanf (row[27],"%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;
|
||||||
|
@ -504,10 +511,10 @@ 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 by e-mail */
|
/* Get on which events I want to be notified by e-mail */
|
||||||
if (sscanf (row[27],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
if (sscanf (row[28],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||||
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
||||||
|
|
||||||
if (sscanf (row[28],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
if (sscanf (row[29],"%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;
|
||||||
|
@ -2191,6 +2198,7 @@ static void Usr_SetUsrRoleAndPrefs (void)
|
||||||
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]);
|
||||||
|
|
||||||
|
Gbl.Prefs.Menu = Gbl.Usrs.Me.UsrDat.Prefs.Menu;
|
||||||
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
Gbl.Prefs.SideCols = Gbl.Usrs.Me.UsrDat.Prefs.SideCols;
|
||||||
|
|
||||||
/***** Get my last data *****/
|
/***** Get my last data *****/
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "swad_degree.h"
|
#include "swad_degree.h"
|
||||||
#include "swad_icon.h"
|
#include "swad_icon.h"
|
||||||
#include "swad_layout.h"
|
#include "swad_layout.h"
|
||||||
|
#include "swad_menu.h"
|
||||||
#include "swad_nickname.h"
|
#include "swad_nickname.h"
|
||||||
#include "swad_role.h"
|
#include "swad_role.h"
|
||||||
#include "swad_scope.h"
|
#include "swad_scope.h"
|
||||||
|
@ -149,8 +150,9 @@ struct UsrData
|
||||||
Txt_Language_t Language;
|
Txt_Language_t Language;
|
||||||
Lay_Layout_t Layout;
|
Lay_Layout_t Layout;
|
||||||
The_Theme_t Theme;
|
The_Theme_t Theme;
|
||||||
unsigned SideCols;
|
|
||||||
Ico_IconSet_t IconSet;
|
Ico_IconSet_t IconSet;
|
||||||
|
Mnu_Menu_t Menu;
|
||||||
|
unsigned SideCols;
|
||||||
unsigned NotifNtfEvents; // One bit activated for each type of event
|
unsigned NotifNtfEvents; // One bit activated for each type of event
|
||||||
unsigned EmailNtfEvents; // One bit activated for each type of event
|
unsigned EmailNtfEvents; // One bit activated for each type of event
|
||||||
} Prefs;
|
} Prefs;
|
||||||
|
|
Loading…
Reference in New Issue