diff --git a/sql/swad.sql b/sql/swad.sql index be555c44b..2e32361bd 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -190,7 +190,7 @@ CREATE TABLE IF NOT EXISTS connected ( UsrCod INT NOT NULL, RoleInLastCrs TINYINT NOT NULL DEFAULT 0, LastCrsCod INT NOT NULL DEFAULT -1, - LastTime DATETIME, + LastTime DATETIME NOT NULL, UNIQUE INDEX(UsrCod), INDEX(LastCrsCod)); -- @@ -266,7 +266,7 @@ CREATE TABLE IF NOT EXISTS crs_grp_types ( Mandatory ENUM('N','Y') NOT NULL, Multiple ENUM('N','Y') NOT NULL, MustBeOpened ENUM('N','Y') NOT NULL DEFAULT 'N', - OpenTime DATETIME NOT NULL DEFAULT 0, + OpenTime DATETIME NOT NULL, UNIQUE INDEX(GrpTypCod), INDEX(CrsCod)); -- @@ -309,7 +309,7 @@ CREATE TABLE IF NOT EXISTS crs_info_txt ( -- CREATE TABLE IF NOT EXISTS crs_last ( CrsCod INT NOT NULL, - LastTime DATETIME NOT NULL DEFAULT 0, + LastTime DATETIME NOT NULL, UNIQUE INDEX(CrsCod), INDEX(LastTime)); -- @@ -908,8 +908,8 @@ CREATE TABLE IF NOT EXISTS sessions ( CtrCod INT NOT NULL DEFAULT -1, DegCod INT NOT NULL DEFAULT -1, CrsCod INT NOT NULL DEFAULT -1, - LastTime DATETIME, - LastRefresh DATETIME, + LastTime DATETIME NOT NULL, + LastRefresh DATETIME NOT NULL, FirstPubCod BIGINT NOT NULL DEFAULT 0, LastPubCod BIGINT NOT NULL DEFAULT 0, LastPageMsgRcv INT NOT NULL DEFAULT 1, @@ -1299,8 +1299,8 @@ CREATE TABLE IF NOT EXISTS usr_last ( WhatToSearch TINYINT NOT NULL DEFAULT 0, LastCrs INT NOT NULL DEFAULT -1, LastTab TINYINT NOT NULL, - LastTime DATETIME NOT NULL DEFAULT 0, - LastAccNotif DATETIME NOT NULL DEFAULT 0, + LastTime DATETIME NOT NULL, + LastAccNotif DATETIME NOT NULL, UNIQUE INDEX(UsrCod), INDEX(LastTime)); -- diff --git a/swad_changelog.h b/swad_changelog.h index bbd515310..6ad20cf17 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -135,13 +135,23 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.205 (2016-04-30)" +#define Log_PLATFORM_VERSION "SWAD 15.206 (2016-04-30)" #define CSS_FILE "swad15.204.1.css" #define JS_FILE "swad15.197.js" // 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.206: Apr 30, 2016 Remove default DATETIME fields to avoid errors if 0 is not allowed in date in database. (201424 lines) + 6 changes necessary in database: +ALTER TABLE connected CHANGE COLUMN LastTime LastTime DATETIME NOT NULL; +ALTER TABLE crs_grp_types CHANGE COLUMN OpenTime OpenTime DATETIME NOT NULL; +ALTER TABLE crs_last CHANGE COLUMN LastTime LastTime DATETIME NOT NULL; +ALTER TABLE sessions CHANGE COLUMN LastTime LastTime DATETIME NOT NULL; +ALTER TABLE sessions CHANGE COLUMN LastRefresh LastRefresh DATETIME NOT NULL; +ALTER TABLE usr_last CHANGE COLUMN LastTime LastTime DATETIME NOT NULL; +ALTER TABLE usr_last CHANGE COLUMN LastAccNotif LastAccNotif DATETIME NOT NULL; + Version 15.205: Apr 30, 2016 New demo server added to swad_config.h: swadberry.ugr.es. (201409 lines) Version 15.204.1: Apr 25, 2016 Fixed bug in changes in database necessary in version 15.201. (201366 lines) 6 changes necessary in database: diff --git a/swad_database.c b/swad_database.c index 90e8c4705..c072cfa05 100644 --- a/swad_database.c +++ b/swad_database.c @@ -478,15 +478,15 @@ mysql> DESCRIBE connected; | UsrCod | int(11) | NO | PRI | NULL | | | RoleInLastCrs | tinyint(4) | NO | | 0 | | | LastCrsCod | int(11) | NO | MUL | -1 | | -| LastTime | datetime | YES | | NULL | | +| LastTime | datetime | NO | | NULL | | +---------------+------------+------+-----+---------+-------+ -4 rows in set (0.00 sec) +4 rows in set (0.01 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS connected (" "UsrCod INT NOT NULL," "RoleInLastCrs TINYINT NOT NULL DEFAULT 0," "LastCrsCod INT NOT NULL DEFAULT -1," - "LastTime DATETIME," + "LastTime DATETIME NOT NULL," "UNIQUE INDEX(UsrCod)," "INDEX(LastCrsCod))"); @@ -611,17 +611,17 @@ mysql> DESCRIBE crs_grp; /***** Table crs_grp_types *****/ /* mysql> DESCRIBE crs_grp_types; -+--------------+---------------+------+-----+---------------------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+---------------+------+-----+---------------------+----------------+ -| GrpTypCod | int(11) | NO | PRI | NULL | auto_increment | -| CrsCod | int(11) | NO | MUL | -1 | | -| GrpTypName | varchar(255) | NO | | NULL | | -| Mandatory | enum('N','Y') | NO | | NULL | | -| Multiple | enum('N','Y') | NO | | NULL | | -| MustBeOpened | enum('N','Y') | NO | | N | | -| OpenTime | datetime | NO | | 0000-00-00 00:00:00 | | -+--------------+---------------+------+-----+---------------------+----------------+ ++--------------+---------------+------+-----+---------+----------------+ +| Field | Type | Null | Key | Default | Extra | ++--------------+---------------+------+-----+---------+----------------+ +| GrpTypCod | int(11) | NO | PRI | NULL | auto_increment | +| CrsCod | int(11) | NO | MUL | -1 | | +| GrpTypName | varchar(255) | NO | | NULL | | +| Mandatory | enum('N','Y') | NO | | NULL | | +| Multiple | enum('N','Y') | NO | | NULL | | +| MustBeOpened | enum('N','Y') | NO | | N | | +| OpenTime | datetime | NO | | NULL | | ++--------------+---------------+------+-----+---------+----------------+ 7 rows in set (0.01 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_grp_types (" @@ -631,7 +631,7 @@ mysql> DESCRIBE crs_grp_types; "Mandatory ENUM('N','Y') NOT NULL," "Multiple ENUM('N','Y') NOT NULL," "MustBeOpened ENUM('N','Y') NOT NULL DEFAULT 'N'," - "OpenTime DATETIME NOT NULL DEFAULT 0," + "OpenTime DATETIME NOT NULL," "UNIQUE INDEX(GrpTypCod)," "INDEX(CrsCod))"); @@ -714,17 +714,17 @@ mysql> DESCRIBE crs_info_txt; /***** Table crs_last *****/ /* mysql> DESCRIBE crs_last; -+----------+----------+------+-----+---------------------+-------+ -| Field | Type | Null | Key | Default | Extra | -+----------+----------+------+-----+---------------------+-------+ -| CrsCod | int(11) | NO | PRI | NULL | | -| LastTime | datetime | NO | MUL | 0000-00-00 00:00:00 | | -+----------+----------+------+-----+---------------------+-------+ ++----------+----------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++----------+----------+------+-----+---------+-------+ +| CrsCod | int(11) | NO | PRI | NULL | | +| LastTime | datetime | NO | MUL | NULL | | ++----------+----------+------+-----+---------+-------+ 2 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS crs_last (" "CrsCod INT NOT NULL," - "LastTime DATETIME NOT NULL DEFAULT 0," + "LastTime DATETIME NOT NULL," "UNIQUE INDEX(CrsCod)," "INDEX(LastTime))"); @@ -1916,8 +1916,8 @@ mysql> DESCRIBE sessions; | CtrCod | int(11) | NO | | -1 | | | DegCod | int(11) | NO | | -1 | | | CrsCod | int(11) | NO | | -1 | | -| LastTime | datetime | YES | | NULL | | -| LastRefresh | datetime | YES | | NULL | | +| LastTime | datetime | NO | | NULL | | +| LastRefresh | datetime | NO | | NULL | | | FirstPubCod | bigint(20) | NO | | 0 | | | LastPubCod | bigint(20) | NO | | 0 | | | LastPageMsgRcv | int(11) | NO | | 1 | | @@ -1926,7 +1926,7 @@ mysql> DESCRIBE sessions; | SearchString | varchar(255) | NO | | NULL | | | SideCols | tinyint(4) | NO | | 3 | | +----------------+--------------+------+-----+---------+-------+ -18 rows in set (0.00 sec) +18 rows in set (0.01 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS sessions (" "SessionId CHAR(43) NOT NULL," @@ -1938,8 +1938,8 @@ mysql> DESCRIBE sessions; "CtrCod INT NOT NULL DEFAULT -1," "DegCod INT NOT NULL DEFAULT -1," "CrsCod INT NOT NULL DEFAULT -1," - "LastTime DATETIME," - "LastRefresh DATETIME," + "LastTime DATETIME NOT NULL," + "LastRefresh DATETIME NOT NULL," "FirstPubCod BIGINT NOT NULL DEFAULT 0," "LastPubCod BIGINT NOT NULL DEFAULT 0," "LastPageMsgRcv INT NOT NULL DEFAULT 1," @@ -2722,16 +2722,16 @@ mysql> DESCRIBE usr_IDs; /***** Table usr_last *****/ /* mysql> DESCRIBE usr_last; -+--------------+------------+------+-----+---------------------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+------------+------+-----+---------------------+-------+ -| UsrCod | int(11) | NO | PRI | NULL | | -| WhatToSearch | tinyint(4) | NO | | 0 | | -| LastCrs | int(11) | NO | | -1 | | -| LastTab | tinyint(4) | NO | | NULL | | -| LastTime | datetime | NO | MUL | 0000-00-00 00:00:00 | | -| LastAccNotif | datetime | NO | | 0000-00-00 00:00:00 | | -+--------------+------------+------+-----+---------------------+-------+ ++--------------+------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++--------------+------------+------+-----+---------+-------+ +| UsrCod | int(11) | NO | PRI | NULL | | +| WhatToSearch | tinyint(4) | NO | | 0 | | +| LastCrs | int(11) | NO | | -1 | | +| LastTab | tinyint(4) | NO | | NULL | | +| LastTime | datetime | NO | MUL | NULL | | +| LastAccNotif | datetime | NO | | NULL | | ++--------------+------------+------+-----+---------+-------+ 6 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS usr_last (" @@ -2739,8 +2739,8 @@ mysql> DESCRIBE usr_last; "WhatToSearch TINYINT NOT NULL DEFAULT 0," "LastCrs INT NOT NULL DEFAULT -1," "LastTab TINYINT NOT NULL," - "LastTime DATETIME NOT NULL DEFAULT 0," - "LastAccNotif DATETIME NOT NULL DEFAULT 0," + "LastTime DATETIME NOT NULL," + "LastAccNotif DATETIME NOT NULL," "UNIQUE INDEX(UsrCod)," "INDEX(LastTime))"); diff --git a/swad_date.c b/swad_date.c index d13c87c32..bbf6a5f70 100644 --- a/swad_date.c +++ b/swad_date.c @@ -108,15 +108,12 @@ void Dat_GetAndConvertCurrentDateTime (void) time_t Dat_GetUNIXTimeFromStr (const char *Str) { - time_t Time; + time_t Time = (time_t) 0; - if (Str[0]) - { - if (sscanf (Str,"%ld",&Time) != 1) - Time = (time_t) 0; - } - else - Time = (time_t) 0; + if (Str) + if (Str[0]) + if (sscanf (Str,"%ld",&Time) != 1) + Time = (time_t) 0; return Time; } diff --git a/swad_group.c b/swad_group.c index 38a06be9d..d0f46b65d 100644 --- a/swad_group.c +++ b/swad_group.c @@ -3201,7 +3201,8 @@ static void Grp_CreateGroupType (void) char Query[1024]; /***** Create a new group type *****/ - sprintf (Query,"INSERT INTO crs_grp_types (CrsCod,GrpTypName,Mandatory,Multiple,MustBeOpened,OpenTime)" + sprintf (Query,"INSERT INTO crs_grp_types" + " (CrsCod,GrpTypName,Mandatory,Multiple,MustBeOpened,OpenTime)" " VALUES ('%ld','%s','%c','%c','%c',FROM_UNIXTIME('%ld'))", Gbl.CurrentCrs.Crs.CrsCod,Gbl.CurrentCrs.Grps.GrpTyp.GrpTypName, Gbl.CurrentCrs.Grps.GrpTyp.MandatoryEnrollment ? 'Y' : @@ -3789,8 +3790,10 @@ void Grp_ChangeOpenTimeGrpTyp (void) Gbl.CurrentCrs.Grps.GrpTyp.OpenTimeUTC = Dat_GetTimeUTCFromForm ("OpenTimeUTC"); Gbl.CurrentCrs.Grps.GrpTyp.MustBeOpened = Grp_CheckIfOpenTimeInTheFuture (Gbl.CurrentCrs.Grps.GrpTyp.OpenTimeUTC); - /***** Update of the table of types of group changing the old open time of enrollment by the new *****/ - sprintf (Query,"UPDATE crs_grp_types SET MustBeOpened='%c',OpenTime=FROM_UNIXTIME('%ld')" + /***** Update the table of types of group + changing the old open time of enrollment by the new *****/ + sprintf (Query,"UPDATE crs_grp_types" + " SET MustBeOpened='%c',OpenTime=FROM_UNIXTIME('%ld')" " WHERE GrpTypCod='%ld'", Gbl.CurrentCrs.Grps.GrpTyp.MustBeOpened ? 'Y' : 'N', @@ -3934,8 +3937,11 @@ void Grp_RenameGroupType (void) else { /* Update the table changing old name by new name */ - sprintf (Query,"UPDATE crs_grp_types SET GrpTypName='%s' WHERE GrpTypCod='%ld'", - NewNameGrpTyp,Gbl.CurrentCrs.Grps.GrpTyp.GrpTypCod); + sprintf (Query,"UPDATE crs_grp_types" + " SET GrpTypName='%s'" + " WHERE GrpTypCod='%ld'", + NewNameGrpTyp, + Gbl.CurrentCrs.Grps.GrpTyp.GrpTypCod); DB_QueryUPDATE (Query,"can not update the type of a group"); /***** Write message to show the change made *****/ diff --git a/swad_user.c b/swad_user.c index f0615c301..c92082722 100644 --- a/swad_user.c +++ b/swad_user.c @@ -2675,12 +2675,15 @@ static void Usr_InsertMyLastData (void) char Query[256]; /***** Insert my last accessed course, tab and time of click in database *****/ - // WhatToSearch, LastAccNotif are set to default (0) - sprintf (Query,"INSERT INTO usr_last (UsrCod,LastCrs,LastTab,LastTime)" - " VALUES ('%ld','%ld','%u',NOW())", + sprintf (Query,"INSERT INTO usr_last" + " (UsrCod,WhatToSearch,LastCrs,LastTab,LastTime,LastAccessNotif)" + " VALUES" + " ('%ld','%u','%ld','%u',NOW(),FROM_UNIXTIME('%ld'))", Gbl.Usrs.Me.UsrDat.UsrCod, + (unsigned) Sch_SEARCH_ALL, Gbl.CurrentCrs.Crs.CrsCod, - (unsigned) Gbl.Action.Tab); + (unsigned) Gbl.Action.Tab, + (long) (time_t) 0); // The user never accessed to notifications DB_QueryINSERT (Query,"can not insert last user's data"); } /*****************************************************************************/