Version 15.42

This commit is contained in:
Antonio Cañas Vargas 2015-11-21 20:23:28 +01:00
parent 0b13d86fc2
commit 0936bb7bc2
26 changed files with 438 additions and 217 deletions

View File

@ -7,6 +7,7 @@ CREATE TABLE IF NOT EXISTS IP_prefs (
IP CHAR(15) NOT NULL, IP CHAR(15) NOT NULL,
UsrCod INT NOT NULL DEFAULT -1, UsrCod INT NOT NULL DEFAULT -1,
LastChange DATETIME NOT NULL, LastChange DATETIME NOT NULL,
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
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,
@ -1127,6 +1128,7 @@ CREATE TABLE IF NOT EXISTS usr_data (
Theme CHAR(16) NOT NULL, Theme CHAR(16) NOT NULL,
IconSet CHAR(16) NOT NULL, IconSet CHAR(16) NOT NULL,
Language CHAR(2) NOT NULL, Language CHAR(2) NOT NULL,
FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,
Photo CHAR(43) NOT NULL, Photo CHAR(43) NOT NULL,
PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user', PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',
ProfileVisibility 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(Theme),
INDEX(IconSet), INDEX(IconSet),
INDEX(Language), INDEX(Language),
INDEX(FirstDayOfWeek),
INDEX(CtyCod), INDEX(CtyCod),
INDEX(InsCtyCod), INDEX(InsCtyCod),
INDEX(InsCod), INDEX(InsCod),

View File

@ -29,6 +29,7 @@
#include "swad_account.h" #include "swad_account.h"
#include "swad_announcement.h" #include "swad_announcement.h"
#include "swad_calendar.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_enrollment.h" #include "swad_enrollment.h"
#include "swad_global.h" #include "swad_global.h"
@ -433,12 +434,12 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
/***** Insert new user in database *****/ /***** Insert new user in database *****/
/* Insert user's data */ /* Insert user's data */
sprintf (Query,"INSERT INTO usr_data (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex," sprintf (Query,"INSERT INTO usr_data (EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
"Layout,Theme,IconSet,Language,PhotoVisibility,ProfileVisibility," "Layout,Theme,IconSet,Language,FirstDayOfWeek,PhotoVisibility,ProfileVisibility,"
"CtyCod," "CtyCod,"
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments," "LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents)" "Menu,SideCols,NotifNtfEvents,EmailNtfEvents)"
" VALUES ('%s','%s','%s','%s','%s','%s'," " VALUES ('%s','%s','%s','%s','%s','%s',"
"'%u','%s','%s','%s','%s','%s'," "'%u','%s','%s','%s','%u','%s','%s',"
"'%ld'," "'%ld',"
"'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s'," "'%s','%s','%s','%s','%s','%04u-%02u-%02u','%s',"
"'%u','%u','-1','0')", "'%u','%u','-1','0')",
@ -450,6 +451,7 @@ void Acc_CreateNewUsr (struct UsrData *UsrDat)
The_ThemeId[UsrDat->Prefs.Theme], The_ThemeId[UsrDat->Prefs.Theme],
Ico_IconSetId[UsrDat->Prefs.IconSet], Ico_IconSetId[UsrDat->Prefs.IconSet],
Txt_STR_LANG_ID[UsrDat->Prefs.Language], Txt_STR_LANG_ID[UsrDat->Prefs.Language],
Cal_FIRST_DAY_OF_WEEK_DEFAULT,
Pri_VisibilityDB[UsrDat->PhotoVisibility], Pri_VisibilityDB[UsrDat->PhotoVisibility],
Pri_VisibilityDB[UsrDat->ProfileVisibility], Pri_VisibilityDB[UsrDat->ProfileVisibility],
UsrDat->CtyCod, UsrDat->CtyCod,

View File

@ -1273,6 +1273,7 @@ Profile:
1078. ActChgThe Change theme 1078. ActChgThe Change theme
1079. ActReqChgLan Ask if change language 1079. ActReqChgLan Ask if change language
1080. ActChgLan Change language 1080. ActChgLan Change language
-----> 1080. ActChg1stDay Change first day of the week
1081. ActChgCol Change side columns 1081. ActChgCol Change side columns
1082. ActHidLftCol Hide left side column 1082. ActHidLftCol Hide left side column
1083. ActHidRgtCol Hide right 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}, /* ActChgThe */{ 841,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,The_ChangeTheme ,Pre_EditPrefs ,NULL},
/* ActReqChgLan */{ 992,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pre_AskChangeLanguage ,NULL}, /* ActReqChgLan */{ 992,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pre_AskChangeLanguage ,NULL},
/* ActChgLan */{ 654,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_ChangeLanguage ,Pre_EditPrefs ,NULL}, /* ActChgLan */{ 654,-1,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Pre_ChangeLanguage ,Pre_EditPrefs ,NULL},
/* 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}, /* 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}, /* 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}, /* 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 ActNewMaiOth, // #1481
ActNewMaiStd, // #1482 ActNewMaiStd, // #1482
ActNewMaiTch, // #1483 ActNewMaiTch, // #1483
ActChg1stDay, // #1484
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -70,9 +70,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+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 #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 ActChgThe (ActSeeAllStaCrs+47)
#define ActReqChgLan (ActSeeAllStaCrs+48) #define ActReqChgLan (ActSeeAllStaCrs+48)
#define ActChgLan (ActSeeAllStaCrs+49) #define ActChgLan (ActSeeAllStaCrs+49)
#define ActChgCol (ActSeeAllStaCrs+50) #define ActChg1stDay (ActSeeAllStaCrs+50)
#define ActHidLftCol (ActSeeAllStaCrs+51) #define ActChgCol (ActSeeAllStaCrs+51)
#define ActHidRgtCol (ActSeeAllStaCrs+52) #define ActHidLftCol (ActSeeAllStaCrs+52)
#define ActShoLftCol (ActSeeAllStaCrs+53) #define ActHidRgtCol (ActSeeAllStaCrs+53)
#define ActShoRgtCol (ActSeeAllStaCrs+54) #define ActShoLftCol (ActSeeAllStaCrs+54)
#define ActChgIco (ActSeeAllStaCrs+55) #define ActShoRgtCol (ActSeeAllStaCrs+55)
#define ActChgMnu (ActSeeAllStaCrs+56) #define ActChgIco (ActSeeAllStaCrs+56)
#define ActChgNtfPrf (ActSeeAllStaCrs+57) #define ActChgMnu (ActSeeAllStaCrs+57)
#define ActChgNtfPrf (ActSeeAllStaCrs+58)
#define ActPrnUsrQR (ActSeeAllStaCrs+58) #define ActPrnUsrQR (ActSeeAllStaCrs+59)
#define ActPrnMyTimTbl (ActSeeAllStaCrs+59) #define ActPrnMyTimTbl (ActSeeAllStaCrs+60)
#define ActEdiTut (ActSeeAllStaCrs+60) #define ActEdiTut (ActSeeAllStaCrs+61)
#define ActChgTut (ActSeeAllStaCrs+61) #define ActChgTut (ActSeeAllStaCrs+62)
#define ActReqRemFilBrf (ActSeeAllStaCrs+62) #define ActReqRemFilBrf (ActSeeAllStaCrs+63)
#define ActRemFilBrf (ActSeeAllStaCrs+63) #define ActRemFilBrf (ActSeeAllStaCrs+64)
#define ActRemFolBrf (ActSeeAllStaCrs+64) #define ActRemFolBrf (ActSeeAllStaCrs+65)
#define ActCopBrf (ActSeeAllStaCrs+65) #define ActCopBrf (ActSeeAllStaCrs+66)
#define ActPasBrf (ActSeeAllStaCrs+66) #define ActPasBrf (ActSeeAllStaCrs+67)
#define ActRemTreBrf (ActSeeAllStaCrs+67) #define ActRemTreBrf (ActSeeAllStaCrs+68)
#define ActFrmCreBrf (ActSeeAllStaCrs+68) #define ActFrmCreBrf (ActSeeAllStaCrs+69)
#define ActCreFolBrf (ActSeeAllStaCrs+69) #define ActCreFolBrf (ActSeeAllStaCrs+70)
#define ActCreLnkBrf (ActSeeAllStaCrs+70) #define ActCreLnkBrf (ActSeeAllStaCrs+71)
#define ActRenFolBrf (ActSeeAllStaCrs+71) #define ActRenFolBrf (ActSeeAllStaCrs+72)
#define ActRcvFilBrfDZ (ActSeeAllStaCrs+72) #define ActRcvFilBrfDZ (ActSeeAllStaCrs+73)
#define ActRcvFilBrfCla (ActSeeAllStaCrs+73) #define ActRcvFilBrfCla (ActSeeAllStaCrs+74)
#define ActExpBrf (ActSeeAllStaCrs+74) #define ActExpBrf (ActSeeAllStaCrs+75)
#define ActConBrf (ActSeeAllStaCrs+75) #define ActConBrf (ActSeeAllStaCrs+76)
#define ActZIPBrf (ActSeeAllStaCrs+76) #define ActZIPBrf (ActSeeAllStaCrs+77)
#define ActReqDatBrf (ActSeeAllStaCrs+77) #define ActReqDatBrf (ActSeeAllStaCrs+78)
#define ActChgDatBrf (ActSeeAllStaCrs+78) #define ActChgDatBrf (ActSeeAllStaCrs+79)
#define ActDowBrf (ActSeeAllStaCrs+79) #define ActDowBrf (ActSeeAllStaCrs+80)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Public types *******************************/ /******************************** Public types *******************************/

View File

@ -28,7 +28,11 @@
#include <string.h> // For string functions #include <string.h> // For string functions
#include "swad_exam.h" #include "swad_exam.h"
#include "swad_calendar.h"
#include "swad_database.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_parameter.h"
#include "swad_preference.h"
/*****************************************************************************/ /*****************************************************************************/
/************** External global variables from others modules ****************/ /************** External global variables from others modules ****************/
@ -40,10 +44,103 @@ extern struct Globals Gbl;
/**************************** Private constants ******************************/ /**************************** 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 ****************************/ /***************************** 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 ****************************/ /***************************** Draw current month ****************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -31,6 +31,8 @@
/***************************** Public constants ******************************/ /***************************** Public constants ******************************/
/*****************************************************************************/ /*****************************************************************************/
#define Cal_FIRST_DAY_OF_WEEK_DEFAULT 0 // Monday
/*****************************************************************************/ /*****************************************************************************/
/******************************* Public types ********************************/ /******************************* Public types ********************************/
/*****************************************************************************/ /*****************************************************************************/
@ -39,6 +41,9 @@
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Cal_PutIconsToSelectFirstDayOfWeek (void);
void Cal_ChangeFirstDayOfWeek (void);
void Cal_DrawCurrentMonth (void); void Cal_DrawCurrentMonth (void);
void Cal_DrawCalendar (void); void Cal_DrawCalendar (void);

View File

@ -111,11 +111,17 @@
/****************************** Public constants *****************************/ /****************************** 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: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.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&iacute;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.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.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) Version 15.40.7: Nov 20, 2015 New help button to register students in courses without them. (187319 lines)

View File

@ -105,7 +105,8 @@ void Cty_SeeCtyWithPendingInss (void)
" FROM institutions,countries" " FROM institutions,countries"
" WHERE (institutions.Status & %u)<>0" " WHERE (institutions.Status & %u)<>0"
" AND institutions.CtyCod=countries.CtyCod" " 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, (unsigned) Ins_STATUS_BIT_PENDING,
Txt_STR_LANG_ID[Gbl.Prefs.Language]); Txt_STR_LANG_ID[Gbl.Prefs.Language]);
break; break;
@ -320,8 +321,10 @@ static void Cty_Configuration (bool PrintView)
"</tr>", "</tr>",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Shortcut, 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],
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCty.Cty.CtyCod); Gbl.CurrentCty.Cty.CtyCod,
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
Gbl.CurrentCty.Cty.CtyCod);
if (PrintView) if (PrintView)
{ {

View File

@ -354,8 +354,10 @@ static void Crs_Configuration (bool PrintView)
"</tr>", "</tr>",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Shortcut, 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],
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod,
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
Gbl.CurrentCrs.Crs.CrsCod);
if (PrintView) if (PrintView)
{ {

View File

@ -88,24 +88,26 @@ void DB_CreateTablesIfNotExist (void)
/***** Table IP_prefs *****/ /***** Table IP_prefs *****/
/* /*
mysql> DESCRIBE IP_prefs; mysql> DESCRIBE IP_prefs;
+------------+------------+------+-----+---------+-------+ +----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+ +----------------+------------+------+-----+---------+-------+
| IP | char(15) | NO | PRI | NULL | | | IP | char(15) | NO | PRI | NULL | |
| UsrCod | int(11) | NO | MUL | -1 | | | UsrCod | int(11) | NO | MUL | -1 | |
| LastChange | datetime | NO | MUL | NULL | | | LastChange | datetime | NO | MUL | NULL | |
| Layout | tinyint(4) | NO | | 0 | | | FirstDayOfWeek | tinyint(4) | NO | | 0 | |
| Theme | char(16) | NO | | NULL | | | Layout | tinyint(4) | NO | | 0 | |
| IconSet | char(16) | NO | | NULL | | | Theme | char(16) | NO | | NULL | |
| Menu | tinyint(4) | NO | | 0 | | | IconSet | char(16) | NO | | NULL | |
| SideCols | tinyint(4) | NO | | NULL | | | Menu | tinyint(4) | NO | | 0 | |
+------------+------------+------+-----+---------+-------+ | SideCols | tinyint(4) | NO | | NULL | |
8 rows in set (0.00 sec) +----------------+------------+------+-----+---------+-------+
9 rows in set (0.01 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS IP_prefs ("
"IP CHAR(15) NOT NULL," "IP CHAR(15) NOT NULL,"
"UsrCod INT NOT NULL DEFAULT -1," "UsrCod INT NOT NULL DEFAULT -1,"
"LastChange DATETIME NOT NULL," "LastChange DATETIME NOT NULL,"
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
"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,"
@ -2277,6 +2279,7 @@ mysql> DESCRIBE usr_data;
| Theme | char(16) | NO | MUL | NULL | | | Theme | char(16) | NO | MUL | NULL | |
| IconSet | char(16) | NO | MUL | NULL | | | IconSet | char(16) | NO | MUL | NULL | |
| Language | char(2) | NO | MUL | NULL | | | Language | char(2) | NO | MUL | NULL | |
| FirstDayOfWeek | tinyint(4) | NO | MUL | 0 | |
| Photo | char(43) | NO | | NULL | | | Photo | char(43) | NO | | NULL | |
| PhotoVisibility | enum('user','course','system','world') | NO | | user | | | PhotoVisibility | enum('user','course','system','world') | NO | | user | |
| ProfileVisibility | 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 | | | NotifNtfEvents | int(11) | NO | | 0 | |
| EmailNtfEvents | 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 (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_data ("
"UsrCod INT NOT NULL AUTO_INCREMENT," "UsrCod INT NOT NULL AUTO_INCREMENT,"
@ -2313,6 +2316,7 @@ mysql> DESCRIBE usr_data;
"Theme CHAR(16) NOT NULL," "Theme CHAR(16) NOT NULL,"
"IconSet CHAR(16) NOT NULL," "IconSet CHAR(16) NOT NULL,"
"Language CHAR(2) NOT NULL," "Language CHAR(2) NOT NULL,"
"FirstDayOfWeek TINYINT NOT NULL DEFAULT 0,"
"Photo CHAR(43) NOT NULL," "Photo CHAR(43) NOT NULL,"
"PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user'," "PhotoVisibility ENUM('user','course','system','world') NOT NULL DEFAULT 'user',"
"ProfileVisibility 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," "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(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 *****/ /***** Table usr_emails *****/
/* /*

View File

@ -414,8 +414,10 @@ static void Deg_Configuration (bool PrintView)
"</tr>", "</tr>",
The_ClassForm[Gbl.Prefs.Theme], The_ClassForm[Gbl.Prefs.Theme],
Txt_Shortcut, 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],
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod,
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language],
Gbl.CurrentDeg.Deg.DegCod);
if (PrintView) if (PrintView)
{ {

View File

@ -447,7 +447,7 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
sprintf (Query,"UPDATE usr_data" sprintf (Query,"UPDATE usr_data"
" SET Password='%s'," " SET Password='%s',"
"Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s'," "Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s',"
"Layout='%u',Theme='%s',IconSet='%s',Language='%s',PhotoVisibility='%s',ProfileVisibility='%s'," "Layout='%u',Theme='%s',IconSet='%s',Language='%s',FirstDayOfWeek='%u',PhotoVisibility='%s',ProfileVisibility='%s',"
"CtyCod='%ld'," "CtyCod='%ld',"
"LocalAddress='%s',LocalPhone='%s',FamilyAddress='%s',FamilyPhone='%s',OriginPlace='%s',Birthday='%04u-%02u-%02u',Comments='%s'" "LocalAddress='%s',LocalPhone='%s',FamilyAddress='%s',FamilyPhone='%s',OriginPlace='%s',Birthday='%04u-%02u-%02u',Comments='%s'"
" WHERE UsrCod='%ld'", " WHERE UsrCod='%ld'",
@ -458,6 +458,7 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
The_ThemeId[UsrDat->Prefs.Theme], The_ThemeId[UsrDat->Prefs.Theme],
Ico_IconSetId[UsrDat->Prefs.IconSet], Ico_IconSetId[UsrDat->Prefs.IconSet],
Txt_STR_LANG_ID[UsrDat->Prefs.Language], Txt_STR_LANG_ID[UsrDat->Prefs.Language],
UsrDat->Prefs.FirstDayOfWeek,
Pri_VisibilityDB[UsrDat->PhotoVisibility], Pri_VisibilityDB[UsrDat->PhotoVisibility],
Pri_VisibilityDB[UsrDat->ProfileVisibility], Pri_VisibilityDB[UsrDat->ProfileVisibility],
UsrDat->CtyCod, UsrDat->CtyCod,

View File

@ -35,6 +35,7 @@
#include <unistd.h> // For getpid #include <unistd.h> // For getpid
#include "swad_action.h" #include "swad_action.h"
#include "swad_calendar.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_constant.h" #include "swad_constant.h"
#include "swad_exam.h" #include "swad_exam.h"
@ -125,14 +126,15 @@ void Gbl_InitializeGlobals (void)
Gbl.HiddenParamsInsertedIntoDB = false; 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.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.Theme = The_THEME_DEFAULT; // Default theme
Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set Gbl.Prefs.IconSet = Ico_ICON_SET_DEFAULT; // Default icon set
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.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", sprintf (Gbl.Prefs.PathTheme,"%s/%s/%s",
Gbl.Prefs.IconsURL, Gbl.Prefs.IconsURL,
Cfg_ICON_FOLDER_THEMES, Cfg_ICON_FOLDER_THEMES,

View File

@ -130,15 +130,16 @@ struct Globals
} Imported; } Imported;
struct struct
{ {
Txt_Language_t Language;
unsigned FirstDayOfWeek;
Lay_Layout_t Layout; Lay_Layout_t Layout;
Mnu_Menu_t Menu;
unsigned SideCols;
The_Theme_t Theme; The_Theme_t Theme;
char PathTheme[PATH_MAX+1]; char PathTheme[PATH_MAX+1];
Txt_Language_t Language;
unsigned SideCols;
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

View File

@ -46,7 +46,7 @@ extern struct Globals Gbl;
/******************************** Private constants **************************/ /******************************** Private constants **************************/
/*****************************************************************************/ /*****************************************************************************/
#define MAX_ICON_SET_ID 16 #define Ico_MAX_BYTES_ICON_SET_ID 16
const char *Ico_IconSetId[Ico_NUM_ICON_SETS] = const char *Ico_IconSetId[Ico_NUM_ICON_SETS] =
{ {
@ -129,17 +129,17 @@ void Ico_ChangeIconSet (void)
Ico_IconSet_t Ico_GetParamIconSet (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; 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; for (IconSet = (Ico_IconSet_t) 0;
IconSet < Ico_NUM_ICON_SETS; IconSet < Ico_NUM_ICON_SETS;
IconSet++) IconSet++)
if (!strcmp (IconSetId,Ico_IconSetId[IconSet])) if (!strcmp (IconSetId,Ico_IconSetId[IconSet]))
return 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])) if (!strcasecmp (Str,Ico_IconSetId[IconSet]))
return IconSet; return IconSet;
return Ico_ICON_SET_UNKNOWN; return Ico_ICON_SET_DEFAULT;
} }

