diff --git a/sql/cambios.sql b/sql/cambios.sql index f9e94330..09e27ac7 100644 --- a/sql/cambios.sql +++ b/sql/cambios.sql @@ -12591,3 +12591,21 @@ OPTIMIZE TABLE usr_webs; SHOW TABLE STATUS WHERE Name = 'ws_keys'; ALTER TABLE ws_keys ENGINE=MyISAM; OPTIMIZE TABLE ws_keys; + + + + + + + + + + + + + + + + + +SELECT Weekday,TIME_TO_SEC(StartTime) AS S,TIME_TO_SEC(Duration) AS D,Place,ClassType,GrpCod FROM timetable_crs WHERE CrsCod=19 ORDER BY Weekday,S,ClassType,GrpCod,Place,D DESC; diff --git a/sql/swad.sql b/sql/swad.sql index 8d646d9f..fe32542f 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -1160,8 +1160,7 @@ CREATE TABLE IF NOT EXISTS timetable_crs ( StartTime TIME NOT NULL, Duration TIME NOT NULL, ClassType ENUM('free','lecture','practical') NOT NULL, - Place VARCHAR(511) NOT NULL, - GroupName VARCHAR(2047) NOT NULL, + Info VARCHAR(2047) NOT NULL DEFAULT '', INDEX(CrsCod,GrpCod)); -- -- Table timetable_tut: stores the timetables of office hours of the teachers @@ -1171,7 +1170,7 @@ CREATE TABLE IF NOT EXISTS timetable_tut ( Weekday TINYINT NOT NULL, StartTime TIME NOT NULL, Duration TIME NOT NULL, - Place VARCHAR(511) NOT NULL, + Info VARCHAR(2047) NOT NULL DEFAULT '', INDEX(UsrCod)); -- -- Table tst_answers: stores the answers to the questions in tests diff --git a/swad_changelog.h b/swad_changelog.h index f1db605d..3477c077 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -345,9 +345,6 @@ Buenos d // TODO: Al crear un evento de asistencia, podría tener por defecto el aula asignada al grupo elegido. -// TODO: En la edición del horario de clases, tomar las aulas de la tabla classrooms. -// El actual campo Place puede dejarse sin cambiar en la base de datos y usarse para otras aclaraciones (renombrándolo simplemente). - /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ @@ -367,10 +364,22 @@ En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 18.27.11 (2019-01-07)" +#define Log_PLATFORM_VERSION "SWAD 18.28 (2019-01-07)" #define CSS_FILE "swad18.22.css" #define JS_FILE "swad17.17.1.js" /* + Version 18.28: Jan 07, 2019 Changes in edition of timetable related to classrooms. (239208 lines) + 9 changes necessary in database: +ALTER TABLE timetable_crs CHANGE COLUMN GroupName GroupName VARCHAR(2047) NOT NULL DEFAULT ''; +ALTER TABLE timetable_crs ADD COLUMN Info VARCHAR(2047) NOT NULL DEFAULT '' AFTER ClassType; +ALTER TABLE timetable_tut ADD COLUMN Info VARCHAR(2047) NOT NULL DEFAULT '' AFTER Duration; +UPDATE timetable_crs SET Info=Place WHERE Place<>'' AND GroupName=''; +UPDATE timetable_crs SET Info=GroupName WHERE Place='' AND GroupName<>''; +UPDATE timetable_crs SET Info=CONCAT(Place,', ',GroupName) WHERE Place<>'' AND GroupName<>''; +UPDATE timetable_tut SET Info=Place WHERE Place<>''; +ALTER TABLE timetable_crs DROP COLUMN Place,DROP COLUMN GroupName; +ALTER TABLE timetable_tut DROP COLUMN Place; + Version 18.27.11: Jan 07, 2019 Changes in edition of timetable related to classrooms. (239185 lines) Version 18.27.10: Jan 05, 2019 Remove all classrooms in a centre when it is removed. (239151 lines) Version 18.27.9: Jan 05, 2019 When a classroom is removed, if it is assigned to groups, remove the association in groups. (239136 lines) diff --git a/swad_database.c b/swad_database.c index 8fcda115..4093969f 100644 --- a/swad_database.c +++ b/swad_database.c @@ -2461,10 +2461,9 @@ mysql> DESCRIBE timetable_crs; | StartTime | time | NO | | NULL | | | Duration | time | NO | | NULL | | | ClassType | enum('free','lecture','practical') | NO | | NULL | | -| Place | varchar(511) | NO | | NULL | | -| GroupName | varchar(2047) | NO | | NULL | | +| Info | varchar(2047) | NO | | | | +-----------+------------------------------------+------+-----+---------+-------+ -8 rows in set (0,00 sec) +7 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_crs (" "CrsCod INT NOT NULL DEFAULT -1," @@ -2473,30 +2472,29 @@ mysql> DESCRIBE timetable_crs; "StartTime TIME NOT NULL," "Duration TIME NOT NULL," "ClassType ENUM('free','lecture','practical') NOT NULL," - "Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE - "GroupName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME + "Info VARCHAR(2047) NOT NULL DEFAULT ''," // TT_MAX_BYTES_INFO "INDEX(CrsCod,GrpCod))"); /***** Table timetable_tut *****/ /* mysql> DESCRIBE timetable_tut; -+-----------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-----------+--------------+------+-----+---------+-------+ -| UsrCod | int(11) | NO | MUL | NULL | | -| Weekday | tinyint(4) | NO | | NULL | | -| StartTime | time | NO | | NULL | | -| Duration | time | NO | | NULL | | -| Place | varchar(511) | NO | | NULL | | -+-----------+--------------+------+-----+---------+-------+ -5 rows in set (0,00 sec) ++-----------+---------------+------+-----+---------+-------+ +| Field | Type | Null | Key | Default | Extra | ++-----------+---------------+------+-----+---------+-------+ +| UsrCod | int(11) | NO | MUL | NULL | | +| Weekday | tinyint(4) | NO | | NULL | | +| StartTime | time | NO | | NULL | | +| Duration | time | NO | | NULL | | +| Info | varchar(2047) | NO | | | | ++-----------+---------------+------+-----+---------+-------+ +5 rows in set (0.00 sec) */ DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_tut (" "UsrCod INT NOT NULL," "Weekday TINYINT NOT NULL," // 0=Monday...6=Sunday "StartTime TIME NOT NULL," "Duration TIME NOT NULL," - "Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE + "Info VARCHAR(2047) NOT NULL DEFAULT ''," // TT_MAX_BYTES_INFO "INDEX(UsrCod))"); /***** Table tst_answers *****/ diff --git a/swad_global.h b/swad_global.h index be952ca9..6ef3ccdc 100644 --- a/swad_global.h +++ b/swad_global.h @@ -668,8 +668,8 @@ struct Globals unsigned Column; TT_ClassType_t ClassType; unsigned DurationIntervals; - char Place[TT_MAX_BYTES_PLACE + 1]; - char Group[Grp_MAX_BYTES_GROUP_NAME + 1]; + char Info[TT_MAX_BYTES_INFO + 1]; + // char Place[TT_MAX_BYTES_PLACE + 1]; long GrpCod; // Group code (-1 if no group selected) struct { diff --git a/swad_group.c b/swad_group.c index 51f4d79f..2e0b143b 100644 --- a/swad_group.c +++ b/swad_group.c @@ -965,8 +965,12 @@ void Grp_ChangeGrpsOtherUsrAtomically (struct ListCodGrps *LstGrpsUsrWants) static void Grp_LockTables (void) { DB_Query ("can not lock tables to change user's groups", - "LOCK TABLES crs_grp_types WRITE,crs_grp WRITE," - "crs_grp_usr WRITE,crs_usr READ"); + "LOCK TABLES " + "crs_grp_types WRITE," + "crs_grp WRITE," + "crs_grp_usr WRITE," + "crs_usr READ," + "classrooms READ"); Gbl.DB.LockedTables = true; } @@ -3128,7 +3132,8 @@ unsigned long Grp_GetGrpsOfType (long GrpTypCod,MYSQL_RES **mysql_res) "crs_grp.MaxStudents," "crs_grp.Open," "crs_grp.FileZones" - " FROM crs_grp LEFT JOIN classrooms" + " FROM crs_grp" + " LEFT JOIN classrooms" " ON crs_grp.ClaCod=classrooms.ClaCod" " WHERE crs_grp.GrpTypCod=%ld" " ORDER BY crs_grp.GrpName", @@ -3213,31 +3218,35 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat) unsigned long NumRows; /***** Reset values *****/ - GrpDat->GrpTypCod = -1L; - GrpDat->CrsCod = -1L; - GrpDat->GrpTypName[0] = '\0'; - GrpDat->GrpName[0] = '\0'; - GrpDat->ClaCod = -1L; - GrpDat->MaxStudents = 0; - GrpDat->Vacant = 0; - GrpDat->Open = false; - GrpDat->FileZones = false; - GrpDat->MultipleEnrolment = false; + GrpDat->GrpTypCod = -1L; + GrpDat->CrsCod = -1L; + GrpDat->GrpTypName[0] = '\0'; + GrpDat->GrpName[0] = '\0'; + GrpDat->Classroom.ClaCod = -1L; + GrpDat->Classroom.ShrtName[0] = '\0'; + GrpDat->MaxStudents = 0; + GrpDat->Vacant = 0; + GrpDat->Open = false; + GrpDat->FileZones = false; + GrpDat->MultipleEnrolment = false; if (GrpDat->GrpCod > 0) { /***** Get data of a group from database *****/ NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a group", - "SELECT crs_grp_types.GrpTypCod," + "SELECT crs_grp.GrpTypCod," "crs_grp_types.CrsCod," "crs_grp_types.GrpTypName," "crs_grp_types.Multiple," "crs_grp.GrpName," "crs_grp.ClaCod," + "classrooms.ShortName," "crs_grp.MaxStudents," "crs_grp.Open," "crs_grp.FileZones" - " FROM crs_grp,crs_grp_types" + " FROM (crs_grp,crs_grp_types)" + " LEFT JOIN classrooms" + " ON crs_grp.ClaCod=classrooms.ClaCod" " WHERE crs_grp.GrpCod=%ld" " AND crs_grp.GrpTypCod=crs_grp_types.GrpTypCod", GrpDat->GrpCod); @@ -3267,16 +3276,20 @@ void Grp_GetDataOfGroupByCod (struct GroupData *GrpDat) Grp_MAX_BYTES_GROUP_NAME); /* Get the code of the course (row[5]) */ - GrpDat->ClaCod = Str_ConvertStrCodToLongCod (row[5]); + GrpDat->Classroom.ClaCod = Str_ConvertStrCodToLongCod (row[5]); - /* Get maximum number of students (row[6]) */ - GrpDat->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[6]); + /* Get the name of the classroom (row[6]) */ + Str_Copy (GrpDat->Classroom.ShrtName,row[6], + Grp_MAX_BYTES_GROUP_NAME); - /* Get whether group is open or closed (row[7]) */ - GrpDat->Open = (row[7][0] == 'Y'); + /* Get maximum number of students (row[7]) */ + GrpDat->MaxStudents = Grp_ConvertToNumMaxStdsGrp (row[7]); - /* Get whether group has file zones (row[8]) */ - GrpDat->FileZones = (row[8][0] == 'Y'); + /* Get whether group is open or closed (row[8]) */ + GrpDat->Open = (row[8][0] == 'Y'); + + /* Get whether group has file zones (row[9]) */ + GrpDat->FileZones = (row[9][0] == 'Y'); } /***** Free structure that stores the query result *****/ diff --git a/swad_group.h b/swad_group.h index 4789753e..9617a47d 100644 --- a/swad_group.h +++ b/swad_group.h @@ -63,7 +63,11 @@ struct GroupData long CrsCod; // Course code char GrpTypName[Grp_MAX_BYTES_GROUP_TYPE_NAME + 1]; char GrpName[Grp_MAX_BYTES_GROUP_NAME + 1]; - long ClaCod; // Classroom code + struct + { + long ClaCod; // Classroom code + char ShrtName[Cla_MAX_BYTES_SHRT_NAME + 1]; // Classroom short name + } Classroom; unsigned MaxStudents; int Vacant; bool Open; // Group is open? diff --git a/swad_text.c b/swad_text.c index ee759bc3..8372d660 100644 --- a/swad_text.c +++ b/swad_text.c @@ -15357,6 +15357,27 @@ const char *Txt_Indicators_of_courses = "Indicadores de disciplinas"; #endif +const char *Txt_Info = +#if L==1 // ca + "Info"; +#elif L==2 // de + "Info"; +#elif L==3 // en + "Info"; +#elif L==4 // es + "Info"; +#elif L==5 // fr + "Info"; +#elif L==6 // gn + "Info"; // Okoteve traducción +#elif L==7 // it + "Informazione"; +#elif L==8 // pl + "Info"; +#elif L==9 // pt + "Info"; +#endif + const char *Txt_INFO_TITLE[Inf_NUM_INFO_TYPES] = { // Inf_INTRODUCTION diff --git a/swad_timetable.c b/swad_timetable.c index 57cc7589..0e44adbd 100644 --- a/swad_timetable.c +++ b/swad_timetable.c @@ -85,8 +85,8 @@ struct TT_Column TT_IntervalType_t IntervalType; TT_ClassType_t ClassType; unsigned DurationIntervals; - char Place[TT_MAX_BYTES_PLACE + 1]; - char Group[Grp_MAX_BYTES_GROUP_NAME + 1]; + char Info[TT_MAX_BYTES_INFO + 1]; + // char Place[TT_MAX_BYTES_PLACE + 1]; }; struct TT_Cell @@ -151,7 +151,7 @@ static unsigned TT_CalculateColsToDrawInCell (bool TopCall, static void TT_DrawCellAlignTimeTable (void); static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Column,unsigned ColSpan, long CrsCod,TT_IntervalType_t IntervalType,TT_ClassType_t ClassType, - unsigned DurationNumIntervals,char *Group,long GrpCod,char *Place); + unsigned DurationNumIntervals,long GrpCod,const char *Info); /*****************************************************************************/ /******************** Create internal timetable in memory ********************/ @@ -296,8 +296,8 @@ static void TT_GetParamsTimeTable (void) /***** Get group code *****/ Gbl.TimeTable.GrpCod = Par_GetParToLong ("TTGrp"); - /***** Get place *****/ - Par_GetParToText ("TTPlc",Gbl.TimeTable.Place,TT_MAX_BYTES_PLACE); + /***** Get info *****/ + Par_GetParToText ("TTInf",Gbl.TimeTable.Info,TT_MAX_BYTES_INFO); } /*****************************************************************************/ @@ -588,10 +588,10 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod) DB_QueryINSERT ("can not create course timetable", "INSERT INTO timetable_crs" " (CrsCod,GrpCod,Weekday,StartTime,Duration," - "ClassType,Place,GroupName)" + "ClassType,Info)" " VALUES" " (%ld,%ld,%u,'%02u:%02u:00',SEC_TO_TIME(%u)," - "'%s','%s','%s')", + "'%s','%s')", CrsCod, TT_TimeTable[Weekday][Interval].Columns[Column].GrpCod, Weekday, @@ -599,8 +599,7 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod) TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals * Gbl.TimeTable.Config.SecondsPerInterval, TT_ClassTypeDB[TT_TimeTable[Weekday][Interval].Columns[Column].ClassType], - TT_TimeTable[Weekday][Interval].Columns[Column].Place, - TT_TimeTable[Weekday][Interval].Columns[Column].Group); + TT_TimeTable[Weekday][Interval].Columns[Column].Info); } /*****************************************************************************/ @@ -636,7 +635,7 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod) TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals) DB_QueryINSERT ("can not create office timetable", "INSERT INTO timetable_tut" - " (UsrCod,Weekday,StartTime,Duration,Place)" + " (UsrCod,Weekday,StartTime,Duration,Info)" " VALUES" " (%ld,%u,'%02u:%02u:00',SEC_TO_TIME(%u),'%s')", UsrCod, @@ -644,7 +643,7 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod) Hour,Min, TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals * Gbl.TimeTable.Config.SecondsPerInterval, - TT_TimeTable[Weekday][Interval].Columns[Column].Place); + TT_TimeTable[Weekday][Interval].Columns[Column].Info); } /*****************************************************************************/ @@ -668,7 +667,6 @@ static void TT_FillTimeTableFromDB (long UsrCod) unsigned EndTimeSeconds; struct TT_Range RangeCell; unsigned FirstFreeColumn; - long GrpCod; TT_ClassType_t ClassType = TT_FREE; // Initialized to avoid warning bool TimeTableIsIncomplete = false; bool TimeTableHasSpaceForThisClass; @@ -685,9 +683,8 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT timetable_crs.Weekday," "TIME_TO_SEC(timetable_crs.StartTime) AS S," "TIME_TO_SEC(timetable_crs.Duration) AS D," - "timetable_crs.Place," + "timetable_crs.Info," "timetable_crs.ClassType," - "timetable_crs.GroupName," "timetable_crs.GrpCod," "timetable_crs.CrsCod" " FROM timetable_crs,crs_usr" @@ -698,9 +695,8 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT timetable_crs.Weekday," "TIME_TO_SEC(timetable_crs.StartTime) AS S," "TIME_TO_SEC(timetable_crs.Duration) AS D," - "timetable_crs.Place," + "timetable_crs.Info," "timetable_crs.ClassType," - "timetable_crs.GroupName," "timetable_crs.GrpCod," "timetable_crs.CrsCod" " FROM timetable_crs,crs_grp_usr" @@ -710,15 +706,14 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT Weekday," "TIME_TO_SEC(StartTime) AS S," "TIME_TO_SEC(Duration) AS D," - "Place," + "Info," "'tutoring' AS ClassType," - "'' AS GroupName," "-1 AS GrpCod," "-1 AS CrsCod" " FROM timetable_tut" " WHERE UsrCod=%ld" " ORDER BY Weekday,S,ClassType," - "GroupName,GrpCod,Place,D DESC,CrsCod", + "GrpCod,Info,D DESC,CrsCod", UsrCod,UsrCod,UsrCod); break; case Grp_ALL_GROUPS: @@ -726,9 +721,8 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT timetable_crs.Weekday," "TIME_TO_SEC(timetable_crs.StartTime) AS S," "TIME_TO_SEC(timetable_crs.Duration) AS D," - "timetable_crs.Place," + "timetable_crs.Info," "timetable_crs.ClassType," - "timetable_crs.GroupName," "timetable_crs.GrpCod," "timetable_crs.CrsCod" " FROM timetable_crs,crs_usr" @@ -738,15 +732,14 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT Weekday," "TIME_TO_SEC(StartTime) AS S," "TIME_TO_SEC(Duration) AS D," - "Place," + "Info," "'tutoring' AS ClassType," - "'' AS GroupName," "-1 AS GrpCod," "-1 AS CrsCod" " FROM timetable_tut" " WHERE UsrCod=%ld" " ORDER BY Weekday,S,ClassType," - "GroupName,GrpCod,Place,D DESC,CrsCod", + "GrpCod,Info,D DESC,CrsCod", UsrCod,UsrCod); break; } @@ -759,23 +752,21 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT Weekday," "TIME_TO_SEC(StartTime) AS S," "TIME_TO_SEC(Duration) AS D," - "Place," + "Info," "ClassType," - "GroupName," "GrpCod" " FROM timetable_crs" " WHERE CrsCod=%ld" " ORDER BY Weekday,S,ClassType," - "GroupName,GrpCod,Place,D DESC", + "GrpCod,Info,D DESC", Gbl.CurrentCrs.Crs.CrsCod); else NumRows = DB_QuerySELECT (&mysql_res,"can not get timetable", "SELECT timetable_crs.Weekday," "TIME_TO_SEC(timetable_crs.StartTime) AS S," "TIME_TO_SEC(timetable_crs.Duration) AS D," - "timetable_crs.Place," + "timetable_crs.Info," "timetable_crs.ClassType," - "timetable_crs.GroupName," "timetable_crs.GrpCod" " FROM timetable_crs,crs_usr" " WHERE timetable_crs.CrsCod=%ld" @@ -785,16 +776,15 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT timetable_crs.Weekday," "TIME_TO_SEC(timetable_crs.StartTime) AS S," "TIME_TO_SEC(timetable_crs.Duration) AS D," - "timetable_crs.Place," + "timetable_crs.Info," "timetable_crs.ClassType," - "timetable_crs.GroupName," "timetable_crs.GrpCod" " FROM timetable_crs,crs_grp_usr" " WHERE timetable_crs.CrsCod=%ld" " AND crs_grp_usr.UsrCod=%ld" " AND timetable_crs.GrpCod=crs_grp_usr.GrpCod" " ORDER BY Weekday,S,ClassType," - "GroupName,GrpCod,Place,D DESC", + "GrpCod,Info,D DESC", Gbl.CurrentCrs.Crs.CrsCod,UsrCod, Gbl.CurrentCrs.Crs.CrsCod,UsrCod); break; @@ -803,10 +793,10 @@ static void TT_FillTimeTableFromDB (long UsrCod) "SELECT Weekday," "TIME_TO_SEC(StartTime) AS S," "TIME_TO_SEC(Duration) AS D," - "Place" + "Info" " FROM timetable_tut" " WHERE UsrCod=%ld" - " ORDER BY Weekday,S,Place,D DESC", + " ORDER BY Weekday,S,Info,D DESC", UsrCod); break; } @@ -873,8 +863,7 @@ static void TT_FillTimeTableFromDB (long UsrCod) TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType = TT_FREE_INTERVAL; TT_TimeTable[Weekday][Interval].Columns[Column].ClassType = TT_FREE; TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals = 0; - TT_TimeTable[Weekday][Interval].Columns[Column].Group[0] = '\0'; - TT_TimeTable[Weekday][Interval].Columns[Column].Place[0] = '\0'; + TT_TimeTable[Weekday][Interval].Columns[Column].Info[0] = '\0'; } } @@ -885,12 +874,6 @@ static void TT_FillTimeTableFromDB (long UsrCod) { row = mysql_fetch_row (mysql_res); - if (Gbl.TimeTable.Type == TT_MY_TIMETABLE || - Gbl.TimeTable.Type == TT_COURSE_TIMETABLE) - /* Group code */ - if (sscanf (row[6],"%ld",&GrpCod) != 1) - GrpCod = -1; - /* Day of week (row[0]) */ if (sscanf (row[0],"%u",&Weekday) != 1) Lay_ShowErrorAndExit ("Wrong day of week in timetable."); @@ -979,24 +962,27 @@ static void TT_FillTimeTableFromDB (long UsrCod) TT_TimeTable[Weekday][i].NumColumns++; } - /* Course (row[7]), group (row[5]) and place (row[3])*/ + /* Course (row[6]) and info (row[3])*/ switch (Gbl.TimeTable.Type) { case TT_MY_TIMETABLE: case TT_COURSE_TIMETABLE: + /* Group code (row[5]) */ + if (Gbl.TimeTable.Type == TT_MY_TIMETABLE || + Gbl.TimeTable.Type == TT_COURSE_TIMETABLE) + if (sscanf (row[5],"%ld",&TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod) != 1) + TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod = -1; + + /* Course code (row[6]) */ TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].CrsCod = - (Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[7]) : + (Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[6]) : Gbl.CurrentCrs.Crs.CrsCod); - Str_Copy (TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].Group, - row[5], - Grp_MAX_BYTES_GROUP_NAME); - TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].GrpCod = GrpCod; /* falls through */ /* no break */ case TT_TUTORING_TIMETABLE: - Str_Copy (TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].Place, + Str_Copy (TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].Info, row[3], - TT_MAX_BYTES_PLACE); + TT_MAX_BYTES_INFO); break; } @@ -1098,8 +1084,7 @@ static void TT_ModifTimeTable (void) TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FREE_INTERVAL; TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = TT_FREE; TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationIntervals = 0; - TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Group[0] = '\0'; - TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Place[0] = '\0'; + TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Info[0] = '\0'; TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].NumColumns--; } @@ -1113,12 +1098,9 @@ static void TT_ModifTimeTable (void) TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].IntervalType = TT_FIRST_INTERVAL; TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].ClassType = Gbl.TimeTable.ClassType; TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].DurationIntervals = Gbl.TimeTable.DurationIntervals; - Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Group, - Gbl.TimeTable.Group, - Grp_MAX_BYTES_GROUP_NAME); - Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Place, - Gbl.TimeTable.Place, - TT_MAX_BYTES_PLACE); + Str_Copy (TT_TimeTable[Gbl.TimeTable.Weekday][Gbl.TimeTable.Interval].Columns[Gbl.TimeTable.Column].Info, + Gbl.TimeTable.Info, + TT_MAX_BYTES_INFO); } } @@ -1225,7 +1207,7 @@ static void TT_DrawTimeTable (void) if (ContinuousFreeMinicolumns) { TT_TimeTableDrawCell (Weekday,Interval,Column - 1,ContinuousFreeMinicolumns, - -1L,TT_FREE_INTERVAL,TT_FREE,0,NULL,-1,NULL); + -1L,TT_FREE_INTERVAL,TT_FREE,0,-1L,NULL); ContinuousFreeMinicolumns = 0; } TT_TimeTableDrawCell (Weekday,Interval,Column, @@ -1235,13 +1217,12 @@ static void TT_DrawTimeTable (void) TT_TimeTable[Weekday][Interval].Columns[Column].IntervalType, TT_TimeTable[Weekday][Interval].Columns[Column].ClassType, TT_TimeTable[Weekday][Interval].Columns[Column].DurationIntervals, - TT_TimeTable[Weekday][Interval].Columns[Column].Group, TT_TimeTable[Weekday][Interval].Columns[Column].GrpCod, - TT_TimeTable[Weekday][Interval].Columns[Column].Place); + TT_TimeTable[Weekday][Interval].Columns[Column].Info); } if (ContinuousFreeMinicolumns) TT_TimeTableDrawCell (Weekday,Interval,Column - 1,ContinuousFreeMinicolumns, - -1L,TT_FREE_INTERVAL,TT_FREE,0,NULL,-1L,NULL); + -1L,TT_FREE_INTERVAL,TT_FREE,0,-1L,NULL); } /* Empty column used to adjust height */ @@ -1434,14 +1415,13 @@ static void TT_DrawCellAlignTimeTable (void) static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Column,unsigned ColSpan, long CrsCod,TT_IntervalType_t IntervalType,TT_ClassType_t ClassType, - unsigned DurationNumIntervals,char *Group,long GrpCod,char *Place) + unsigned DurationNumIntervals,long GrpCod,const char *Info) { extern const char *Txt_unknown_removed_course; extern const char *Txt_TIMETABLE_CLASS_TYPES[TT_NUM_CLASS_TYPES]; extern const char *Txt_Group; extern const char *Txt_All_groups; - extern const char *Txt_Classroom; - extern const char *Txt_Place; + extern const char *Txt_Info; static const char *TimeTableClasses[TT_NUM_CLASS_TYPES] = { "TT_FREE", // TT_FREE (free hour) @@ -1479,13 +1459,13 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co if (RowSpan == 0) return; - /***** If group code > 0, a group is selected ==> get group type and name *****/ + /***** If group code > 0, a group is selected ==> get group data *****/ if (IntervalType == TT_FIRST_INTERVAL && (Gbl.TimeTable.View == TT_CRS_VIEW || Gbl.TimeTable.View == TT_CRS_EDIT) && GrpCod > 0) { - /* Get group type and name */ + /* Get group data */ GrpDat.GrpCod = GrpCod; Grp_GetDataOfGroupByCod (&GrpDat); } @@ -1539,21 +1519,20 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co Gbl.TimeTable.Config.Range.MinutesPerInterval); // Minutes /***** Group *****/ - if (Gbl.TimeTable.View == TT_CRS_VIEW) + if (Gbl.TimeTable.View == TT_CRS_VIEW && + GrpCod > 0) { - if (GrpCod <= 0) - { - if (Group[0]) - fprintf (Gbl.F.Out,"
%s",Group); - } - else - fprintf (Gbl.F.Out,"
%s %s", - GrpDat.GrpTypName,GrpDat.GrpName); + fprintf (Gbl.F.Out,"
%s" + "
%s", + GrpDat.GrpTypName,GrpDat.GrpName); + if (GrpDat.Classroom.ClaCod > 0) + fprintf (Gbl.F.Out,"
(%s)", + GrpDat.Classroom.ShrtName); } - /***** Place *****/ - if (Place[0]) - fprintf (Gbl.F.Out,"
%s",Place); + /***** Info *****/ + if (Info[0]) + fprintf (Gbl.F.Out,"
%s",Info); /***** End cell *****/ fprintf (Gbl.F.Out,""); @@ -1679,36 +1658,36 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co } fprintf (Gbl.F.Out,""); - /***** Classroom *****/ + /***** Info *****/ fprintf (Gbl.F.Out,"
" - "