mirror of https://github.com/acanas/swad-core.git
Version 15.42
This commit is contained in:
parent
0b13d86fc2
commit
0936bb7bc2
|
@ -7,6 +7,7 @@ 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,
|
||||
|
@ -1127,6 +1128,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
|||
Theme CHAR(16) NOT NULL,
|
||||
IconSet CHAR(16) NOT NULL,
|
||||
Language CHAR(2) NOT NULL,
|
||||
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
|
||||
Photo CHAR(43) NOT NULL,
|
||||
PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',
|
||||
ProfileVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',
|
||||
|
@ -1154,6 +1156,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
|
|||
INDEX(Theme),
|
||||
INDEX(IconSet),
|
||||
INDEX(Language),
|
||||
INDEX(FirstDayOfWeek),
|
||||
INDEX(CtyCod),
|
||||
INDEX(InsCtyCod),
|
||||
INDEX(InsCod),
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include "swad_account.h"
|
||||
#include "swad_announcement.h"
|
||||
#include "swad_calendar.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_enrollment.h"
|
||||
#include "swad_global.h"
|
||||
|
@ -433,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,PhotoVisibility,ProfileVisibility,"
|
||||
"Layout,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','%s','%s',"
|
||||
"'%u','%s','%s','%s','%u','%s','%s',"
|
||||
"'%ld',"
|
||||
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
|
||||
"'%u','%u','-1','0')",
|
||||
|
@ -450,6 +451,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
|
|||
The_ThemeId[UsrDat->Prefs.Theme],
|
||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||
Cal_FIRST_DAY_OF_WEEK_DEFAULT,
|
||||
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
||||
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
||||
UsrDat->CtyCod,
|
||||
|
|
|
@ -1273,6 +1273,7 @@ Profile:
|
|||
1078. ActChgThe Change theme
|
||||
1079. ActReqChgLan Ask if change language
|
||||
1080. ActChgLan Change language
|
||||
-----> 1080. ActChg1stDay Change first day of the week
|
||||
1081. ActChgCol Change side columns
|
||||
1082. ActHidLftCol Hide left side column
|
||||
1083. ActHidRgtCol Hide right side column
|
||||
|
@ -2754,6 +2755,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
/* 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},
|
||||
/* ActChg1stDay */{1484,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Cal_ChangeFirstDayOfWeek ,Pre_EditPrefs ,NULL},
|
||||
/* ActChgCol */{ 674,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_ChangeSideCols ,Pre_EditPrefs ,NULL},
|
||||
/* ActHidLftCol */{ 668,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_HideLeftCol ,Pre_EditPrefs ,NULL},
|
||||
/* ActHidRgtCol */{ 669,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_HideRightCol ,Pre_EditPrefs ,NULL},
|
||||
|
@ -4278,6 +4280,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
|
|||
ActNewMaiOth, // #1481
|
||||
ActNewMaiStd, // #1482
|
||||
ActNewMaiTch, // #1483
|
||||
ActChg1stDay, // #1484
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -70,9 +70,9 @@ 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+182+154+171+27+79)
|
||||
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+154+171+27+80)
|
||||
|
||||
#define Act_MAX_ACTION_COD 1483
|
||||
#define Act_MAX_ACTION_COD 1484
|
||||
|
||||
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
|
||||
|
||||
|
@ -1314,38 +1314,39 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
|
|||
#define ActChgThe (ActSeeAllStaCrs+47)
|
||||
#define ActReqChgLan (ActSeeAllStaCrs+48)
|
||||
#define ActChgLan (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 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 ActPrnUsrQR (ActSeeAllStaCrs+58)
|
||||
#define ActPrnUsrQR (ActSeeAllStaCrs+59)
|
||||
|
||||
#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)
|
||||
#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)
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
|
|
|
@ -28,7 +28,11 @@
|
|||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_exam.h"
|
||||
#include "swad_calendar.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
#include "swad_parameter.h"
|
||||
#include "swad_preference.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
|
@ -40,10 +44,103 @@ extern struct Globals Gbl;
|
|||
/**************************** Private constants ******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
const bool Cal_DayIsValidAsFirstDayOfWeek[7] =
|
||||
{
|
||||
true, // 0: monday
|
||||
false, // 1: tuesday
|
||||
false, // 2: wednesday
|
||||
false, // 3: thursday
|
||||
false, // 4: friday
|
||||
false, // 5: saturday
|
||||
true, // 6: sunday
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static unsigned Cal_GetParamFirstDayOfWeek (void);
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** Put icons to select the first day of the week ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Cal_PutIconsToSelectFirstDayOfWeek (void)
|
||||
{
|
||||
extern const char *Txt_Calendar;
|
||||
extern const char *Txt_First_day_of_the_week;
|
||||
extern const char *Txt_DAYS_SMALL[7];
|
||||
unsigned FirstDayOfWeek;
|
||||
|
||||
Lay_StartRoundFrameTable (NULL,2,Txt_Calendar);
|
||||
fprintf (Gbl.F.Out,"<tr>");
|
||||
for (FirstDayOfWeek = 0; // Monday
|
||||
FirstDayOfWeek <= 6; // Sunday
|
||||
FirstDayOfWeek++)
|
||||
if (Cal_DayIsValidAsFirstDayOfWeek[FirstDayOfWeek])
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<td class=\"%s\">",
|
||||
FirstDayOfWeek == Gbl.Prefs.FirstDayOfWeek ? "LAYOUT_ON" :
|
||||
"LAYOUT_OFF");
|
||||
Act_FormStart (ActChg1stDay);
|
||||
Par_PutHiddenParamUnsigned ("FirstDayOfWeek",FirstDayOfWeek);
|
||||
fprintf (Gbl.F.Out,"<input type=\"image\" src=\"%s/first-day-of-week-%u-64x64.png\""
|
||||
" alt=\"%s\" title=\"%s: %s\" class=\"ICON32x32B\""
|
||||
" style=\"margin:0 auto;\" />",
|
||||
Gbl.Prefs.IconsURL,
|
||||
FirstDayOfWeek,
|
||||
Txt_DAYS_SMALL[FirstDayOfWeek],
|
||||
Txt_First_day_of_the_week,Txt_DAYS_SMALL[FirstDayOfWeek]);
|
||||
Act_FormEnd ();
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</tr>");
|
||||
Lay_EndRoundFrameTable ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************* Change first day of week **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Cal_ChangeFirstDayOfWeek (void)
|
||||
{
|
||||
char Query[512];
|
||||
|
||||
/***** Get param with icon set *****/
|
||||
Gbl.Prefs.FirstDayOfWeek = Cal_GetParamFirstDayOfWeek ();
|
||||
|
||||
/***** Store icon set in database *****/
|
||||
if (Gbl.Usrs.Me.Logged)
|
||||
{
|
||||
sprintf (Query,"UPDATE usr_data SET FirstDayOfWeek='%u'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Gbl.Prefs.FirstDayOfWeek,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update your preference about first day of week");
|
||||
}
|
||||
|
||||
/***** Set preferences from current IP *****/
|
||||
Pre_SetPrefsFromIP ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*********************** Get parameter with icon set *************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static unsigned Cal_GetParamFirstDayOfWeek (void)
|
||||
{
|
||||
char UnsignedStr[10+1];
|
||||
unsigned UnsignedNum;
|
||||
unsigned FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||
|
||||
Par_GetParToText ("FirstDayOfWeek",UnsignedStr,10);
|
||||
if (sscanf (UnsignedStr,"%u",&UnsignedNum) == 1)
|
||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||
FirstDayOfWeek = UnsignedNum;
|
||||
|
||||
return FirstDayOfWeek;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Draw current month ****************************/
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
/***************************** Public constants ******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Cal_FIRST_DAY_OF_WEEK_DEFAULT 0 // Monday
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Public types ********************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -39,6 +41,9 @@
|
|||
/***************************** Public prototypes *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Cal_PutIconsToSelectFirstDayOfWeek (void);
|
||||
void Cal_ChangeFirstDayOfWeek (void);
|
||||
|
||||
void Cal_DrawCurrentMonth (void);
|
||||
void Cal_DrawCalendar (void);
|
||||
|
||||
|
|
|
@ -111,11 +111,17 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.41 (2015/11/21)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 15.42 (2015/11/21)"
|
||||
|
||||
// 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.42: Nov 21, 2015 New option in preferences to select first day of the week. (187520 lines)
|
||||
3 changes necessary in database:
|
||||
ALTER TABLE IP_prefs ADD COLUMN FirstDayOfWeek TINYINT NOT NULL DEFAULT 0 AFTER LastChange;
|
||||
ALTER TABLE usr_data ADD COLUMN FirstDayOfWeek TINYINT NOT NULL DEFAULT 0 AFTER Language,ADD INDEX (FirstDayOfWeek);
|
||||
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1484','es','N','Cambiar primer día de semana');
|
||||
|
||||
Version 15.41: Nov 21, 2015 Javascript code to draw a month with sunday as the first day of a week. (187316 lines)
|
||||
Version 15.40.8: Nov 20, 2015 Password is requested only one time when creating a new account. (187309 lines)
|
||||
Version 15.40.7: Nov 20, 2015 New help button to register students in courses without them. (187319 lines)
|
||||
|
|
|
@ -105,7 +105,8 @@ void Cty_SeeCtyWithPendingInss (void)
|
|||
" FROM institutions,countries"
|
||||
" WHERE (institutions.Status & %u)<>0"
|
||||
" AND institutions.CtyCod=countries.CtyCod"
|
||||
" GROUP BY institutions.CtyCod ORDER BY countries.Name_%s",
|
||||
" GROUP BY institutions.CtyCod"
|
||||
" ORDER BY countries.Name_%s",
|
||||
(unsigned) Ins_STATUS_BIT_PENDING,
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language]);
|
||||
break;
|
||||
|
@ -320,8 +321,10 @@ static void Cty_Configuration (bool PrintView)
|
|||
"</tr>",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_Shortcut,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCty.Cty.CtyCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCty.Cty.CtyCod);
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentCty.Cty.CtyCod);
|
||||
|
||||
if (PrintView)
|
||||
{
|
||||
|
|
|
@ -354,8 +354,10 @@ static void Crs_Configuration (bool PrintView)
|
|||
"</tr>",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_Shortcut,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCrs.Crs.CrsCod);
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentCrs.Crs.CrsCod);
|
||||
|
||||
if (PrintView)
|
||||
{
|
||||
|
|
|
@ -88,24 +88,26 @@ void DB_CreateTablesIfNotExist (void)
|
|||
/***** Table IP_prefs *****/
|
||||
/*
|
||||
mysql> DESCRIBE IP_prefs;
|
||||
+------------+------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+------------+------------+------+-----+---------+-------+
|
||||
| IP | char(15) | NO | PRI | NULL | |
|
||||
| UsrCod | int(11) | NO | MUL | -1 | |
|
||||
| LastChange | datetime | NO | MUL | NULL | |
|
||||
| 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 | |
|
||||
+------------+------------+------+-----+---------+-------+
|
||||
8 rows in set (0.00 sec)
|
||||
+----------------+------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+----------------+------------+------+-----+---------+-------+
|
||||
| IP | char(15) | NO | PRI | NULL | |
|
||||
| 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)
|
||||
*/
|
||||
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,"
|
||||
|
@ -2277,6 +2279,7 @@ mysql> DESCRIBE usr_data;
|
|||
| Theme | char(16) | NO | MUL | NULL | |
|
||||
| IconSet | char(16) | NO | MUL | NULL | |
|
||||
| Language | char(2) | NO | MUL | NULL | |
|
||||
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
|
||||
| Photo | char(43) | NO | | NULL | |
|
||||
| PhotoVisibility | enum('user','course','system','world') | NO | | user | |
|
||||
| ProfileVisibility | enum('user','course','system','world') | NO | | user | |
|
||||
|
@ -2299,7 +2302,7 @@ mysql> DESCRIBE usr_data;
|
|||
| NotifNtfEvents | int(11) | NO | | 0 | |
|
||||
| EmailNtfEvents | int(11) | NO | | 0 | |
|
||||
+-------------------+----------------------------------------+------+-----+---------+----------------+
|
||||
32 rows in set (0.00 sec)
|
||||
33 rows in set (0.00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_data ("
|
||||
"UsrCod INT NOT NULL AUTO_INCREMENT,"
|
||||
|
@ -2313,6 +2316,7 @@ mysql> DESCRIBE usr_data;
|
|||
"Theme CHAR(16) NOT NULL,"
|
||||
"IconSet CHAR(16) NOT NULL,"
|
||||
"Language CHAR(2) NOT NULL,"
|
||||
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
|
||||
"Photo CHAR(43) NOT NULL,"
|
||||
"PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',"
|
||||
"ProfileVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',"
|
||||
|
@ -2334,7 +2338,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(CtyCod),INDEX(InsCtyCod),INDEX(InsCod),INDEX(DptCod),INDEX(CtrCod),INDEX(Menu),INDEX(SideCols))");
|
||||
"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))");
|
||||
|
||||
/***** Table usr_emails *****/
|
||||
/*
|
||||
|
|
|
@ -414,8 +414,10 @@ static void Deg_Configuration (bool PrintView)
|
|||
"</tr>",
|
||||
The_ClassForm[Gbl.Prefs.Theme],
|
||||
Txt_Shortcut,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentDeg.Deg.DegCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentDeg.Deg.DegCod);
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
|
||||
if (PrintView)
|
||||
{
|
||||
|
|
|
@ -447,7 +447,7 @@ 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',PhotoVisibility='%s',ProfileVisibility='%s',"
|
||||
"Layout='%u',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'",
|
||||
|
@ -458,6 +458,7 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
The_ThemeId[UsrDat->Prefs.Theme],
|
||||
Ico_IconSetId[UsrDat->Prefs.IconSet],
|
||||
Txt_STR_LANG_ID[UsrDat->Prefs.Language],
|
||||
UsrDat->Prefs.FirstDayOfWeek,
|
||||
Pri_VisibilityDB[UsrDat->PhotoVisibility],
|
||||
Pri_VisibilityDB[UsrDat->ProfileVisibility],
|
||||
UsrDat->CtyCod,
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <unistd.h> // For getpid
|
||||
|
||||
#include "swad_action.h"
|
||||
#include "swad_calendar.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_constant.h"
|
||||
#include "swad_exam.h"
|
||||
|
@ -125,14 +126,15 @@ void Gbl_InitializeGlobals (void)
|
|||
|
||||
Gbl.HiddenParamsInsertedIntoDB = false;
|
||||
|
||||
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.SideCols = Cfg_DEFAULT_COLUMNS; // Show both side columns, left and right
|
||||
Gbl.Prefs.Theme = The_THEME_DEFAULT; // Default theme
|
||||
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
|
||||
sprintf (Gbl.Prefs.IconsURL,"%s/%s",
|
||||
Cfg_HTTPS_URL_SWAD_PUBLIC,Cfg_FOLDER_PUBLIC_ICON);
|
||||
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
|
||||
sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
|
||||
Gbl.Prefs.IconsURL,
|
||||
Cfg_ICON_FOLDER_THEMES,
|
||||
|
|
|
@ -130,15 +130,16 @@ struct Globals
|
|||
} Imported;
|
||||
struct
|
||||
{
|
||||
Txt_Language_t Language;
|
||||
unsigned FirstDayOfWeek;
|
||||
Lay_Layout_t Layout;
|
||||
Mnu_Menu_t Menu;
|
||||
unsigned SideCols;
|
||||
The_Theme_t Theme;
|
||||
char PathTheme[PATH_MAX+1];
|
||||
Txt_Language_t Language;
|
||||
unsigned SideCols;
|
||||
Ico_IconSet_t IconSet;
|
||||
char PathIconSet[PATH_MAX+1];
|
||||
char IconsURL[PATH_MAX+1];
|
||||
Mnu_Menu_t Menu;
|
||||
} Prefs;
|
||||
|
||||
struct
|
||||
|
|
10
swad_icon.c
10
swad_icon.c
|
@ -46,7 +46,7 @@ extern struct Globals Gbl;
|
|||
/******************************** Private constants **************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define MAX_ICON_SET_ID 16
|
||||
#define Ico_MAX_BYTES_ICON_SET_ID 16
|
||||
|
||||
const char *Ico_IconSetId[Ico_NUM_ICON_SETS] =
|
||||
{
|
||||
|
@ -129,17 +129,17 @@ void Ico_ChangeIconSet (void)
|
|||
|
||||
Ico_IconSet_t Ico_GetParamIconSet (void)
|
||||
{
|
||||
char IconSetId[MAX_ICON_SET_ID+1];
|
||||
char IconSetId[Ico_MAX_BYTES_ICON_SET_ID+1];
|
||||
Ico_IconSet_t IconSet;
|
||||
|
||||
Par_GetParToText ("IconSet",IconSetId,MAX_ICON_SET_ID);
|
||||
Par_GetParToText ("IconSet",IconSetId,Ico_MAX_BYTES_ICON_SET_ID);
|
||||
for (IconSet = (Ico_IconSet_t) 0;
|
||||
IconSet < Ico_NUM_ICON_SETS;
|
||||
IconSet++)
|
||||
if (!strcmp (IconSetId,Ico_IconSetId[IconSet]))
|
||||
return IconSet;
|
||||
|
||||
return Ico_ICON_SET_UNKNOWN;
|
||||
return Ico_ICON_SET_DEFAULT;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -156,5 +156,5 @@ Ico_IconSet_t Ico_GetIconSetFromStr (const char *Str)
|
|||
if (!strcasecmp (Str,Ico_IconSetId[IconSet]))
|
||||
return IconSet;
|
||||
|
||||
return Ico_ICON_SET_UNKNOWN;
|
||||
return Ico_ICON_SET_DEFAULT;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,6 @@ typedef enum
|
|||
{
|
||||
Ico_ICON_SET_AWESOME = 0,
|
||||
Ico_ICON_SET_NUVOLA = 1,
|
||||
Ico_ICON_SET_UNKNOWN = 2,
|
||||
} Ico_IconSet_t;
|
||||
#define Ico_ICON_SET_DEFAULT Ico_ICON_SET_AWESOME
|
||||
|
||||
|
|
|
@ -1721,31 +1721,39 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
|
|||
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" :
|
||||
"");
|
||||
if (FilterFromToSubquery[0])
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod"
|
||||
" FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod='%ld'%s"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod AND msg_snt.CrsCod='%ld'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod='%ld'"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s"
|
||||
" ORDER BY msg_rcv.MsgCod DESC",
|
||||
UsrCod,StrUnreadMsg,FilterCrsCod,
|
||||
FilterFromToSubquery);
|
||||
else
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt"
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod"
|
||||
" FROM msg_rcv,msg_snt"
|
||||
" WHERE msg_rcv.UsrCod='%ld'%s"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod AND msg_snt.CrsCod='%ld'"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.CrsCod='%ld'"
|
||||
" ORDER BY msg_rcv.MsgCod DESC",
|
||||
UsrCod,StrUnreadMsg,
|
||||
FilterCrsCod);
|
||||
break;
|
||||
case Msg_MESSAGES_SENT:
|
||||
if (FilterFromToSubquery[0])
|
||||
sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod FROM msg_snt,msg_rcv,usr_data"
|
||||
" WHERE msg_snt.UsrCod='%ld' AND msg_snt.CrsCod='%ld'"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod AND msg_rcv.UsrCod=usr_data.UsrCod%s"
|
||||
sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod"
|
||||
" FROM msg_snt,msg_rcv,usr_data"
|
||||
" WHERE msg_snt.UsrCod='%ld'"
|
||||
" AND msg_snt.CrsCod='%ld'"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.UsrCod=usr_data.UsrCod%s"
|
||||
" ORDER BY msg_snt.MsgCod DESC",
|
||||
UsrCod,FilterCrsCod,
|
||||
FilterFromToSubquery);
|
||||
else
|
||||
sprintf (PtrQuery,"SELECT MsgCod FROM msg_snt"
|
||||
sprintf (PtrQuery,"SELECT MsgCod"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod='%ld' AND CrsCod='%ld'"
|
||||
" ORDER BY MsgCod DESC",
|
||||
UsrCod,FilterCrsCod);
|
||||
|
@ -1761,9 +1769,11 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
|
|||
{
|
||||
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" :
|
||||
"");
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod FROM msg_rcv,msg_snt,usr_data"
|
||||
sprintf (PtrQuery,"SELECT msg_rcv.MsgCod"
|
||||
" FROM msg_rcv,msg_snt,usr_data"
|
||||
" WHERE msg_rcv.UsrCod='%ld'%s"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod AND msg_snt.UsrCod=usr_data.UsrCod%s"
|
||||
" AND msg_rcv.MsgCod=msg_snt.MsgCod"
|
||||
" AND msg_snt.UsrCod=usr_data.UsrCod%s"
|
||||
" ORDER BY msg_rcv.MsgCod DESC",
|
||||
UsrCod,StrUnreadMsg,
|
||||
FilterFromToSubquery);
|
||||
|
@ -1772,7 +1782,8 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
|
|||
{
|
||||
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND Open='N'" :
|
||||
"");
|
||||
sprintf (PtrQuery,"SELECT MsgCod FROM msg_rcv"
|
||||
sprintf (PtrQuery,"SELECT MsgCod"
|
||||
" FROM msg_rcv"
|
||||
" WHERE UsrCod='%ld'%s"
|
||||
" ORDER BY MsgCod DESC",
|
||||
UsrCod,StrUnreadMsg);
|
||||
|
@ -1780,14 +1791,17 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
|
|||
break;
|
||||
case Msg_MESSAGES_SENT:
|
||||
if (FilterFromToSubquery[0])
|
||||
sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod FROM msg_snt,msg_rcv,usr_data"
|
||||
sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod"
|
||||
" FROM msg_snt,msg_rcv,usr_data"
|
||||
" WHERE msg_snt.UsrCod='%ld'"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod AND msg_rcv.UsrCod=usr_data.UsrCod%s"
|
||||
" AND msg_snt.MsgCod=msg_rcv.MsgCod"
|
||||
" AND msg_rcv.UsrCod=usr_data.UsrCod%s"
|
||||
" ORDER BY msg_snt.MsgCod DESC",
|
||||
UsrCod,
|
||||
FilterFromToSubquery);
|
||||
else
|
||||
sprintf (PtrQuery,"SELECT MsgCod FROM msg_snt"
|
||||
sprintf (PtrQuery,"SELECT MsgCod"
|
||||
" FROM msg_snt"
|
||||
" WHERE UsrCod='%ld'"
|
||||
" ORDER BY MsgCod DESC",
|
||||
UsrCod);
|
||||
|
@ -1797,7 +1811,8 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
|
|||
}
|
||||
|
||||
if (Gbl.Msg.FilterContent[0])
|
||||
sprintf (Query,"SELECT MsgCod FROM msg_content"
|
||||
sprintf (Query,"SELECT MsgCod"
|
||||
" FROM msg_content"
|
||||
" WHERE MsgCod IN (%s)"
|
||||
" AND MATCH (Subject,Content) AGAINST ('%s')",
|
||||
SubQuery,
|
||||
|
|
|
@ -156,7 +156,8 @@ long Nck_GetUsrCodFromNickname (const char *Nickname)
|
|||
|
||||
/***** Get user's code from database *****/
|
||||
/* Check if user code from table usr_nicknames is also in table usr_data */
|
||||
sprintf (Query,"SELECT usr_nicknames.UsrCod FROM usr_nicknames,usr_data"
|
||||
sprintf (Query,"SELECT usr_nicknames.UsrCod"
|
||||
" FROM usr_nicknames,usr_data"
|
||||
" WHERE usr_nicknames.Nickname='%s'"
|
||||
" AND usr_nicknames.UsrCod=usr_data.UsrCod",
|
||||
NicknameWithoutArroba);
|
||||
|
|
|
@ -985,7 +985,9 @@ static void Pho_ClearPhotoName (long UsrCod)
|
|||
char Query[128];
|
||||
|
||||
/***** Clear photo name in user's data *****/
|
||||
sprintf (Query,"UPDATE usr_data SET Photo='' WHERE UsrCod='%ld'",UsrCod);
|
||||
sprintf (Query,"UPDATE usr_data SET Photo=''"
|
||||
" WHERE UsrCod='%ld'",
|
||||
UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not clear the name of a user's photo");
|
||||
}
|
||||
|
||||
|
@ -999,7 +1001,8 @@ void Pho_UpdatePhotoName (struct UsrData *UsrDat)
|
|||
char PathPublPhoto[PATH_MAX+1];
|
||||
|
||||
/***** Update photo name in database *****/
|
||||
sprintf (Query,"UPDATE usr_data SET Photo='%s' WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"UPDATE usr_data SET Photo='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Gbl.UniqueNameEncrypted,UsrDat->UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update the name of a user's photo");
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <stdio.h> // For fprintf, etc.
|
||||
#include <string.h>
|
||||
|
||||
#include "swad_calendar.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_global.h"
|
||||
|
@ -67,35 +68,42 @@ void Pre_EditPrefs (void)
|
|||
extern const char *Txt_You_can_only_receive_email_notifications_if_;
|
||||
char MailDomain[Usr_MAX_BYTES_USR_EMAIL+1];
|
||||
|
||||
/***** Language *****/
|
||||
/***** Language and first day of week *****/
|
||||
fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
|
||||
"<tr>"
|
||||
"<td>");
|
||||
Lay_StartRoundFrame (NULL,Txt_Language);
|
||||
Pre_PutSelectorToSelectLanguage ();
|
||||
fprintf (Gbl.F.Out,"<div style=\"height:46px;\">");
|
||||
Pre_PutSelectorToSelectLanguage (); // 1. Language
|
||||
fprintf (Gbl.F.Out,"</div>");
|
||||
Lay_EndRoundFrame ();
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td>");
|
||||
Cal_PutIconsToSelectFirstDayOfWeek (); // 2. First day of week
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>"
|
||||
"</table>");
|
||||
|
||||
/***** Layout, side columns, theme, icon set & menu *****/
|
||||
fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
|
||||
"<tr>"
|
||||
"<td>");
|
||||
Lay_PutIconsToSelectLayout (); // 1. Layout
|
||||
Lay_PutIconsToSelectLayout (); // 3. Layout
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
|
||||
{
|
||||
fprintf (Gbl.F.Out,"<td>");
|
||||
Mnu_PutIconsToSelectMenu (); // 2. Menu
|
||||
Mnu_PutIconsToSelectMenu (); // 4. Menu
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td>");
|
||||
Pre_PutIconsToSelectSideCols (); // 3. Side columns
|
||||
Pre_PutIconsToSelectSideCols (); // 5. Side columns
|
||||
fprintf (Gbl.F.Out,"</td>");
|
||||
}
|
||||
fprintf (Gbl.F.Out,"</tr>"
|
||||
"</table>"
|
||||
"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
|
||||
"<tr>"
|
||||
"<td>");
|
||||
The_PutIconsToSelectTheme (); // 4. Theme
|
||||
fprintf (Gbl.F.Out,"<td>");
|
||||
The_PutIconsToSelectTheme (); // 6. Theme
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"<td>");
|
||||
Ico_PutIconsToSelectIconSet (); // 5. Icon set
|
||||
Ico_PutIconsToSelectIconSet (); // 7. Icon set
|
||||
fprintf (Gbl.F.Out,"</td>"
|
||||
"</tr>"
|
||||
"</table>");
|
||||
|
@ -178,9 +186,10 @@ void Pre_SetPrefsFromIP (void)
|
|||
char Query[512];
|
||||
|
||||
/***** Update preferences from current IP in database *****/
|
||||
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,Layout,Theme,IconSet,Menu,SideCols)"
|
||||
" VALUES ('%s','%ld',NOW(),'%u','%s','%s','%u','%u')",
|
||||
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')",
|
||||
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
Gbl.Prefs.FirstDayOfWeek,
|
||||
(unsigned) Gbl.Prefs.Layout,
|
||||
The_ThemeId[Gbl.Prefs.Theme],
|
||||
Ico_IconSetId[Gbl.Prefs.IconSet],
|
||||
|
@ -191,8 +200,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 Layout='%u',Theme='%s',IconSet='%s',Menu='%u',SideCols='%u'"
|
||||
sprintf (Query,"UPDATE IP_prefs SET FirstDayOfWeek='%u',Layout='%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],
|
||||
|
@ -234,7 +244,8 @@ void Pre_PutSelectorToSelectLanguage (void)
|
|||
};
|
||||
|
||||
Act_FormStart (ActReqChgLan);
|
||||
fprintf (Gbl.F.Out,"<select name=\"Lan\" style=\"width:%upx; margin:0;\""
|
||||
fprintf (Gbl.F.Out,"<select name=\"Lan\""
|
||||
" style=\"width:%upx; margin:0;\""
|
||||
" onchange=\"document.getElementById('%s').submit();\">",
|
||||
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
|
||||
for (Lan = (Txt_Language_t) 0;
|
||||
|
@ -286,11 +297,8 @@ void Pre_AskChangeLanguage (void)
|
|||
void Pre_ChangeLanguage (void)
|
||||
{
|
||||
extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
|
||||
extern const char *Txt_Your_language_has_changed_to_LANGUAGE;
|
||||
extern const char *Txt_The_language_has_changed_to_LANGUAGE;
|
||||
extern const char *Txt_STR_LANG_NAME[Txt_NUM_LANGUAGES];
|
||||
char Query[512];
|
||||
bool MyLanguageHasChanged = false;
|
||||
|
||||
/***** Get param language *****/
|
||||
Gbl.Prefs.Language = Pre_GetParamLanguage ();
|
||||
|
@ -298,20 +306,14 @@ void Pre_ChangeLanguage (void)
|
|||
/***** Store language in database *****/
|
||||
if (Gbl.Usrs.Me.Logged && Gbl.Prefs.Language != Gbl.Usrs.Me.UsrDat.Prefs.Language)
|
||||
{
|
||||
sprintf (Query,"UPDATE usr_data SET Language='%s' WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"UPDATE usr_data SET Language='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update your language");
|
||||
MyLanguageHasChanged = true;
|
||||
}
|
||||
|
||||
/***** Set preferences from current IP *****/
|
||||
Pre_SetPrefsFromIP ();
|
||||
|
||||
/***** Confirmation *****/
|
||||
if (MyLanguageHasChanged)
|
||||
Lay_ShowAlert (Lay_SUCCESS,
|
||||
MyLanguageHasChanged ? Txt_Your_language_has_changed_to_LANGUAGE :
|
||||
Txt_The_language_has_changed_to_LANGUAGE);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -513,7 +515,8 @@ static void Pre_UpdateSideColsOnUsrDataTable (void)
|
|||
{
|
||||
char Query[512];
|
||||
|
||||
sprintf (Query,"UPDATE usr_data SET SideCols='%u' WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"UPDATE usr_data SET SideCols='%u'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Gbl.Prefs.SideCols,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update your preference about side columns");
|
||||
}
|
||||
|
|
|
@ -3734,8 +3734,7 @@ void Rec_UpdateMyOffice (void)
|
|||
Par_GetParToText ("Office",Gbl.Usrs.Me.UsrDat.Tch.Office,Cns_MAX_BYTES_STRING);
|
||||
|
||||
/***** Update office *****/
|
||||
sprintf (Query,"UPDATE usr_data"
|
||||
" SET Office='%s'"
|
||||
sprintf (Query,"UPDATE usr_data SET Office='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Gbl.Usrs.Me.UsrDat.Tch.Office,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
|
@ -3757,8 +3756,7 @@ void Rec_UpdateMyOfficePhone (void)
|
|||
Par_GetParToText ("OfficePhone",Gbl.Usrs.Me.UsrDat.Tch.OfficePhone,Usr_MAX_BYTES_PHONE);
|
||||
|
||||
/***** Update office phone *****/
|
||||
sprintf (Query,"UPDATE usr_data"
|
||||
" SET OfficePhone='%s'"
|
||||
sprintf (Query,"UPDATE usr_data SET OfficePhone='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
Gbl.Usrs.Me.UsrDat.Tch.OfficePhone,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
|
|
100
swad_text.c
100
swad_text.c
|
@ -3578,6 +3578,27 @@ const char *Txt_Calculate_average_photo_of_THE_DEGREE_X =
|
|||
"Calculate average photo of"; // Necessita de tradução
|
||||
#endif
|
||||
|
||||
const char *Txt_Calendar =
|
||||
#if L==0
|
||||
"Calendari";
|
||||
#elif L==1
|
||||
"Kalender";
|
||||
#elif L==2
|
||||
"Calendar";
|
||||
#elif L==3
|
||||
"Calendario";
|
||||
#elif L==4
|
||||
"Calendrier";
|
||||
#elif L==5
|
||||
"Arapapaha";
|
||||
#elif L==6
|
||||
"Calendario";
|
||||
#elif L==7
|
||||
"Kalendarz";
|
||||
#elif L==8
|
||||
"Calendário";
|
||||
#endif
|
||||
|
||||
const char *Txt_Call_the_roll =
|
||||
#if L==0
|
||||
"Passar llista";
|
||||
|
@ -11627,6 +11648,27 @@ const char *Txt_Files_works =
|
|||
"Arquivos trabalhos";
|
||||
#endif
|
||||
|
||||
const char *Txt_First_day_of_the_week =
|
||||
#if L==0
|
||||
"Primer dia de la setmana";
|
||||
#elif L==1
|
||||
"Erster Tag der Woche";
|
||||
#elif L==2
|
||||
"First day of the week";
|
||||
#elif L==3
|
||||
"Primer día de la semana";
|
||||
#elif L==4
|
||||
"Premier jour de la semaine";
|
||||
#elif L==5
|
||||
"Primer día de la semana"; // Okoteve traducción
|
||||
#elif L==6
|
||||
"Primo giorno della settimana";
|
||||
#elif L==7
|
||||
"Pierwszy dzień tygodnia";
|
||||
#elif L==8
|
||||
"Primeiro dia da semana";
|
||||
#endif
|
||||
|
||||
const char *Txt_first_message_not_allowed =
|
||||
#if L==0
|
||||
"primer mensaje no permitido"; // Necessita traduccio
|
||||
|
@ -15133,23 +15175,23 @@ const char *Txt_It_is_optional_to_choose_a_group =
|
|||
|
||||
const char *Txt_Language =
|
||||
#if L==0
|
||||
"Idioma";
|
||||
"Idioma (language)";
|
||||
#elif L==1
|
||||
"Sprache";
|
||||
"Sprache (language)";
|
||||
#elif L==2
|
||||
"Language";
|
||||
#elif L==3
|
||||
"Idioma";
|
||||
"Idioma (language)";
|
||||
#elif L==4
|
||||
"Langue";
|
||||
"Langue (language)";
|
||||
#elif L==5
|
||||
"Ñe'ẽ";
|
||||
"Ñe'ẽ (language)";
|
||||
#elif L==6
|
||||
"Lingua";
|
||||
"Lingua (language)";
|
||||
#elif L==7
|
||||
"Język";
|
||||
"Język (language)";
|
||||
#elif L==8
|
||||
"Lingua";
|
||||
"Lingua (language)";
|
||||
#endif
|
||||
|
||||
const char *Txt_Last_clicks =
|
||||
|
@ -40467,27 +40509,6 @@ const char *Txt_The_integrated_editor_is_not_yet_available =
|
|||
"The integrated editor is not yet available."; // Necessita de tradução
|
||||
#endif
|
||||
|
||||
const char *Txt_The_language_has_changed_to_LANGUAGE =
|
||||
#if L==0
|
||||
"S'ha canviat l'idioma a català.";
|
||||
#elif L==1
|
||||
"Die Sprache ist nun Deutsch.";
|
||||
#elif L==2
|
||||
"The language has changed to English.";
|
||||
#elif L==3
|
||||
"Se ha cambiado el idioma a español.";
|
||||
#elif L==4
|
||||
"La langue a changé au français.";
|
||||
#elif L==5
|
||||
"Pe ñe'ẽ ha moambuepapyre pe avañe'ẽ.";
|
||||
#elif L==6
|
||||
"La lingua è cambiata a italiano.";
|
||||
#elif L==7
|
||||
"Język został zmieniony na polski.";
|
||||
#elif L==8
|
||||
"O idioma mudou para o português.";
|
||||
#endif
|
||||
|
||||
const char *Txt_The_link_X_already_exists = // Warning: it is very important to include %s in the following sentences
|
||||
#if L==0
|
||||
"El enlace <strong>%s</strong> ya existe."; // Necessita traduccio
|
||||
|
@ -51949,27 +51970,6 @@ const char *Txt_Your_comment_has_been_updated =
|
|||
"O seu comentário foi atualizado.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Your_language_has_changed_to_LANGUAGE =
|
||||
#if L==0
|
||||
"El seu idioma ha canviat a català.";
|
||||
#elif L==1
|
||||
"Ihre Sprache ist nun Deutsch.";
|
||||
#elif L==2
|
||||
"Your language has changed to English.";
|
||||
#elif L==3
|
||||
"Su idioma ha cambiado a español.";
|
||||
#elif L==4
|
||||
"Votre langue a changé au français.";
|
||||
#elif L==5
|
||||
"Pe ñe'ẽ ha moambuepapyre pe avañe'ẽ.";
|
||||
#elif L==6
|
||||
"La tua lingua è cambiata a italiano.";
|
||||
#elif L==7
|
||||
"Język został zmieniony na polski.";
|
||||
#elif L==8
|
||||
"Suo idioma mudou para o português.";
|
||||
#endif
|
||||
|
||||
const char *Txt_Your_nickname_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences
|
||||
#if L==0
|
||||
"Su apodo <strong>@%s</strong>"
|
||||
|
|
|
@ -276,7 +276,8 @@ void The_ChangeTheme (void)
|
|||
/***** Store theme in database *****/
|
||||
if (Gbl.Usrs.Me.Logged)
|
||||
{
|
||||
sprintf (Query,"UPDATE usr_data SET Theme='%s' WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"UPDATE usr_data SET Theme='%s'"
|
||||
" WHERE UsrCod='%ld'",
|
||||
The_ThemeId[Gbl.Prefs.Theme],Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update your preference about theme");
|
||||
}
|
||||
|
|
154
swad_user.c
154
swad_user.c
|
@ -36,6 +36,7 @@
|
|||
|
||||
#include "swad_account.h"
|
||||
#include "swad_announcement.h"
|
||||
#include "swad_calendar.h"
|
||||
#include "swad_config.h"
|
||||
#include "swad_connected.h"
|
||||
#include "swad_course.h"
|
||||
|
@ -272,6 +273,7 @@ void Usr_ResetUsrDataExceptUsrCodAndIDs (struct UsrData *UsrDat)
|
|||
UsrDat->Tch.OfficePhone[0] = '\0';
|
||||
|
||||
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;
|
||||
|
@ -359,7 +361,8 @@ void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
|
|||
if (UsrDat->EncryptedUsrCod[0])
|
||||
{
|
||||
/***** Get user's code from database *****/
|
||||
sprintf (Query,"SELECT UsrCod FROM usr_data WHERE EncryptedUsrCod='%s'",
|
||||
sprintf (Query,"SELECT UsrCod FROM usr_data"
|
||||
" WHERE EncryptedUsrCod='%s'",
|
||||
UsrDat->EncryptedUsrCod);
|
||||
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's code");
|
||||
|
||||
|
@ -384,6 +387,7 @@ void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
|
|||
|
||||
void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
||||
{
|
||||
extern const bool Cal_DayIsValidAsFirstDayOfWeek[7];
|
||||
extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
|
||||
extern const char *The_ThemeId[The_NUM_THEMES];
|
||||
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS];
|
||||
|
@ -399,7 +403,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,Photo,PhotoVisibility,ProfileVisibility,"
|
||||
"Layout,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"
|
||||
|
@ -480,47 +484,53 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
break;
|
||||
}
|
||||
|
||||
/* Get rest of data */
|
||||
strncpy (UsrDat->Photo,row[10],sizeof (UsrDat->Photo) - 1);
|
||||
UsrDat->Photo[sizeof (UsrDat->Photo) - 1] = '\0';
|
||||
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]);
|
||||
/* Get first day of week */
|
||||
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
|
||||
if (sscanf (row[10],"%u",&UnsignedNum) == 1)
|
||||
if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
|
||||
UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
|
||||
|
||||
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);
|
||||
/* Get rest of data */
|
||||
strncpy (UsrDat->Photo,row[11],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->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.Office [sizeof (UsrDat->Tch.Office ) - 1] = '\0';
|
||||
strncpy (UsrDat->Tch.OfficePhone,row[19],sizeof (UsrDat->Tch.OfficePhone) - 1);
|
||||
strncpy (UsrDat->Tch.OfficePhone,row[20],sizeof (UsrDat->Tch.OfficePhone) - 1);
|
||||
UsrDat->Tch.OfficePhone[sizeof (UsrDat->Tch.OfficePhone) - 1] = '\0';
|
||||
|
||||
strncpy (UsrDat->LocalAddress ,row[20],sizeof (UsrDat->LocalAddress ) - 1);
|
||||
strncpy (UsrDat->LocalAddress ,row[21],sizeof (UsrDat->LocalAddress ) - 1);
|
||||
UsrDat->LocalAddress [sizeof (UsrDat->LocalAddress ) - 1] = '\0';
|
||||
strncpy (UsrDat->LocalPhone ,row[21],sizeof (UsrDat->LocalPhone ) - 1);
|
||||
strncpy (UsrDat->LocalPhone ,row[22],sizeof (UsrDat->LocalPhone ) - 1);
|
||||
UsrDat->LocalPhone [sizeof (UsrDat->LocalPhone ) - 1] = '\0';
|
||||
strncpy (UsrDat->FamilyAddress,row[22],sizeof (UsrDat->FamilyAddress) - 1);
|
||||
strncpy (UsrDat->FamilyAddress,row[23],sizeof (UsrDat->FamilyAddress) - 1);
|
||||
UsrDat->FamilyAddress[sizeof (UsrDat->FamilyAddress) - 1] = '\0';
|
||||
strncpy (UsrDat->FamilyPhone ,row[23],sizeof (UsrDat->FamilyPhone ) - 1);
|
||||
strncpy (UsrDat->FamilyPhone ,row[24],sizeof (UsrDat->FamilyPhone ) - 1);
|
||||
UsrDat->FamilyPhone [sizeof (UsrDat->FamilyPhone ) - 1] = '\0';
|
||||
strncpy (UsrDat->OriginPlace ,row[24],sizeof (UsrDat->OriginPlace ) - 1);
|
||||
strncpy (UsrDat->OriginPlace ,row[25],sizeof (UsrDat->OriginPlace ) - 1);
|
||||
UsrDat->OriginPlace [sizeof (UsrDat->OriginPlace ) - 1] = '\0';
|
||||
strcpy (StrBirthday,
|
||||
row[25] ? row[25] :
|
||||
row[26] ? row[26] :
|
||||
"0000-00-00");
|
||||
Usr_GetUsrCommentsFromString (row[26] ? row[26] :
|
||||
Usr_GetUsrCommentsFromString (row[27] ? row[27] :
|
||||
"",
|
||||
UsrDat); // Get the comments comunes a todas the courses
|
||||
|
||||
/* Get menu */
|
||||
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
|
||||
if (sscanf (row[27],"%u",&UnsignedNum) == 1)
|
||||
if (sscanf (row[28],"%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[28],"%u",&UsrDat->Prefs.SideCols) == 1)
|
||||
if (sscanf (row[29],"%u",&UsrDat->Prefs.SideCols) == 1)
|
||||
{
|
||||
if (UsrDat->Prefs.SideCols > Lay_SHOW_BOTH_COLUMNS)
|
||||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
@ -529,11 +539,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
|
|||
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
|
||||
|
||||
/* Get on which events I want to be notified inside the platform */
|
||||
if (sscanf (row[29],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||
if (sscanf (row[30],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
|
||||
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
|
||||
|
||||
/* Get on which events I want to be notified by e-mail */
|
||||
if (sscanf (row[30],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
||||
if (sscanf (row[31],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1)
|
||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||
if (UsrDat->Prefs.EmailNtfEvents >= (1 << Ntf_NUM_NOTIFY_EVENTS)) // Maximum binary value for NotifyEvents is 000...0011...11
|
||||
UsrDat->Prefs.EmailNtfEvents = 0;
|
||||
|
@ -3705,7 +3715,11 @@ static void Usr_BuildQueryToGetUsrsLstCrs (Rol_Role_t Role,const char *UsrQuery,
|
|||
}
|
||||
|
||||
/***** The last part of the query is for ordering the list *****/
|
||||
strcat (Query," ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod");
|
||||
strcat (Query," ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3754,7 +3768,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" (SELECT UsrCod FROM usr_data WHERE %s))"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
(unsigned) Role,UsrQuery,
|
||||
(unsigned) Role,UsrQuery,
|
||||
(unsigned) Role,UsrQuery);
|
||||
|
@ -3773,7 +3791,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" WHERE Role='%u' AND Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
(unsigned) Role,
|
||||
(unsigned) Role,
|
||||
(unsigned) Role);
|
||||
|
@ -3816,7 +3838,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
UsrQuery,Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role);
|
||||
|
@ -3854,7 +3880,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role,
|
||||
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role,
|
||||
Gbl.CurrentCty.Cty.CtyCod,(unsigned) Role);
|
||||
|
@ -3894,7 +3924,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
UsrQuery,Gbl.CurrentIns.Ins.InsCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentIns.Ins.InsCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentIns.Ins.InsCod,(unsigned) Role);
|
||||
|
@ -3929,7 +3963,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod,(unsigned) Role,
|
||||
Gbl.CurrentIns.Ins.InsCod,(unsigned) Role,
|
||||
Gbl.CurrentIns.Ins.InsCod,(unsigned) Role);
|
||||
|
@ -3966,7 +4004,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
UsrQuery,Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role);
|
||||
|
@ -3998,7 +4040,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role,
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role,
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,(unsigned) Role);
|
||||
|
@ -4032,7 +4078,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
UsrQuery,Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role,
|
||||
UsrQuery,Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role);
|
||||
|
@ -4058,7 +4108,11 @@ void Usr_GetUsrsLst (Rol_Role_t Role,Sco_Scope_t Scope,const char *UsrQuery,bool
|
|||
" AND crs_usr.Accepted='N')"
|
||||
") AS list_usrs,usr_data"
|
||||
" WHERE list_usrs.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role,
|
||||
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role,
|
||||
Gbl.CurrentDeg.Deg.DegCod,(unsigned) Role);
|
||||
|
@ -4098,8 +4152,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
|||
" WHERE (admin.Scope='Deg'"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod");
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod");
|
||||
break;
|
||||
case Sco_SCOPE_INS:
|
||||
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||
|
@ -4110,8 +4167,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
|||
" AND admin.Scope='Deg')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CTR:
|
||||
|
@ -4122,8 +4182,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
|||
" AND admin.Scope='Deg')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEG:
|
||||
|
@ -4132,8 +4195,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
|||
" WHERE ((admin.Scope='Deg' AND admin.Cod='%ld')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
" ORDER BY "
|
||||
"usr_data.Surname1,"
|
||||
"usr_data.Surname2,"
|
||||
"usr_data.FirstName,"
|
||||
"usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
default: // not aplicable
|
||||
|
|
|
@ -151,6 +151,7 @@ struct UsrData
|
|||
struct
|
||||
{
|
||||
Txt_Language_t Language;
|
||||
unsigned FirstDayOfWeek;
|
||||
Lay_Layout_t Layout;
|
||||
The_Theme_t Theme;
|
||||
Ico_IconSet_t IconSet;
|
||||
|
|
|
@ -2721,7 +2721,8 @@ static int Svc_GetLanguageFromUsrCod (long UsrCod)
|
|||
Txt_Language_t Lan;
|
||||
|
||||
/***** Get user's language *****/
|
||||
sprintf (Query,"SELECT Language FROM usr_data WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"SELECT Language FROM usr_data"
|
||||
" WHERE UsrCod='%ld'",
|
||||
UsrCod);
|
||||
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's language") != 1)
|
||||
return soap_receiver_fault (Gbl.soap,
|
||||
|
@ -2906,7 +2907,8 @@ int swad__sendMessage (struct soap *soap,
|
|||
|
||||
/***** Build query for recipients from database *****/
|
||||
if (ReplyUsrCod > 0)
|
||||
sprintf (Query,"SELECT UsrCod FROM usr_data WHERE UsrCod='%ld'",
|
||||
sprintf (Query,"SELECT UsrCod FROM usr_data"
|
||||
" WHERE UsrCod='%ld'",
|
||||
ReplyUsrCod);
|
||||
else
|
||||
Query[0] = '\0';
|
||||
|
|
Loading…
Reference in New Issue