View File

@ -41,7 +41,6 @@ typedef enum
{ {
Ico_ICON_SET_AWESOME = 0, Ico_ICON_SET_AWESOME = 0,
Ico_ICON_SET_NUVOLA = 1, Ico_ICON_SET_NUVOLA = 1,
Ico_ICON_SET_UNKNOWN = 2,
} Ico_IconSet_t; } Ico_IconSet_t;
#define Ico_ICON_SET_DEFAULT Ico_ICON_SET_AWESOME #define Ico_ICON_SET_DEFAULT Ico_ICON_SET_AWESOME

View File

@ -1721,31 +1721,39 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" : StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" :
""); "");
if (FilterFromToSubquery[0]) 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" " 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" " AND msg_snt.UsrCod=usr_data.UsrCod%s"
" ORDER BY msg_rcv.MsgCod DESC", " ORDER BY msg_rcv.MsgCod DESC",
UsrCod,StrUnreadMsg,FilterCrsCod, UsrCod,StrUnreadMsg,FilterCrsCod,
FilterFromToSubquery); FilterFromToSubquery);
else 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" " 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", " ORDER BY msg_rcv.MsgCod DESC",
UsrCod,StrUnreadMsg, UsrCod,StrUnreadMsg,
FilterCrsCod); FilterCrsCod);
break; break;
case Msg_MESSAGES_SENT: case Msg_MESSAGES_SENT:
if (FilterFromToSubquery[0]) if (FilterFromToSubquery[0])
sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod FROM msg_snt,msg_rcv,usr_data" sprintf (PtrQuery,"SELECT DISTINCT msg_snt.MsgCod"
" WHERE msg_snt.UsrCod='%ld' AND msg_snt.CrsCod='%ld'" " FROM msg_snt,msg_rcv,usr_data"
" AND msg_snt.MsgCod=msg_rcv.MsgCod AND msg_rcv.UsrCod=usr_data.UsrCod%s" " 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", " ORDER BY msg_snt.MsgCod DESC",
UsrCod,FilterCrsCod, UsrCod,FilterCrsCod,
FilterFromToSubquery); FilterFromToSubquery);
else else
sprintf (PtrQuery,"SELECT MsgCod FROM msg_snt" sprintf (PtrQuery,"SELECT MsgCod"
" FROM msg_snt"
" WHERE UsrCod='%ld' AND CrsCod='%ld'" " WHERE UsrCod='%ld' AND CrsCod='%ld'"
" ORDER BY MsgCod DESC", " ORDER BY MsgCod DESC",
UsrCod,FilterCrsCod); UsrCod,FilterCrsCod);
@ -1761,9 +1769,11 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
{ {
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND msg_rcv.Open='N'" : 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" " 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", " ORDER BY msg_rcv.MsgCod DESC",
UsrCod,StrUnreadMsg, UsrCod,StrUnreadMsg,
FilterFromToSubquery); FilterFromToSubquery);
@ -1772,7 +1782,8 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
{ {
StrUnreadMsg = (Gbl.Msg.ShowOnlyUnreadMsgs ? " AND Open='N'" : 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" " WHERE UsrCod='%ld'%s"
" ORDER BY MsgCod DESC", " ORDER BY MsgCod DESC",
UsrCod,StrUnreadMsg); UsrCod,StrUnreadMsg);
@ -1780,14 +1791,17 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
break; break;
case Msg_MESSAGES_SENT: case Msg_MESSAGES_SENT:
if (FilterFromToSubquery[0]) 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'" " 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", " ORDER BY msg_snt.MsgCod DESC",
UsrCod, UsrCod,
FilterFromToSubquery); FilterFromToSubquery);
else else
sprintf (PtrQuery,"SELECT MsgCod FROM msg_snt" sprintf (PtrQuery,"SELECT MsgCod"
" FROM msg_snt"
" WHERE UsrCod='%ld'" " WHERE UsrCod='%ld'"
" ORDER BY MsgCod DESC", " ORDER BY MsgCod DESC",
UsrCod); UsrCod);
@ -1797,7 +1811,8 @@ static void Msg_ConstructQueryToSelectSentOrReceivedMsgs (char *Query,Msg_TypeOf
} }
if (Gbl.Msg.FilterContent[0]) if (Gbl.Msg.FilterContent[0])
sprintf (Query,"SELECT MsgCod FROM msg_content" sprintf (Query,"SELECT MsgCod"
" FROM msg_content"
" WHERE MsgCod IN (%s)" " WHERE MsgCod IN (%s)"
" AND MATCH (Subject,Content) AGAINST ('%s')", " AND MATCH (Subject,Content) AGAINST ('%s')",
SubQuery, SubQuery,

View File

@ -156,7 +156,8 @@ long Nck_GetUsrCodFromNickname (const char *Nickname)
/***** Get user's code from database *****/ /***** Get user's code from database *****/
/* Check if user code from table usr_nicknames is also in table usr_data */ /* 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'" " WHERE usr_nicknames.Nickname='%s'"
" AND usr_nicknames.UsrCod=usr_data.UsrCod", " AND usr_nicknames.UsrCod=usr_data.UsrCod",
NicknameWithoutArroba); NicknameWithoutArroba);

View File

@ -985,7 +985,9 @@ static void Pho_ClearPhotoName (long UsrCod)
char Query[128]; char Query[128];
/***** Clear photo name in user's data *****/ /***** 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"); 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]; char PathPublPhoto[PATH_MAX+1];
/***** Update photo name in database *****/ /***** 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); Gbl.UniqueNameEncrypted,UsrDat->UsrCod);
DB_QueryUPDATE (Query,"can not update the name of a user's photo"); DB_QueryUPDATE (Query,"can not update the name of a user's photo");

View File

@ -30,6 +30,7 @@
#include <stdio.h> // For fprintf, etc. #include <stdio.h> // For fprintf, etc.
#include <string.h> #include <string.h>
#include "swad_calendar.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_global.h" #include "swad_global.h"
@ -67,35 +68,42 @@ void Pre_EditPrefs (void)
extern const char *Txt_You_can_only_receive_email_notifications_if_; extern const char *Txt_You_can_only_receive_email_notifications_if_;
char MailDomain[Usr_MAX_BYTES_USR_EMAIL+1]; 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); 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 (); 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 *****/ /***** Layout, side columns, theme, icon set & menu *****/
fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">" fprintf (Gbl.F.Out,"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
"<tr>" "<tr>"
"<td>"); "<td>");
Lay_PutIconsToSelectLayout (); // 1. Layout Lay_PutIconsToSelectLayout (); // 3. Layout
fprintf (Gbl.F.Out,"</td>"); fprintf (Gbl.F.Out,"</td>");
if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP) if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP)
{ {
fprintf (Gbl.F.Out,"<td>"); fprintf (Gbl.F.Out,"<td>");
Mnu_PutIconsToSelectMenu (); // 2. Menu Mnu_PutIconsToSelectMenu (); // 4. Menu
fprintf (Gbl.F.Out,"</td>" fprintf (Gbl.F.Out,"</td>"
"<td>"); "<td>");
Pre_PutIconsToSelectSideCols (); // 3. Side columns Pre_PutIconsToSelectSideCols (); // 5. Side columns
fprintf (Gbl.F.Out,"</td>"); fprintf (Gbl.F.Out,"</td>");
} }
fprintf (Gbl.F.Out,"</tr>" fprintf (Gbl.F.Out,"<td>");
"</table>" The_PutIconsToSelectTheme (); // 6. Theme
"<table style=\"margin:0 auto; border-spacing:16px 0;\">"
"<tr>"
"<td>");
The_PutIconsToSelectTheme (); // 4. Theme
fprintf (Gbl.F.Out,"</td>" fprintf (Gbl.F.Out,"</td>"
"<td>"); "<td>");
Ico_PutIconsToSelectIconSet (); // 5. Icon set Ico_PutIconsToSelectIconSet (); // 7. Icon set
fprintf (Gbl.F.Out,"</td>" fprintf (Gbl.F.Out,"</td>"
"</tr>" "</tr>"
"</table>"); "</table>");
@ -178,9 +186,10 @@ void Pre_SetPrefsFromIP (void)
char Query[512]; char Query[512];
/***** Update preferences from current IP in database *****/ /***** Update preferences from current IP in database *****/
sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,Layout,Theme,IconSet,Menu,SideCols)" sprintf (Query,"REPLACE INTO IP_prefs (IP,UsrCod,LastChange,FirstDayOfWeek,Layout,Theme,IconSet,Menu,SideCols)"
" VALUES ('%s','%ld',NOW(),'%u','%s','%s','%u','%u')", " VALUES ('%s','%ld',NOW(),'%u','%u','%s','%s','%u','%u')",
Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod, Gbl.IP,Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Prefs.FirstDayOfWeek,
(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],
@ -191,8 +200,9 @@ void Pre_SetPrefsFromIP (void)
/***** If a user is logged, update its preferences in database for all its IP's *****/ /***** If a user is logged, update its preferences in database for all its IP's *****/
if (Gbl.Usrs.Me.Logged) if (Gbl.Usrs.Me.Logged)
{ {
sprintf (Query,"UPDATE IP_prefs SET 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'", " WHERE UsrCod='%ld'",
Gbl.Prefs.FirstDayOfWeek,
(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],
@ -234,7 +244,8 @@ void Pre_PutSelectorToSelectLanguage (void)
}; };
Act_FormStart (ActReqChgLan); 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();\">", " onchange=\"document.getElementById('%s').submit();\">",
SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId); SelectorWidth[Gbl.Prefs.Layout],Gbl.FormId);
for (Lan = (Txt_Language_t) 0; for (Lan = (Txt_Language_t) 0;
@ -286,11 +297,8 @@ void Pre_AskChangeLanguage (void)
void Pre_ChangeLanguage (void) void Pre_ChangeLanguage (void)
{ {
extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES]; 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]; extern const char *Txt_STR_LANG_NAME[Txt_NUM_LANGUAGES];
char Query[512]; char Query[512];
bool MyLanguageHasChanged = false;
/***** Get param language *****/ /***** Get param language *****/
Gbl.Prefs.Language = Pre_GetParamLanguage (); Gbl.Prefs.Language = Pre_GetParamLanguage ();
@ -298,20 +306,14 @@ void Pre_ChangeLanguage (void)
/***** Store language in database *****/ /***** Store language in database *****/
if (Gbl.Usrs.Me.Logged && Gbl.Prefs.Language != Gbl.Usrs.Me.UsrDat.Prefs.Language) 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); Txt_STR_LANG_ID[Gbl.Prefs.Language],Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your language"); DB_QueryUPDATE (Query,"can not update your language");
MyLanguageHasChanged = true;
} }
/***** Set preferences from current IP *****/ /***** Set preferences from current IP *****/
Pre_SetPrefsFromIP (); 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]; 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); Gbl.Prefs.SideCols,Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your preference about side columns"); DB_QueryUPDATE (Query,"can not update your preference about side columns");
} }

