Version 16.189

This commit is contained in:
Antonio Cañas Vargas 2017-04-25 02:07:32 +02:00
parent 136290233f
commit 0cd2ceb4c5
5 changed files with 104 additions and 103 deletions

View File

@ -2364,7 +2364,7 @@ a:hover img.CENTRE_PHOTO_SHOW
font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif;
color:#345C6C; color:#345C6C;
font-size:10pt; font-size:10pt;
line-height:110%; line-height:100%;
letter-spacing:0; letter-spacing:0;
} }
.TT_DAY .TT_DAY
@ -2385,17 +2385,17 @@ a:hover img.CENTRE_PHOTO_SHOW
{ {
font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif;
color:#404040; color:#404040;
font-size:14pt; font-size:13pt;
font-weight:bold; font-weight:bold;
line-height:110%; line-height:100%;
letter-spacing:0; letter-spacing:0;
} }
.TT_HOUR_SMALL .TT_HOUR_SMALL
{ {
font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif; font-family:"Arial Narrow","Nimbus Sans L","DejaVu LGC Sans Condensed",sans-serif;
color:#A0A0A0; color:#A0A0A0;
font-size:10pt; font-size:8pt;
line-height:110%; line-height:100%;
letter-spacing:0; letter-spacing:0;
} }
.TT_HOUR {height:16px;} .TT_HOUR {height:16px;}

View File