View File

@ -3734,8 +3734,7 @@ void Rec_UpdateMyOffice (void)
Par_GetParToText ("Office",Gbl.Usrs.Me.UsrDat.Tch.Office,Cns_MAX_BYTES_STRING); Par_GetParToText ("Office",Gbl.Usrs.Me.UsrDat.Tch.Office,Cns_MAX_BYTES_STRING);
/***** Update office *****/ /***** Update office *****/
sprintf (Query,"UPDATE usr_data" sprintf (Query,"UPDATE usr_data SET Office='%s'"
" SET Office='%s'"
" WHERE UsrCod='%ld'", " WHERE UsrCod='%ld'",
Gbl.Usrs.Me.UsrDat.Tch.Office, Gbl.Usrs.Me.UsrDat.Tch.Office,
Gbl.Usrs.Me.UsrDat.UsrCod); 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); Par_GetParToText ("OfficePhone",Gbl.Usrs.Me.UsrDat.Tch.OfficePhone,Usr_MAX_BYTES_PHONE);
/***** Update office phone *****/ /***** Update office phone *****/
sprintf (Query,"UPDATE usr_data" sprintf (Query,"UPDATE usr_data SET OfficePhone='%s'"
" SET OfficePhone='%s'"
" WHERE UsrCod='%ld'", " WHERE UsrCod='%ld'",
Gbl.Usrs.Me.UsrDat.Tch.OfficePhone, Gbl.Usrs.Me.UsrDat.Tch.OfficePhone,
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);

View File

@ -3578,6 +3578,27 @@ const char *Txt_Calculate_average_photo_of_THE_DEGREE_X =
"Calculate average photo of"; // Necessita de tradução "Calculate average photo of"; // Necessita de tradução
#endif #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&aacute;rio";
#endif
const char *Txt_Call_the_roll = const char *Txt_Call_the_roll =
#if L==0 #if L==0
"Passar llista"; "Passar llista";
@ -11627,6 +11648,27 @@ const char *Txt_Files_works =
"Arquivos trabalhos"; "Arquivos trabalhos";
#endif #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&iacute;a de la semana";
#elif L==4
"Premier jour de la semaine";
#elif L==5
"Primer d&iacute;a de la semana"; // Okoteve traducción
#elif L==6
"Primo giorno della settimana";
#elif L==7
"Pierwszy dzie&nacute; tygodnia";
#elif L==8
"Primeiro dia da semana";
#endif
const char *Txt_first_message_not_allowed = const char *Txt_first_message_not_allowed =
#if L==0 #if L==0
"primer mensaje no permitido"; // Necessita traduccio "primer mensaje no permitido"; // Necessita traduccio
@ -15133,23 +15175,23 @@ const char *Txt_It_is_optional_to_choose_a_group =
const char *Txt_Language = const char *Txt_Language =
#if L==0 #if L==0
"Idioma"; "Idioma (language)";
#elif L==1 #elif L==1
"Sprache"; "Sprache (language)";
#elif L==2 #elif L==2
"Language"; "Language";
#elif L==3 #elif L==3
"Idioma"; "Idioma (language)";
#elif L==4 #elif L==4
"Langue"; "Langue (language)";
#elif L==5 #elif L==5
"&Ntilde;e'&#7869;"; "&Ntilde;e'&#7869; (language)";
#elif L==6 #elif L==6
"Lingua"; "Lingua (language)";
#elif L==7 #elif L==7
"J&eogon;zyk"; "J&eogon;zyk (language)";
#elif L==8 #elif L==8
"Lingua"; "Lingua (language)";
#endif #endif
const char *Txt_Last_clicks = 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 "The integrated editor is not yet available."; // Necessita de tradução
#endif #endif
const char *Txt_The_language_has_changed_to_LANGUAGE =
#if L==0
"S'ha canviat l'idioma a catal&agrave;.";
#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&ntilde;ol.";
#elif L==4
"La langue a chang&eacute; au fran&ccedil;ais.";
#elif L==5
"Pe &ntilde;e'&#7869; ha moambuepapyre pe ava&ntilde;e'&#7869;.";
#elif L==6
"La lingua &egrave; cambiata a italiano.";
#elif L==7
"J&eogon;zyk zosta&lstrok; zmieniony na polski.";
#elif L==8
"O idioma mudou para o portugu&ecirc;s.";
#endif
const char *Txt_The_link_X_already_exists = // Warning: it is very important to include %s in the following sentences const char *Txt_The_link_X_already_exists = // Warning: it is very important to include %s in the following sentences
#if L==0 #if L==0
"El enlace <strong>%s</strong> ya existe."; // Necessita traduccio "El enlace <strong>%s</strong> ya existe."; // Necessita traduccio
@ -51949,27 +51970,6 @@ const char *Txt_Your_comment_has_been_updated =
"O seu coment&aacute;rio foi atualizado."; "O seu coment&aacute;rio foi atualizado.";
#endif #endif
const char *Txt_Your_language_has_changed_to_LANGUAGE =
#if L==0
"El seu idioma ha canviat a catal&agrave;.";
#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&ntilde;ol.";
#elif L==4
"Votre langue a chang&eacute; au fran&ccedil;ais.";
#elif L==5
"Pe &ntilde;e'&#7869; ha moambuepapyre pe ava&ntilde;e'&#7869;.";
#elif L==6
"La tua lingua &egrave; cambiata a italiano.";
#elif L==7
"J&eogon;zyk zosta&lstrok; zmieniony na polski.";
#elif L==8
"Suo idioma mudou para o portugu&ecirc;s.";
#endif
const char *Txt_Your_nickname_X_has_been_registered_successfully = // Warning: it is very important to include %s in the following sentences 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 #if L==0
"Su apodo <strong>@%s</strong>" "Su apodo <strong>@%s</strong>"

View File

@ -276,7 +276,8 @@ void The_ChangeTheme (void)
/***** Store theme in database *****/ /***** Store theme in database *****/
if (Gbl.Usrs.Me.Logged) 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); The_ThemeId[Gbl.Prefs.Theme],Gbl.Usrs.Me.UsrDat.UsrCod);
DB_QueryUPDATE (Query,"can not update your preference about theme"); DB_QueryUPDATE (Query,"can not update your preference about theme");
} }