@ -1061,10 +1061,10 @@ CREATE TABLE IF NOT EXISTS svy_users (
CREATE TABLE IF NOT EXISTS timetable_crs ( CREATE TABLE IF NOT EXISTS timetable_crs (
CrsCod INT NOT NULL DEFAULT -1, CrsCod INT NOT NULL DEFAULT -1,
GrpCod INT NOT NULL DEFAULT -1, GrpCod INT NOT NULL DEFAULT -1,
Day ENUM('L','M','X','J','V','S','D') NOT NULL, Weekday TINYINT NOT NULL,
Hour TINYINT NOT NULL, StartTime TIME NOT NULL,
Duration TINYINT NOT NULL, Duration TIME NOT NULL,
ClassType ENUM('libre','teoria','practicas') NOT NULL, ClassType ENUM('free','lecture','practical') NOT NULL,
Place VARCHAR(511) NOT NULL, Place VARCHAR(511) NOT NULL,
GroupName VARCHAR(2047) NOT NULL, GroupName VARCHAR(2047) NOT NULL,
INDEX(CrsCod,GrpCod)); INDEX(CrsCod,GrpCod));
@ -1073,9 +1073,9 @@ CREATE TABLE IF NOT EXISTS timetable_crs (
-- --
CREATE TABLE IF NOT EXISTS timetable_tut ( CREATE TABLE IF NOT EXISTS timetable_tut (
UsrCod INT NOT NULL, UsrCod INT NOT NULL,
Day ENUM('L','M','X','J','V','S','D') NOT NULL, Weekday TINYINT NOT NULL,
Hour TINYINT NOT NULL, StartTime TIME NOT NULL,
Duration TINYINT NOT NULL, Duration TIME NOT NULL,
Place VARCHAR(511) NOT NULL, Place VARCHAR(511) NOT NULL,
INDEX(UsrCod)); INDEX(UsrCod));
-- --

View File

@ -219,13 +219,24 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.188 (2017-04-24)" #define Log_PLATFORM_VERSION "SWAD 16.189 (2017-04-25)"
#define CSS_FILE "swad16.185.3.css" #define CSS_FILE "swad16.189.css"
#define JS_FILE "swad16.181.js" #define JS_FILE "swad16.181.js"
// 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 16.189: Apr 25, 2017 Changes in timetable. (218027 lines)
7 changes necessary in database.
ALTER TABLE timetable_crs DROP COLUMN DayOld;
ALTER TABLE timetable_crs DROP COLUMN HourOld;
ALTER TABLE timetable_crs DROP COLUMN DurationOld;
ALTER TABLE timetable_crs DROP COLUMN ClassTypeOld;
ALTER TABLE timetable_tut DROP COLUMN DayOld;
ALTER TABLE timetable_tut DROP COLUMN HourOld;
ALTER TABLE timetable_tut DROP COLUMN DurationOld;
Version 16.188: Apr 24, 2017 Changes in timetable. Not finished. (218029 lines) Version 16.188: Apr 24, 2017 Changes in timetable. Not finished. (218029 lines)
Version 16.187.3: Apr 24, 2017 Changes in timetable. Not finished. (218040 lines) Version 16.187.3: Apr 24, 2017 Changes in timetable. Not finished. (218040 lines)
Version 16.187.2: Apr 24, 2017 Changes in timetable. Not finished. (217963 lines) Version 16.187.2: Apr 24, 2017 Changes in timetable. Not finished. (217963 lines)

View File

@ -2245,38 +2245,27 @@ mysql> DESCRIBE svy_users;
/***** Table timetable_crs *****/ /***** Table timetable_crs *****/
/* /*
mysql> DESCRIBE timetable_crs; mysql> DESCRIBE timetable_crs;
+--------------+------------------------------------+------+-----+---------+-------+ +-----------+------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+--------------+------------------------------------+------+-----+---------+-------+ +-----------+------------------------------------+------+-----+---------+-------+
| CrsCod | int(11) | NO | MUL | -1 | | | CrsCod | int(11) | NO | MUL | -1 | |
| GrpCod | int(11) | NO | | -1 | | | GrpCod | int(11) | NO | | -1 | |
| Weekday | tinyint(4) | NO | | NULL | | | Weekday | tinyint(4) | NO | | NULL | |
| StartTime | time | NO | | NULL | | | StartTime | time | NO | | NULL | |
| Duration | time | NO | | NULL | | | Duration | time | NO | | NULL | |
| ClassType | enum('free','lecture','practical') | NO | | NULL | | | ClassType | enum('free','lecture','practical') | NO | | NULL | |
| DayOld | enum('L','M','X','J','V','S','D') | NO | | NULL | | | Place | varchar(511) | NO | | NULL | |
| HourOld | tinyint(4) | NO | | NULL | | | GroupName | varchar(2047) | NO | | NULL | |
| DurationOld | tinyint(4) | NO | | NULL | | +-----------+------------------------------------+------+-----+---------+-------+
| ClassTypeOld | enum('libre','teoria','practicas') | NO | | NULL | | 8 rows in set (0,00 sec)
| Place | varchar(511) | NO | | NULL | |
| GroupName | varchar(2047) | NO | | NULL | |
+--------------+------------------------------------+------+-----+---------+-------+
12 rows in set (0,00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_crs (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_crs ("
"CrsCod INT NOT NULL DEFAULT -1," "CrsCod INT NOT NULL DEFAULT -1,"
"GrpCod INT NOT NULL DEFAULT -1," "GrpCod INT NOT NULL DEFAULT -1,"
"Weekday TINYINT NOT NULL," // 0=Monday...6=Sunday "Weekday TINYINT NOT NULL," // 0=Monday...6=Sunday
"StartTime TIME NOT NULL," "StartTime TIME NOT NULL,"
"Duration TIME NOT NULL," "Duration TIME NOT NULL,"
"ClassType ENUM('free','lecture','practical') NOT NULL," "ClassType ENUM('free','lecture','practical') NOT NULL,"
"DayOld ENUM('L','M','X','J','V','S','D') NOT NULL,"
"HourOld TINYINT NOT NULL,"
"DurationOld TINYINT NOT NULL,"
"ClassTypeOld ENUM('libre','teoria','practicas') NOT NULL,"
"Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE "Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE
"GroupName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME "GroupName VARCHAR(2047) NOT NULL," // Grp_MAX_BYTES_GROUP_NAME
"INDEX(CrsCod,GrpCod))"); "INDEX(CrsCod,GrpCod))");
@ -2284,31 +2273,22 @@ mysql> DESCRIBE timetable_crs;
/***** Table timetable_tut *****/ /***** Table timetable_tut *****/
/* /*
mysql> DESCRIBE timetable_tut; mysql> DESCRIBE timetable_tut;
+-------------+-----------------------------------+------+-----+---------+-------+ +-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------------------+------+-----+---------+-------+ +-----------+--------------+------+-----+---------+-------+
| UsrCod | int(11) | NO | MUL | NULL | | | UsrCod | int(11) | NO | MUL | NULL | |
| Weekday | tinyint(4) | NO | | NULL | | | Weekday | tinyint(4) | NO | | NULL | |
| StartTime | time | NO | | NULL | | | StartTime | time | NO | | NULL | |
| Duration | time | NO | | NULL | | | Duration | time | NO | | NULL | |
| DayOld | enum('L','M','X','J','V','S','D') | NO | | NULL | | | Place | varchar(511) | NO | | NULL | |
| HourOld | tinyint(4) | NO | | NULL | | +-----------+--------------+------+-----+---------+-------+
| DurationOld | tinyint(4) | NO | | NULL | | 5 rows in set (0,00 sec)
| Place | varchar(511) | NO | | NULL | |
+-------------+-----------------------------------+------+-----+---------+-------+
8 rows in set (0,01 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_tut (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS timetable_tut ("
"UsrCod INT NOT NULL," "UsrCod INT NOT NULL,"
"Weekday TINYINT NOT NULL," // 0=Monday...6=Sunday "Weekday TINYINT NOT NULL," // 0=Monday...6=Sunday
"StartTime TIME NOT NULL," "StartTime TIME NOT NULL,"
"Duration TIME NOT NULL," "Duration TIME NOT NULL,"
"DayOld ENUM('L','M','X','J','V','S','D') NOT NULL,"
"HourOld TINYINT NOT NULL,"
"DurationOld TINYINT NOT NULL,"
"Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE "Place VARCHAR(511) NOT NULL," // TT_MAX_BYTES_PLACE
"INDEX(UsrCod))"); "INDEX(UsrCod))");

View File

@ -184,7 +184,7 @@ static void TT_GetParamsTimeTable (void)
Gbl.TimeTable.Interval = (unsigned) Gbl.TimeTable.Interval = (unsigned)
Par_GetParToUnsignedLong ("ModTTHour", Par_GetParToUnsignedLong ("ModTTHour",
0, 0,
TT_HOURS_PER_DAY * 2 - 1, TT_INTERVALS_PER_DAY - 1,
0); 0);
/***** Get number of column *****/ /***** Get number of column *****/
@ -615,7 +615,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
case Grp_ONLY_MY_GROUPS: case Grp_ONLY_MY_GROUPS:
sprintf (Query,"SELECT " sprintf (Query,"SELECT "
"timetable_crs.Weekday," "timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime)," "TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D," "TIME_TO_SEC(timetable_crs.Duration) AS D,"
"timetable_crs.Place," "timetable_crs.Place,"
"timetable_crs.ClassType," "timetable_crs.ClassType,"
@ -629,7 +629,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
" UNION DISTINCT " " UNION DISTINCT "
"SELECT " "SELECT "
"timetable_crs.Weekday," "timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime)," "TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D," "TIME_TO_SEC(timetable_crs.Duration) AS D,"
"timetable_crs.Place," "timetable_crs.Place,"
"timetable_crs.ClassType," "timetable_crs.ClassType,"
@ -642,7 +642,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
" UNION " " UNION "
"SELECT " "SELECT "
"Weekday," "Weekday,"
"TIME_TO_SEC(StartTime)," "TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(Duration) AS D,"
"Place," "Place,"
"'tutoring' AS ClassType," "'tutoring' AS ClassType,"
@ -651,14 +651,14 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
"-1 AS CrsCod" "-1 AS CrsCod"
" FROM timetable_tut" " FROM timetable_tut"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY Weekday,StartTime,ClassType," " ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC,CrsCod", "GroupName,GrpCod,Place,D DESC,CrsCod",
UsrCod,UsrCod,UsrCod); UsrCod,UsrCod,UsrCod);
break; break;
case Grp_ALL_GROUPS: case Grp_ALL_GROUPS:
sprintf (Query,"SELECT " sprintf (Query,"SELECT "
"timetable_crs.Weekday," "timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime)," "TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D," "TIME_TO_SEC(timetable_crs.Duration) AS D,"
"timetable_crs.Place," "timetable_crs.Place,"
"timetable_crs.ClassType," "timetable_crs.ClassType,"
@ -671,7 +671,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
" UNION " " UNION "
"SELECT " "SELECT "
"Weekday," "Weekday,"
"TIME_TO_SEC(StartTime)," "TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(Duration) AS D,"
"Place," "Place,"
"'tutoring' AS ClassType," "'tutoring' AS ClassType,"
@ -680,7 +680,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
"-1 AS CrsCod" "-1 AS CrsCod"
" FROM timetable_tut" " FROM timetable_tut"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY Weekday,StartTime,ClassType," " ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC,CrsCod", "GroupName,GrpCod,Place,D DESC,CrsCod",
UsrCod,UsrCod); UsrCod,UsrCod);
break; break;
@ -692,7 +692,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
Gbl.Action.Act == ActChgCrsTT) // If we are editing, all groups are shown Gbl.Action.Act == ActChgCrsTT) // If we are editing, all groups are shown
sprintf (Query,"SELECT " sprintf (Query,"SELECT "
"Weekday," "Weekday,"
"TIME_TO_SEC(StartTime)," "TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(Duration) AS D,"
"Place," "Place,"
"ClassType," "ClassType,"
@ -700,13 +700,13 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
"GrpCod" "GrpCod"
" FROM timetable_crs" " FROM timetable_crs"
" WHERE CrsCod=%ld" " WHERE CrsCod=%ld"
" ORDER BY Weekday,StartTime,ClassType," " ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC", "GroupName,GrpCod,Place,D DESC",
Gbl.CurrentCrs.Crs.CrsCod); Gbl.CurrentCrs.Crs.CrsCod);
else else
sprintf (Query,"SELECT " sprintf (Query,"SELECT "
"timetable_crs.Weekday," "timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime)," "TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D," "TIME_TO_SEC(timetable_crs.Duration) AS D,"
"timetable_crs.Place," "timetable_crs.Place,"
"timetable_crs.ClassType," "timetable_crs.ClassType,"
@ -718,7 +718,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
" AND timetable_crs.CrsCod=crs_usr.CrsCod" " AND timetable_crs.CrsCod=crs_usr.CrsCod"
" UNION DISTINCT " " UNION DISTINCT "
"SELECT timetable_crs.Weekday," "SELECT timetable_crs.Weekday,"
"TIME_TO_SEC(timetable_crs.StartTime)," "TIME_TO_SEC(timetable_crs.StartTime) AS S,"
"TIME_TO_SEC(timetable_crs.Duration) AS D," "TIME_TO_SEC(timetable_crs.Duration) AS D,"
"timetable_crs.Place," "timetable_crs.Place,"
"timetable_crs.ClassType," "timetable_crs.ClassType,"
@ -728,7 +728,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
" WHERE timetable_crs.CrsCod=%ld" " WHERE timetable_crs.CrsCod=%ld"
" AND crs_grp_usr.UsrCod=%ld" " AND crs_grp_usr.UsrCod=%ld"
" AND timetable_crs.GrpCod=crs_grp_usr.GrpCod" " AND timetable_crs.GrpCod=crs_grp_usr.GrpCod"
" ORDER BY Weekday,StartTime,ClassType," " ORDER BY Weekday,S,ClassType,"
"GroupName,GrpCod,Place,D DESC", "GroupName,GrpCod,Place,D DESC",
Gbl.CurrentCrs.Crs.CrsCod,UsrCod, Gbl.CurrentCrs.Crs.CrsCod,UsrCod,
Gbl.CurrentCrs.Crs.CrsCod,UsrCod); Gbl.CurrentCrs.Crs.CrsCod,UsrCod);
@ -736,12 +736,12 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
case TT_TUTORING_TIMETABLE: case TT_TUTORING_TIMETABLE:
sprintf (Query,"SELECT " sprintf (Query,"SELECT "
"Weekday," "Weekday,"
"TIME_TO_SEC(StartTime)," "TIME_TO_SEC(StartTime) AS S,"
"TIME_TO_SEC(Duration) AS D," "TIME_TO_SEC(Duration) AS D,"
"Place" "Place"
" FROM timetable_tut" " FROM timetable_tut"
" WHERE UsrCod=%ld" " WHERE UsrCod=%ld"
" ORDER BY Weekday,StartTime,Place,D DESC", " ORDER BY Weekday,S,Place,D DESC",
UsrCod); UsrCod);
break; break;
} }
@ -761,17 +761,18 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
GrpCod = -1; GrpCod = -1;
/* Day of week (row[0]) */ /* Day of week (row[0]) */
if (sscanf (row[0],"%u",&Weekday) == 1) if (sscanf (row[0],"%u",&Weekday) != 1)
if (Weekday >= TT_DAYS_PER_WEEK) Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
Lay_ShowErrorAndExit ("Wrong day of week in timetable."); if (Weekday >= TT_DAYS_PER_WEEK)
Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
/* StartTime formatted as seconds (row[1]) /* StartTime formatted as seconds (row[1])
--> StartTime in number of intervals */ --> StartTime in number of intervals */
if (sscanf (row[1],"%u",&Seconds) != 1) if (sscanf (row[1],"%u",&Seconds) != 1)
Lay_ShowErrorAndExit ("Wrong hour in timetable."); Lay_ShowErrorAndExit ("Wrong start time in timetable.");
Interval = Seconds / TT_SECONDS_PER_MINUTE; Interval = Seconds / TT_SECONDS_PER_INTERVAL;
if (Interval < TT_INTERVALS_BEFORE_START_HOUR) if (Interval < TT_INTERVALS_BEFORE_START_HOUR)
Lay_ShowErrorAndExit ("Wrong hour in timetable."); Lay_ShowErrorAndExit ("Wrong start time in timetable.");
Interval -= TT_INTERVALS_BEFORE_START_HOUR; Interval -= TT_INTERVALS_BEFORE_START_HOUR;
/* Duration formatted as seconds (row[2]) /* Duration formatted as seconds (row[2])
@ -815,6 +816,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
FirstFreeColumn = Column; FirstFreeColumn = Column;
break; break;
} }
if (FirstFreeColumn < TT_MAX_COLUMNS_PER_CELL) if (FirstFreeColumn < TT_MAX_COLUMNS_PER_CELL)
// If there's place for another column in this cell // If there's place for another column in this cell
{ {
@ -834,10 +836,10 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
{ {
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].ClassType = ClassType; TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].ClassType = ClassType;
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].DurationNumIntervals = DurationNumIntervals; TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].DurationNumIntervals = DurationNumIntervals;
TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].IntervalType = TT_FIRST_INTERVAL; TT_TimeTable[Weekday][Interval].Columns[FirstFreeColumn].IntervalType = TT_FIRST_INTERVAL;
for (I = Interval + 1; for (I = Interval + 1;
I < Interval + DurationNumIntervals && I < Interval + DurationNumIntervals &&
I < TT_HOURS_PER_DAY * 2; I < TT_INTERVALS_PER_DAY;
I++) I++)
{ {
TT_TimeTable[Weekday][I].Columns[FirstFreeColumn].IntervalType = TT_NEXT_INTERVAL; TT_TimeTable[Weekday][I].Columns[FirstFreeColumn].IntervalType = TT_NEXT_INTERVAL;
@ -1006,7 +1008,8 @@ static void TT_DrawTimeTable (void)
Weekday = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7; Weekday = (DayColumn + Gbl.Prefs.FirstDayOfWeek) % 7;
/* Check how many colums are needed. /* Check how many colums are needed.
For each item (class) in this hour from left to right, we must check the maximum of columns */ For each item (class) in this hour from left to right,
we must check the maximum of columns */
for (I = 0; for (I = 0;
I < TT_INTERVALS_PER_DAY; I < TT_INTERVALS_PER_DAY;
I++) I++)
@ -1332,11 +1335,14 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
/***** Draw cell depending on type of view *****/ /***** Draw cell depending on type of view *****/
switch (TimeTableView) switch (TimeTableView)
{ {
case TT_CRS_SHOW: case TT_CRS_SHOW: // View course timetable
case TT_TUT_SHOW: case TT_TUT_SHOW: // View tutoring timetable
if (IntervalType != TT_FREE_INTERVAL) // If cell is not empty... if (IntervalType != TT_FREE_INTERVAL) // If cell is not empty...
{ {
/***** Start cell *****/
fprintf (Gbl.F.Out,"<div class=\"TT_CELL TT_TXT\">"); fprintf (Gbl.F.Out,"<div class=\"TT_CELL TT_TXT\">");
/***** Course name *****/
if (Gbl.TimeTable.Type == TT_MY_TIMETABLE) if (Gbl.TimeTable.Type == TT_MY_TIMETABLE)
{ {
Crs.CrsCod = CrsCod; Crs.CrsCod = CrsCod;
@ -1347,14 +1353,17 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
Crs.ShrtName[0] ? Crs.ShrtName : Crs.ShrtName[0] ? Crs.ShrtName :
Txt_unknown_removed_course); Txt_unknown_removed_course);
} }
fprintf (Gbl.F.Out,"%s (%dh%s)",
/***** Type of class and duration *****/
fprintf (Gbl.F.Out,"%s (%u:%02u h)",
Txt_TIMETABLE_CLASS_TYPES[ClassType], Txt_TIMETABLE_CLASS_TYPES[ClassType],
DurationNumIntervals / 2, (DurationNumIntervals / TT_INTERVALS_PER_HOUR), // Hours
DurationNumIntervals % 2 ? "30'" : (DurationNumIntervals % TT_INTERVALS_PER_HOUR) * TT_MINUTES_PER_INTERVAL); // Minutes
"");
/***** Group *****/
if (TimeTableView == TT_CRS_SHOW) if (TimeTableView == TT_CRS_SHOW)
{ {
if (GrpCod == -1) if (GrpCod <= 0)
{ {
if (Group[0]) if (Group[0])
fprintf (Gbl.F.Out,"<br />%s",Group); fprintf (Gbl.F.Out,"<br />%s",Group);
@ -1362,12 +1371,13 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
else else
fprintf (Gbl.F.Out,"<br />%s %s", fprintf (Gbl.F.Out,"<br />%s %s",
GrpDat.GrpTypName,GrpDat.GrpName); GrpDat.GrpTypName,GrpDat.GrpName);
if (Place[0])
fprintf (Gbl.F.Out,"<br />%s",Place);
} }
else // TimeTableView == TT_TUT_SHOW
if (Place[0]) /***** Place *****/
fprintf (Gbl.F.Out,"<br />%s",Place); if (Place[0])
fprintf (Gbl.F.Out,"<br />%s",Place);
/***** End cell *****/
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
} }
break; break;
@ -1396,20 +1406,21 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
Txt_TIMETABLE_CLASS_TYPES[CT]); Txt_TIMETABLE_CLASS_TYPES[CT]);
} }
fprintf (Gbl.F.Out,"</select>"); fprintf (Gbl.F.Out,"</select>");
if (IntervalType == TT_FREE_INTERVAL) if (IntervalType == TT_FREE_INTERVAL)
{ {
fprintf (Gbl.F.Out,"<input type=\"hidden\" name=\"ModTTDur\" value=\""); fprintf (Gbl.F.Out,"<input type=\"hidden\" name=\"ModTTDur\" value=\"");
for (I = Interval + 1; for (I = Interval + 1;
I < TT_HOURS_PER_DAY * 2; I < TT_INTERVALS_PER_DAY;
I++) I++)
if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL) if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL)
break; break;
MaxDuration = I - Interval; MaxDuration = I - Interval;
if (MaxDuration > 1) Dur = (MaxDuration >= TT_INTERVALS_PER_HOUR) ? TT_INTERVALS_PER_HOUR : // MaxDuration >= 1h ==> Dur = 1h
fprintf (Gbl.F.Out,"1:00"); MaxDuration; // MaxDuration < 1h ==> Dur = MaxDuration
else fprintf (Gbl.F.Out,"%u:%02u h\" />",
fprintf (Gbl.F.Out,"0:30"); (Dur / TT_INTERVALS_PER_HOUR), // Hours
fprintf (Gbl.F.Out," h\" />"); (Dur % TT_INTERVALS_PER_HOUR) * TT_MINUTES_PER_INTERVAL); // Minutes
} }
else else
{ {
@ -1418,7 +1429,7 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
" onchange=\"document.getElementById('%s').submit();\">", " onchange=\"document.getElementById('%s').submit();\">",
Gbl.Form.Id); Gbl.Form.Id);
for (I = Interval + TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals; for (I = Interval + TT_TimeTable[Weekday][Interval].Columns[Column].DurationNumIntervals;
I < TT_HOURS_PER_DAY * 2; I < TT_INTERVALS_PER_DAY;
I++) I++)
if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL) if (TT_TimeTable[Weekday][I].NumColumns == TT_MAX_COLUMNS_PER_CELL)
break; break;
@ -1433,9 +1444,8 @@ static void TT_TimeTableDrawCell (unsigned Weekday,unsigned Interval,unsigned Co
if (Dur == DurationNumIntervals) if (Dur == DurationNumIntervals)
fprintf (Gbl.F.Out," selected=\"selected\""); fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%u:%02u h</option>", fprintf (Gbl.F.Out,">%u:%02u h</option>",
Dur / 2, (Dur / TT_INTERVALS_PER_HOUR), // Hours
Dur % 2 ? 30 : (Dur % TT_INTERVALS_PER_HOUR) * TT_MINUTES_PER_INTERVAL); // Minutes
0);
} }
fprintf (Gbl.F.Out,"</select>"); fprintf (Gbl.F.Out,"</select>");