View File

@ -36,6 +36,7 @@
#include "swad_account.h" #include "swad_account.h"
#include "swad_announcement.h" #include "swad_announcement.h"
#include "swad_calendar.h"
#include "swad_config.h" #include "swad_config.h"
#include "swad_connected.h" #include "swad_connected.h"
#include "swad_course.h" #include "swad_course.h"
@ -272,6 +273,7 @@ void Usr_ResetUsrDataExceptUsrCodAndIDs (struct UsrData *UsrDat)
UsrDat->Tch.OfficePhone[0] = '\0'; UsrDat->Tch.OfficePhone[0] = '\0';
UsrDat->Prefs.Language = Cfg_DEFAULT_LANGUAGE_FOR_NEW_USERS; UsrDat->Prefs.Language = Cfg_DEFAULT_LANGUAGE_FOR_NEW_USERS;
UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT; // Default first day of week
UsrDat->Prefs.Layout = Lay_LAYOUT_DEFAULT; UsrDat->Prefs.Layout = Lay_LAYOUT_DEFAULT;
UsrDat->Prefs.Theme = The_THEME_DEFAULT; UsrDat->Prefs.Theme = The_THEME_DEFAULT;
UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT; UsrDat->Prefs.IconSet = Ico_ICON_SET_DEFAULT;
@ -359,7 +361,8 @@ void Usr_GetUsrCodFromEncryptedUsrCod (struct UsrData *UsrDat)
if (UsrDat->EncryptedUsrCod[0]) if (UsrDat->EncryptedUsrCod[0])
{ {
/***** Get user's code from database *****/ /***** 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); UsrDat->EncryptedUsrCod);
NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get user's code"); 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) 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 *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
extern const char *The_ThemeId[The_NUM_THEMES]; extern const char *The_ThemeId[The_NUM_THEMES];
extern const char *Ico_IconSetId[Ico_NUM_ICON_SETS]; 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 *****/ /***** Get user's data from database *****/
sprintf (Query,"SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex," sprintf (Query,"SELECT EncryptedUsrCod,Password,Surname1,Surname2,FirstName,Sex,"
"Layout,Theme,IconSet,Language,Photo,PhotoVisibility,ProfileVisibility," "Layout,Theme,IconSet,Language,FirstDayOfWeek,Photo,PhotoVisibility,ProfileVisibility,"
"CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone," "CtyCod,InsCtyCod,InsCod,DptCod,CtrCod,Office,OfficePhone,"
"LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments," "LocalAddress,LocalPhone,FamilyAddress,FamilyPhone,OriginPlace,Birthday,Comments,"
"Menu,SideCols,NotifNtfEvents,EmailNtfEvents" "Menu,SideCols,NotifNtfEvents,EmailNtfEvents"
@ -480,47 +484,53 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
break; break;
} }
/* Get rest of data */ /* Get first day of week */
strncpy (UsrDat->Photo,row[10],sizeof (UsrDat->Photo) - 1); UsrDat->Prefs.FirstDayOfWeek = Cal_FIRST_DAY_OF_WEEK_DEFAULT;
UsrDat->Photo[sizeof (UsrDat->Photo) - 1] = '\0'; if (sscanf (row[10],"%u",&UnsignedNum) == 1)
UsrDat->PhotoVisibility = Pri_GetVisibilityFromStr (row[11]); if (Cal_DayIsValidAsFirstDayOfWeek[UnsignedNum])
UsrDat->ProfileVisibility = Pri_GetVisibilityFromStr (row[12]); UsrDat->Prefs.FirstDayOfWeek = UnsignedNum;
UsrDat->CtyCod = Str_ConvertStrCodToLongCod (row[13]);
UsrDat->InsCtyCod = Str_ConvertStrCodToLongCod (row[14]);
UsrDat->InsCod = Str_ConvertStrCodToLongCod (row[15]);
UsrDat->Tch.DptCod = Str_ConvertStrCodToLongCod (row[16]); /* Get rest of data */
UsrDat->Tch.CtrCod = Str_ConvertStrCodToLongCod (row[17]); strncpy (UsrDat->Photo,row[11],sizeof (UsrDat->Photo) - 1);
strncpy (UsrDat->Tch.Office ,row[18],sizeof (UsrDat->Tch.Office ) - 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'; 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'; 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'; 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'; 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'; 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'; 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'; UsrDat->OriginPlace [sizeof (UsrDat->OriginPlace ) - 1] = '\0';
strcpy (StrBirthday, strcpy (StrBirthday,
row[25] ? row[25] : row[26] ? row[26] :
"0000-00-00"); "0000-00-00");
Usr_GetUsrCommentsFromString (row[26] ? row[26] : Usr_GetUsrCommentsFromString (row[27] ? row[27] :
"", "",
UsrDat); // Get the comments comunes a todas the courses UsrDat); // Get the comments comunes a todas the courses
/* Get menu */ /* Get menu */
UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT; UsrDat->Prefs.Menu = Mnu_MENU_DEFAULT;
if (sscanf (row[27],"%u",&UnsignedNum) == 1) if (sscanf (row[28],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Mnu_NUM_MENUS) if (UnsignedNum < Mnu_NUM_MENUS)
UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum; UsrDat->Prefs.Menu = (Mnu_Menu_t) UnsignedNum;
/* Get if user wants to show side columns */ /* Get if user wants to show side columns */
if (sscanf (row[28],"%u",&UsrDat->Prefs.SideCols) == 1) if (sscanf (row[29],"%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;
@ -529,11 +539,11 @@ void Usr_GetUsrDataFromUsrCod (struct UsrData *UsrDat)
UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS; UsrDat->Prefs.SideCols = Cfg_DEFAULT_COLUMNS;
/* Get on which events I want to be notified inside the platform */ /* Get on which events I want to be notified inside the platform */
if (sscanf (row[29],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1) if (sscanf (row[30],"%u",&UsrDat->Prefs.NotifNtfEvents) != 1)
UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF UsrDat->Prefs.NotifNtfEvents = (unsigned) -1; // 0xFF..FF
/* Get on which events I want to be notified by e-mail */ /* Get on which events I want to be notified by e-mail */
if (sscanf (row[30],"%u",&UsrDat->Prefs.EmailNtfEvents) != 1) if (sscanf (row[31],"%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;
@ -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 *****/ /***** 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))" " (SELECT UsrCod FROM usr_data WHERE %s))"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, (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')" " WHERE Role='%u' AND Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, (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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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')" " AND crs_usr.Accepted='N')"
") AS list_usrs,usr_data" ") AS list_usrs,usr_data"
" WHERE list_usrs.UsrCod=usr_data.UsrCod " " 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, 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'" " WHERE (admin.Scope='Deg'"
" OR admin.Scope='Sys')" " OR admin.Scope='Sys')"
" AND admin.UsrCod=usr_data.UsrCod " " AND admin.UsrCod=usr_data.UsrCod "
" ORDER BY usr_data.Surname1,usr_data.Surname2," " ORDER BY "
"usr_data.FirstName,usr_data.UsrCod"); "usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod");
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex" 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')" " AND admin.Scope='Deg')"
" OR admin.Scope='Sys')" " OR admin.Scope='Sys')"
" AND admin.UsrCod=usr_data.UsrCod " " AND admin.UsrCod=usr_data.UsrCod "
" ORDER BY usr_data.Surname1,usr_data.Surname2," " ORDER BY "
"usr_data.FirstName,usr_data.UsrCod", "usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
Gbl.CurrentIns.Ins.InsCod); Gbl.CurrentIns.Ins.InsCod);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
@ -4122,8 +4182,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
" AND admin.Scope='Deg')" " AND admin.Scope='Deg')"
" OR admin.Scope='Sys')" " OR admin.Scope='Sys')"
" AND admin.UsrCod=usr_data.UsrCod " " AND admin.UsrCod=usr_data.UsrCod "
" ORDER BY usr_data.Surname1,usr_data.Surname2," " ORDER BY "
"usr_data.FirstName,usr_data.UsrCod", "usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
Gbl.CurrentCtr.Ctr.CtrCod); Gbl.CurrentCtr.Ctr.CtrCod);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
@ -4132,8 +4195,11 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
" WHERE ((admin.Scope='Deg' AND admin.Cod='%ld')" " WHERE ((admin.Scope='Deg' AND admin.Cod='%ld')"
" OR admin.Scope='Sys')" " OR admin.Scope='Sys')"
" AND admin.UsrCod=usr_data.UsrCod " " AND admin.UsrCod=usr_data.UsrCod "
" ORDER BY usr_data.Surname1,usr_data.Surname2," " ORDER BY "
"usr_data.FirstName,usr_data.UsrCod", "usr_data.Surname1,"
"usr_data.Surname2,"
"usr_data.FirstName,"
"usr_data.UsrCod",
Gbl.CurrentDeg.Deg.DegCod); Gbl.CurrentDeg.Deg.DegCod);
break; break;
default: // not aplicable default: // not aplicable

View File

@ -151,6 +151,7 @@ struct UsrData
struct struct
{ {
Txt_Language_t Language; Txt_Language_t Language;
unsigned FirstDayOfWeek;
Lay_Layout_t Layout; Lay_Layout_t Layout;
The_Theme_t Theme; The_Theme_t Theme;
Ico_IconSet_t IconSet; Ico_IconSet_t IconSet;

View File

@ -2721,7 +2721,8 @@ static int Svc_GetLanguageFromUsrCod (long UsrCod)
Txt_Language_t Lan; Txt_Language_t Lan;
/***** Get user's language *****/ /***** 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); UsrCod);
if (DB_QuerySELECT (Query,&mysql_res,"can not get user's language") != 1) if (DB_QuerySELECT (Query,&mysql_res,"can not get user's language") != 1)
return soap_receiver_fault (Gbl.soap, return soap_receiver_fault (Gbl.soap,
@ -2906,7 +2907,8 @@ int swad__sendMessage (struct soap *soap,
/***** Build query for recipients from database *****/ /***** Build query for recipients from database *****/
if (ReplyUsrCod > 0) if (ReplyUsrCod > 0)
sprintf (Query,"SELECT UsrCod FROM usr_data WHERE UsrCod='%ld'", sprintf (Query,"SELECT UsrCod FROM usr_data"
" WHERE UsrCod='%ld'",
ReplyUsrCod); ReplyUsrCod);
else else
Query[0] = '\0'; Query[0] = '\0';