mirror of https://github.com/acanas/swad-core.git
Version 16.187.1
This commit is contained in:
parent
1b25600327
commit
cbe46c38ba
|
@ -219,13 +219,14 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** Public constants *****************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define Log_PLATFORM_VERSION "SWAD 16.187 (2017-04-24)"
|
#define Log_PLATFORM_VERSION "SWAD 16.187.1 (2017-04-24)"
|
||||||
#define CSS_FILE "swad16.185.3.css"
|
#define CSS_FILE "swad16.185.3.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.187.1: Apr 24, 2017 Changes in timetable. Not finished. (217958 lines)
|
||||||
Version 16.187: Apr 24, 2017 Changes in timetable. Not finished. (217947 lines)
|
Version 16.187: Apr 24, 2017 Changes in timetable. Not finished. (217947 lines)
|
||||||
35 changes necessary in database.
|
35 changes necessary in database.
|
||||||
ALTER TABLE timetable_crs CHANGE COLUMN Day DayOld ENUM('L','M','X','J','V','S','D') NOT NULL;
|
ALTER TABLE timetable_crs CHANGE COLUMN Day DayOld ENUM('L','M','X','J','V','S','D') NOT NULL;
|
||||||
|
|
|
@ -626,7 +626,7 @@ struct Globals
|
||||||
unsigned Day;
|
unsigned Day;
|
||||||
unsigned HourOld;
|
unsigned HourOld;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
TT_ClassTypeOld_t ClassTypeOld;
|
TT_ClassType_t ClassType;
|
||||||
unsigned DurationOld;
|
unsigned DurationOld;
|
||||||
char Place[TT_MAX_BYTES_PLACE + 1];
|
char Place[TT_MAX_BYTES_PLACE + 1];
|
||||||
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
||||||
|
|
255
swad_timetable.c
255
swad_timetable.c
|
@ -50,9 +50,9 @@ extern struct Globals Gbl;
|
||||||
/*************************** Internal constants ******************************/
|
/*************************** Internal constants ******************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
#define TT_START_HOUR 6 // Day starts at 6:00
|
#define TT_START_HOUR 6 // Day starts at 6:00
|
||||||
#define TT_HOURS_PER_DAY 18 // From 6:00 to 24:00
|
#define TT_END_HOUR 24 // Day ends at 24:00
|
||||||
// #define TT_HOURS_PER_DAY 2 // From 6:00 to 24:00
|
#define TT_HOURS_PER_DAY (TT_END_HOUR - TT_START_HOUR) // From 6:00 to 24:00
|
||||||
|
|
||||||
#define TT_DAYS 7 // Seven days per week
|
#define TT_DAYS 7 // Seven days per week
|
||||||
#define TT_MAX_COLUMNS_PER_CELL 3 // Maximum number of items (i.e. classes) in a timetable cell (1, 2, 3 or 4)
|
#define TT_MAX_COLUMNS_PER_CELL 3 // Maximum number of items (i.e. classes) in a timetable cell (1, 2, 3 or 4)
|
||||||
|
@ -74,7 +74,22 @@ extern struct Globals Gbl;
|
||||||
/************************* Internal global variables *************************/
|
/************************* Internal global variables *************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
char TimeTableCharsDays[TT_DAYS] = // TODO: Change from Spanish to numbers, also in database
|
char *TimeTableStrsClassTypeDB[TT_NUM_CLASS_TYPES] =
|
||||||
|
{
|
||||||
|
"free",
|
||||||
|
"lecture",
|
||||||
|
"practical",
|
||||||
|
"tutoring",
|
||||||
|
};
|
||||||
|
|
||||||
|
char *TimeTableStrsClassTypeOldDB[TT_NUM_CLASS_TYPES] = // TODO: Remove
|
||||||
|
{
|
||||||
|
"libre",
|
||||||
|
"teoria",
|
||||||
|
"practicas",
|
||||||
|
"tutorias",
|
||||||
|
};
|
||||||
|
char TimeTableCharsDaysOld[TT_DAYS] = // TODO: Remove
|
||||||
{
|
{
|
||||||
'L', // Monday
|
'L', // Monday
|
||||||
'M', // Tuesday
|
'M', // Tuesday
|
||||||
|
@ -85,36 +100,30 @@ char TimeTableCharsDays[TT_DAYS] = // TODO: Change from Spanish to numbers, also
|
||||||
'D', // Sunday
|
'D', // Sunday
|
||||||
};
|
};
|
||||||
|
|
||||||
char *TimeTableStrsClassTypeOldDB[TT_NUM_CLASS_TYPES] =
|
|
||||||
{
|
|
||||||
"free",
|
|
||||||
"lecture",
|
|
||||||
"practical",
|
|
||||||
"tutoring",
|
|
||||||
};
|
|
||||||
char *TimeTableStrsClassTypeOldDBOld[TT_NUM_CLASS_TYPES] = // TODO: Remove
|
|
||||||
{
|
|
||||||
"libre",
|
|
||||||
"teoria",
|
|
||||||
"practicas",
|
|
||||||
"tutorias",
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TimeTableColumn
|
struct TimeTableColumn
|
||||||
{
|
{
|
||||||
long CrsCod; // Course code (-1 if no course selected)
|
long CrsCod; // Course code (-1 if no course selected)
|
||||||
long GrpCod; // Group code (-1 if no group selected)
|
long GrpCod; // Group code (-1 if no group selected)
|
||||||
TT_HourType_t HourType;
|
TT_HourType_t HourType;
|
||||||
TT_ClassTypeOld_t ClassTypeOld;
|
TT_ClassType_t ClassType;
|
||||||
unsigned DurationOld;
|
unsigned DurationMinutes;
|
||||||
|
unsigned DurationOld; // TODO: Remove
|
||||||
char Place[TT_MAX_BYTES_PLACE + 1];
|
char Place[TT_MAX_BYTES_PLACE + 1];
|
||||||
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
char Group[Grp_MAX_BYTES_GROUP_NAME + 1];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
unsigned NumColumns;
|
unsigned NumColumns;
|
||||||
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
||||||
} TimeTable[TT_DAYS][TT_HOURS_PER_DAY * 12];
|
} TimeTableOld[TT_DAYS][TT_HOURS_PER_DAY * 12];
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned NumColumns;
|
||||||
|
struct TimeTableColumn Columns[TT_MAX_COLUMNS_PER_CELL];
|
||||||
|
} TT_TimeTable[TT_DAYS][TT_HOURS_PER_DAY * 12];
|
||||||
|
|
||||||
bool TimeTableHoursChecked[TT_HOURS_PER_DAY * 12];
|
bool TimeTableHoursChecked[TT_HOURS_PER_DAY * 12];
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -140,7 +149,7 @@ static void TT_TimeTableDrawHourCell (unsigned HourOld,unsigned Min,const char *
|
||||||
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld);
|
static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld);
|
||||||
static void TT_DrawCellAlignTimeTable (void);
|
static void TT_DrawCellAlignTimeTable (void);
|
||||||
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
||||||
long CrsCod,TT_HourType_t HourType,TT_ClassTypeOld_t ClassTypeOld,
|
long CrsCod,TT_HourType_t HourType,TT_ClassType_t ClassType,
|
||||||
unsigned DurationOld,char *Group,long GrpCod,char *Place);
|
unsigned DurationOld,char *Group,long GrpCod,char *Place);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -200,12 +209,12 @@ static void TT_GetParamsTimeTable (void)
|
||||||
|
|
||||||
/***** Get class type *****/
|
/***** Get class type *****/
|
||||||
Par_GetParToText ("ModTTClassTypeOld",StrClassTypeOld,TT_MAX_BYTES_STR_CLASS_TYPE);
|
Par_GetParToText ("ModTTClassTypeOld",StrClassTypeOld,TT_MAX_BYTES_STR_CLASS_TYPE);
|
||||||
for (Gbl.TimeTable.ClassTypeOld = (TT_ClassTypeOld_t) 0;
|
for (Gbl.TimeTable.ClassType = (TT_ClassType_t) 0;
|
||||||
Gbl.TimeTable.ClassTypeOld < (TT_ClassTypeOld_t) TT_NUM_CLASS_TYPES;
|
Gbl.TimeTable.ClassType < (TT_ClassType_t) TT_NUM_CLASS_TYPES;
|
||||||
Gbl.TimeTable.ClassTypeOld++)
|
Gbl.TimeTable.ClassType++)
|
||||||
if (!strcmp (StrClassTypeOld,TimeTableStrsClassTypeOldDB[Gbl.TimeTable.ClassTypeOld]))
|
if (!strcmp (StrClassTypeOld,TimeTableStrsClassTypeOldDB[Gbl.TimeTable.ClassType]))
|
||||||
break;
|
break;
|
||||||
if (Gbl.TimeTable.ClassTypeOld == (TT_ClassTypeOld_t) TT_NUM_CLASS_TYPES)
|
if (Gbl.TimeTable.ClassType == (TT_ClassType_t) TT_NUM_CLASS_TYPES)
|
||||||
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
|
Lay_ShowErrorAndExit ("Type of timetable cell is missing.");
|
||||||
|
|
||||||
/***** Get class duration *****/
|
/***** Get class duration *****/
|
||||||
|
@ -470,8 +479,10 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
|
||||||
char Query[512 +
|
char Query[512 +
|
||||||
TT_MAX_BYTES_PLACE +
|
TT_MAX_BYTES_PLACE +
|
||||||
Grp_MAX_BYTES_GROUP_NAME];
|
Grp_MAX_BYTES_GROUP_NAME];
|
||||||
unsigned HourOld;
|
unsigned Interval5Minutes;
|
||||||
unsigned Day;
|
unsigned Day;
|
||||||
|
unsigned Hour;
|
||||||
|
unsigned Min;
|
||||||
unsigned Column;
|
unsigned Column;
|
||||||
|
|
||||||
/***** Remove former timetable *****/
|
/***** Remove former timetable *****/
|
||||||
|
@ -483,27 +494,29 @@ static void TT_WriteCrsTimeTableIntoDB (long CrsCod)
|
||||||
for (Day = 0;
|
for (Day = 0;
|
||||||
Day < TT_DAYS;
|
Day < TT_DAYS;
|
||||||
Day++)
|
Day++)
|
||||||
for (HourOld = 0;
|
for (Interval5Minutes = 0, Hour = TT_START_HOUR, Min = 0;
|
||||||
HourOld < TT_HOURS_PER_DAY * 2;
|
Hour < TT_END_HOUR;
|
||||||
HourOld++)
|
Interval5Minutes++, Hour += (Min + 5) / 60, Min = (Min + 5) % 60)
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TimeTable[Day][HourOld].Columns[Column].HourType == TT_FIRST_HOUR &&
|
if (TT_TimeTable[Day][Interval5Minutes].Columns[Column].HourType == TT_FIRST_HOUR &&
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld > 0)
|
TT_TimeTable[Day][Interval5Minutes].Columns[Column].DurationOld > 0)
|
||||||
{
|
{
|
||||||
sprintf (Query,"INSERT INTO timetable_crs"
|
sprintf (Query,"INSERT INTO timetable_crs"
|
||||||
" (CrsCod,GrpCod,DayOld,HourOld,DurationOld,ClassTypeOld,Place,GroupName)"
|
" (CrsCod,GrpCod,Weekday,StartTime,Duration,"
|
||||||
|
"ClassType,Place,GroupName)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,%ld,'%c',%u,%d,'%s','%s','%s')",
|
" (%ld,%ld,%u,'%02u:%02u:00',SEC_TO_TIME(%u),"
|
||||||
|
"'%s','%s','%s')",
|
||||||
CrsCod,
|
CrsCod,
|
||||||
TimeTable[Day][HourOld].Columns[Column].GrpCod,
|
TT_TimeTable[Day][Interval5Minutes].Columns[Column].GrpCod,
|
||||||
TimeTableCharsDays[Day],
|
Day,
|
||||||
HourOld,
|
Hour,Min,
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld,
|
TT_TimeTable[Day][Interval5Minutes].Columns[Column].DurationMinutes * 60,
|
||||||
TimeTableStrsClassTypeOldDB[TimeTable[Day][HourOld].Columns[Column].ClassTypeOld],
|
TimeTableStrsClassTypeOldDB[TT_TimeTable[Day][Interval5Minutes].Columns[Column].ClassType],
|
||||||
TimeTable[Day][HourOld].Columns[Column].Place,
|
TT_TimeTable[Day][Interval5Minutes].Columns[Column].Place,
|
||||||
TimeTable[Day][HourOld].Columns[Column].Group);
|
TT_TimeTable[Day][Interval5Minutes].Columns[Column].Group);
|
||||||
DB_QueryINSERT (Query,"can not create course timetable");
|
DB_QueryINSERT (Query,"can not create course timetable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -535,16 +548,16 @@ static void TT_WriteTutTimeTableIntoDB (long UsrCod)
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TimeTable[Day][HourOld].Columns[Column].HourType == TT_FIRST_HOUR &&
|
if (TimeTableOld[Day][HourOld].Columns[Column].HourType == TT_FIRST_HOUR &&
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld > 0)
|
TimeTableOld[Day][HourOld].Columns[Column].DurationOld > 0)
|
||||||
{
|
{
|
||||||
sprintf (Query,"INSERT INTO timetable_tut"
|
sprintf (Query,"INSERT INTO timetable_tut"
|
||||||
" (UsrCod,DayOld,HourOld,DurationOld,Place)"
|
" (UsrCod,DayOld,HourOld,DurationOld,Place)"
|
||||||
" VALUES"
|
" VALUES"
|
||||||
" (%ld,'%c',%u,%d,'%s')",
|
" (%ld,'%c',%u,%d,'%s')",
|
||||||
UsrCod,TimeTableCharsDays[Day],HourOld,
|
UsrCod,TimeTableCharsDaysOld[Day],HourOld,
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld,
|
TimeTableOld[Day][HourOld].Columns[Column].DurationOld,
|
||||||
TimeTable[Day][HourOld].Columns[Column].Place);
|
TimeTableOld[Day][HourOld].Columns[Column].Place);
|
||||||
DB_QueryINSERT (Query,"can not create office timetable");
|
DB_QueryINSERT (Query,"can not create office timetable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -568,7 +581,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
unsigned DurationOld;
|
unsigned DurationOld;
|
||||||
unsigned H;
|
unsigned H;
|
||||||
long GrpCod;
|
long GrpCod;
|
||||||
TT_ClassTypeOld_t ClassTypeOld = TT_FREE; // Initialized to avoid warning
|
TT_ClassType_t ClassType = TT_FREE; // Initialized to avoid warning
|
||||||
bool TimeTableIsIncomplete = false;
|
bool TimeTableIsIncomplete = false;
|
||||||
bool TimeTableHasSpaceForThisClass;
|
bool TimeTableHasSpaceForThisClass;
|
||||||
bool Found;
|
bool Found;
|
||||||
|
@ -581,18 +594,18 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
HourOld < TT_HOURS_PER_DAY * 2;
|
HourOld < TT_HOURS_PER_DAY * 2;
|
||||||
HourOld++)
|
HourOld++)
|
||||||
{
|
{
|
||||||
TimeTable[Day][HourOld].NumColumns = 0;
|
TimeTableOld[Day][HourOld].NumColumns = 0;
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
{
|
{
|
||||||
TimeTable[Day][HourOld].Columns[Column].CrsCod = -1L;
|
TimeTableOld[Day][HourOld].Columns[Column].CrsCod = -1L;
|
||||||
TimeTable[Day][HourOld].Columns[Column].GrpCod = -1L;
|
TimeTableOld[Day][HourOld].Columns[Column].GrpCod = -1L;
|
||||||
TimeTable[Day][HourOld].Columns[Column].HourType = TT_FREE_HOUR;
|
TimeTableOld[Day][HourOld].Columns[Column].HourType = TT_FREE_HOUR;
|
||||||
TimeTable[Day][HourOld].Columns[Column].ClassTypeOld = TT_FREE;
|
TimeTableOld[Day][HourOld].Columns[Column].ClassType = TT_FREE;
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld = 0;
|
TimeTableOld[Day][HourOld].Columns[Column].DurationOld = 0;
|
||||||
TimeTable[Day][HourOld].Columns[Column].Group[0] = '\0';
|
TimeTableOld[Day][HourOld].Columns[Column].Group[0] = '\0';
|
||||||
TimeTable[Day][HourOld].Columns[Column].Place[0] = '\0';
|
TimeTableOld[Day][HourOld].Columns[Column].Place[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +708,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
for (Day = 0;
|
for (Day = 0;
|
||||||
Day < TT_DAYS;
|
Day < TT_DAYS;
|
||||||
Day++)
|
Day++)
|
||||||
if (Str_ConvertToUpperLetter (row[0][0]) == TimeTableCharsDays[Day])
|
if (Str_ConvertToUpperLetter (row[0][0]) == TimeTableCharsDaysOld[Day])
|
||||||
break;
|
break;
|
||||||
if (Day == TT_DAYS)
|
if (Day == TT_DAYS)
|
||||||
Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
|
Lay_ShowErrorAndExit ("Wrong day of week in timetable.");
|
||||||
|
@ -713,10 +726,10 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
{
|
{
|
||||||
case TT_COURSE_TIMETABLE:
|
case TT_COURSE_TIMETABLE:
|
||||||
case TT_MY_TIMETABLE:
|
case TT_MY_TIMETABLE:
|
||||||
for (ClassTypeOld = TT_LECTURE, Found = false;
|
for (ClassType = TT_LECTURE, Found = false;
|
||||||
ClassTypeOld <= TT_TUTORING;
|
ClassType <= TT_TUTORING;
|
||||||
ClassTypeOld++)
|
ClassType++)
|
||||||
if (!strcmp (row[4],TimeTableStrsClassTypeOldDB[ClassTypeOld]))
|
if (!strcmp (row[4],TimeTableStrsClassTypeOldDB[ClassType]))
|
||||||
{
|
{
|
||||||
Found = true;
|
Found = true;
|
||||||
break;
|
break;
|
||||||
|
@ -725,19 +738,19 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
Lay_ShowErrorAndExit ("Wrong type of class in timetable.");
|
Lay_ShowErrorAndExit ("Wrong type of class in timetable.");
|
||||||
break;
|
break;
|
||||||
case TT_TUTORING_TIMETABLE:
|
case TT_TUTORING_TIMETABLE:
|
||||||
ClassTypeOld = TT_TUTORING;
|
ClassType = TT_TUTORING;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cell has been read without errors. */
|
/* Cell has been read without errors. */
|
||||||
if (TimeTable[Day][HourOld].NumColumns < TT_MAX_COLUMNS_PER_CELL) // If there's place for another column in this cell...
|
if (TimeTableOld[Day][HourOld].NumColumns < TT_MAX_COLUMNS_PER_CELL) // If there's place for another column in this cell...
|
||||||
{
|
{
|
||||||
/* Find the first free column for this day-hour */
|
/* Find the first free column for this day-hour */
|
||||||
FirstFreeColumn = TT_MAX_COLUMNS_PER_CELL;
|
FirstFreeColumn = TT_MAX_COLUMNS_PER_CELL;
|
||||||
for (Column = 0;
|
for (Column = 0;
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
if (TimeTable[Day][HourOld].Columns[Column].HourType == TT_FREE_HOUR)
|
if (TimeTableOld[Day][HourOld].Columns[Column].HourType == TT_FREE_HOUR)
|
||||||
{
|
{
|
||||||
FirstFreeColumn = Column;
|
FirstFreeColumn = Column;
|
||||||
break;
|
break;
|
||||||
|
@ -749,7 +762,7 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
for (H = HourOld + 1;
|
for (H = HourOld + 1;
|
||||||
H < HourOld + DurationOld && H < TT_HOURS_PER_DAY * 2;
|
H < HourOld + DurationOld && H < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
H++)
|
||||||
if (TimeTable[Day][H].Columns[FirstFreeColumn].HourType != TT_FREE_HOUR)
|
if (TimeTableOld[Day][H].Columns[FirstFreeColumn].HourType != TT_FREE_HOUR)
|
||||||
{
|
{
|
||||||
TimeTableIsIncomplete = true;
|
TimeTableIsIncomplete = true;
|
||||||
TimeTableHasSpaceForThisClass = false;
|
TimeTableHasSpaceForThisClass = false;
|
||||||
|
@ -757,15 +770,15 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
}
|
}
|
||||||
if (TimeTableHasSpaceForThisClass)
|
if (TimeTableHasSpaceForThisClass)
|
||||||
{
|
{
|
||||||
TimeTable[Day][HourOld].Columns[FirstFreeColumn].ClassTypeOld = ClassTypeOld;
|
TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].ClassType = ClassType;
|
||||||
TimeTable[Day][HourOld].Columns[FirstFreeColumn].DurationOld = DurationOld;
|
TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].DurationOld = DurationOld;
|
||||||
TimeTable[Day][HourOld].Columns[FirstFreeColumn].HourType = TT_FIRST_HOUR;
|
TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].HourType = TT_FIRST_HOUR;
|
||||||
for (H = HourOld + 1;
|
for (H = HourOld + 1;
|
||||||
H < HourOld + DurationOld && H < TT_HOURS_PER_DAY * 2;
|
H < HourOld + DurationOld && H < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
H++)
|
||||||
{
|
{
|
||||||
TimeTable[Day][H].Columns[FirstFreeColumn].HourType = TT_NEXT_HOUR;
|
TimeTableOld[Day][H].Columns[FirstFreeColumn].HourType = TT_NEXT_HOUR;
|
||||||
TimeTable[Day][H].NumColumns++;
|
TimeTableOld[Day][H].NumColumns++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Group and place */
|
/* Group and place */
|
||||||
|
@ -773,23 +786,23 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
{
|
{
|
||||||
case TT_MY_TIMETABLE:
|
case TT_MY_TIMETABLE:
|
||||||
case TT_COURSE_TIMETABLE:
|
case TT_COURSE_TIMETABLE:
|
||||||
TimeTable[Day][HourOld].Columns[FirstFreeColumn].CrsCod =
|
TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].CrsCod =
|
||||||
(Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[7]) :
|
(Gbl.TimeTable.Type == TT_MY_TIMETABLE ? Str_ConvertStrCodToLongCod (row[7]) :
|
||||||
Gbl.CurrentCrs.Crs.CrsCod);
|
Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
Str_Copy (TimeTable[Day][HourOld].Columns[FirstFreeColumn].Group,
|
Str_Copy (TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].Group,
|
||||||
row[5],
|
row[5],
|
||||||
Grp_MAX_BYTES_GROUP_NAME);
|
Grp_MAX_BYTES_GROUP_NAME);
|
||||||
TimeTable[Day][HourOld].Columns[FirstFreeColumn].GrpCod = GrpCod;
|
TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].GrpCod = GrpCod;
|
||||||
// no break;
|
// no break;
|
||||||
case TT_TUTORING_TIMETABLE:
|
case TT_TUTORING_TIMETABLE:
|
||||||
Str_Copy (TimeTable[Day][HourOld].Columns[FirstFreeColumn].Place,
|
Str_Copy (TimeTableOld[Day][HourOld].Columns[FirstFreeColumn].Place,
|
||||||
row[3],
|
row[3],
|
||||||
TT_MAX_BYTES_PLACE);
|
TT_MAX_BYTES_PLACE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Increment number of items in this cell */
|
/* Increment number of items in this cell */
|
||||||
TimeTable[Day][HourOld].NumColumns++;
|
TimeTableOld[Day][HourOld].NumColumns++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -812,31 +825,31 @@ static void TT_CreatTimeTableFromDB (long UsrCod)
|
||||||
|
|
||||||
static void TT_ModifTimeTable (void)
|
static void TT_ModifTimeTable (void)
|
||||||
{
|
{
|
||||||
if (TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType == TT_FIRST_HOUR)
|
if (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType == TT_FIRST_HOUR)
|
||||||
{
|
{
|
||||||
/***** Free this cell *****/
|
/***** Free this cell *****/
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = -1;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = -1;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FREE_HOUR;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FREE_HOUR;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassTypeOld = TT_FREE;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassType = TT_FREE;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = 0;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = 0;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group[0] = '\0';
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group[0] = '\0';
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place[0] = '\0';
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place[0] = '\0';
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns--;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Gbl.TimeTable.ClassTypeOld != TT_FREE && Gbl.TimeTable.DurationOld > 0 &&
|
if (Gbl.TimeTable.ClassType != TT_FREE && Gbl.TimeTable.DurationOld > 0 &&
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns < TT_MAX_COLUMNS_PER_CELL)
|
||||||
{
|
{
|
||||||
/***** Change this cell *****/
|
/***** Change this cell *****/
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns++;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].NumColumns++;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = Gbl.TimeTable.GrpCod;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].GrpCod = Gbl.TimeTable.GrpCod;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FIRST_HOUR;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].HourType = TT_FIRST_HOUR;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassTypeOld = Gbl.TimeTable.ClassTypeOld;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].ClassType = Gbl.TimeTable.ClassType;
|
||||||
TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = Gbl.TimeTable.DurationOld;
|
TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].DurationOld = Gbl.TimeTable.DurationOld;
|
||||||
Str_Copy (TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group,
|
Str_Copy (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Group,
|
||||||
Gbl.TimeTable.Group,
|
Gbl.TimeTable.Group,
|
||||||
Grp_MAX_BYTES_GROUP_NAME);
|
Grp_MAX_BYTES_GROUP_NAME);
|
||||||
Str_Copy (TimeTable[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place,
|
Str_Copy (TimeTableOld[Gbl.TimeTable.Day][Gbl.TimeTable.HourOld].Columns[Gbl.TimeTable.Column].Place,
|
||||||
Gbl.TimeTable.Place,
|
Gbl.TimeTable.Place,
|
||||||
TT_MAX_BYTES_PLACE);
|
TT_MAX_BYTES_PLACE);
|
||||||
}
|
}
|
||||||
|
@ -943,7 +956,7 @@ static void TT_DrawTimeTable (void)
|
||||||
for (Column = 0, ContinuousFreeMinicolumns = 0;
|
for (Column = 0, ContinuousFreeMinicolumns = 0;
|
||||||
Column < ColumnsToDrawIncludingExtraColumn;
|
Column < ColumnsToDrawIncludingExtraColumn;
|
||||||
Column++)
|
Column++)
|
||||||
if (TimeTable[Day][HourOld].Columns[Column].HourType == TT_FREE_HOUR)
|
if (TimeTableOld[Day][HourOld].Columns[Column].HourType == TT_FREE_HOUR)
|
||||||
ContinuousFreeMinicolumns += TT_NUM_MINICOLUMNS_PER_DAY / ColumnsToDrawIncludingExtraColumn;
|
ContinuousFreeMinicolumns += TT_NUM_MINICOLUMNS_PER_DAY / ColumnsToDrawIncludingExtraColumn;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -954,13 +967,13 @@ static void TT_DrawTimeTable (void)
|
||||||
ContinuousFreeMinicolumns = 0;
|
ContinuousFreeMinicolumns = 0;
|
||||||
}
|
}
|
||||||
TT_TimeTableDrawCell (Day,HourOld,Column,TT_NUM_MINICOLUMNS_PER_DAY/ColumnsToDrawIncludingExtraColumn,
|
TT_TimeTableDrawCell (Day,HourOld,Column,TT_NUM_MINICOLUMNS_PER_DAY/ColumnsToDrawIncludingExtraColumn,
|
||||||
TimeTable[Day][HourOld].Columns[Column].CrsCod,
|
TimeTableOld[Day][HourOld].Columns[Column].CrsCod,
|
||||||
TimeTable[Day][HourOld].Columns[Column].HourType,
|
TimeTableOld[Day][HourOld].Columns[Column].HourType,
|
||||||
TimeTable[Day][HourOld].Columns[Column].ClassTypeOld,
|
TimeTableOld[Day][HourOld].Columns[Column].ClassType,
|
||||||
TimeTable[Day][HourOld].Columns[Column].DurationOld,
|
TimeTableOld[Day][HourOld].Columns[Column].DurationOld,
|
||||||
TimeTable[Day][HourOld].Columns[Column].Group,
|
TimeTableOld[Day][HourOld].Columns[Column].Group,
|
||||||
TimeTable[Day][HourOld].Columns[Column].GrpCod,
|
TimeTableOld[Day][HourOld].Columns[Column].GrpCod,
|
||||||
TimeTable[Day][HourOld].Columns[Column].Place);
|
TimeTableOld[Day][HourOld].Columns[Column].Place);
|
||||||
}
|
}
|
||||||
if (ContinuousFreeMinicolumns)
|
if (ContinuousFreeMinicolumns)
|
||||||
TT_TimeTableDrawCell (Day,HourOld,Column-1,ContinuousFreeMinicolumns,
|
TT_TimeTableDrawCell (Day,HourOld,Column-1,ContinuousFreeMinicolumns,
|
||||||
|
@ -1089,7 +1102,7 @@ static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld)
|
||||||
unsigned FirstHour;
|
unsigned FirstHour;
|
||||||
unsigned Cols;
|
unsigned Cols;
|
||||||
|
|
||||||
ColumnsToDraw = TimeTable[Day][HourOld].NumColumns;
|
ColumnsToDraw = TimeTableOld[Day][HourOld].NumColumns;
|
||||||
|
|
||||||
if (!TimeTableHoursChecked[HourOld])
|
if (!TimeTableHoursChecked[HourOld])
|
||||||
{
|
{
|
||||||
|
@ -1098,14 +1111,14 @@ static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld)
|
||||||
Column < TT_MAX_COLUMNS_PER_CELL;
|
Column < TT_MAX_COLUMNS_PER_CELL;
|
||||||
Column++)
|
Column++)
|
||||||
{
|
{
|
||||||
switch (TimeTable[Day][HourOld].Columns[Column].HourType)
|
switch (TimeTableOld[Day][HourOld].Columns[Column].HourType)
|
||||||
{
|
{
|
||||||
case TT_FREE_HOUR:
|
case TT_FREE_HOUR:
|
||||||
break;
|
break;
|
||||||
case TT_FIRST_HOUR:
|
case TT_FIRST_HOUR:
|
||||||
/* Check from first hour (this one) to last hour searching maximum number of columns */
|
/* Check from first hour (this one) to last hour searching maximum number of columns */
|
||||||
for (H = HourOld + 1;
|
for (H = HourOld + 1;
|
||||||
H < HourOld + TimeTable[Day][HourOld].Columns[Column].DurationOld;
|
H < HourOld + TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
||||||
H++)
|
H++)
|
||||||
if (!TimeTableHoursChecked[H])
|
if (!TimeTableHoursChecked[H])
|
||||||
{
|
{
|
||||||
|
@ -1117,11 +1130,11 @@ static unsigned TT_TimeTableCalculateColsToDraw (unsigned Day,unsigned HourOld)
|
||||||
case TT_NEXT_HOUR:
|
case TT_NEXT_HOUR:
|
||||||
/* Find first hour for this item (class) */
|
/* Find first hour for this item (class) */
|
||||||
for (FirstHour = HourOld;
|
for (FirstHour = HourOld;
|
||||||
TimeTable[Day][FirstHour].Columns[Column].HourType == TT_NEXT_HOUR;
|
TimeTableOld[Day][FirstHour].Columns[Column].HourType == TT_NEXT_HOUR;
|
||||||
FirstHour--);
|
FirstHour--);
|
||||||
/* Check from first hour to last hour searching maximum number of columns */
|
/* Check from first hour to last hour searching maximum number of columns */
|
||||||
for (H = FirstHour;
|
for (H = FirstHour;
|
||||||
H < FirstHour + TimeTable[Day][FirstHour].Columns[Column].DurationOld;
|
H < FirstHour + TimeTableOld[Day][FirstHour].Columns[Column].DurationOld;
|
||||||
H++)
|
H++)
|
||||||
if (!TimeTableHoursChecked[H])
|
if (!TimeTableHoursChecked[H])
|
||||||
{
|
{
|
||||||
|
@ -1153,7 +1166,7 @@ static void TT_DrawCellAlignTimeTable (void)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,unsigned ColSpan,
|
||||||
long CrsCod,TT_HourType_t HourType,TT_ClassTypeOld_t ClassTypeOld,
|
long CrsCod,TT_HourType_t HourType,TT_ClassType_t ClassType,
|
||||||
unsigned DurationOld,char *Group,long GrpCod,char *Place)
|
unsigned DurationOld,char *Group,long GrpCod,char *Place)
|
||||||
{
|
{
|
||||||
extern const char *Txt_unknown_removed_course;
|
extern const char *Txt_unknown_removed_course;
|
||||||
|
@ -1183,7 +1196,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
unsigned Dur;
|
unsigned Dur;
|
||||||
unsigned MaxDuration;
|
unsigned MaxDuration;
|
||||||
unsigned RowSpan = 0;
|
unsigned RowSpan = 0;
|
||||||
TT_ClassTypeOld_t CT;
|
TT_ClassType_t CT;
|
||||||
struct Course Crs;
|
struct Course Crs;
|
||||||
|
|
||||||
/***** Compute row span and background color depending on hour type *****/
|
/***** Compute row span and background color depending on hour type *****/
|
||||||
|
@ -1234,8 +1247,8 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
|
|
||||||
/***** Cell start *****/
|
/***** Cell start *****/
|
||||||
fprintf (Gbl.F.Out,"<td rowspan=\"%u\" colspan=\"%u\" class=\"%s",
|
fprintf (Gbl.F.Out,"<td rowspan=\"%u\" colspan=\"%u\" class=\"%s",
|
||||||
RowSpan,ColSpan,TimeTableClasses[ClassTypeOld]);
|
RowSpan,ColSpan,TimeTableClasses[ClassType]);
|
||||||
if (ClassTypeOld == TT_FREE)
|
if (ClassType == TT_FREE)
|
||||||
fprintf (Gbl.F.Out,"%u",HourOld % 4);
|
fprintf (Gbl.F.Out,"%u",HourOld % 4);
|
||||||
fprintf (Gbl.F.Out," CENTER_MIDDLE DAT_SMALL\">");
|
fprintf (Gbl.F.Out," CENTER_MIDDLE DAT_SMALL\">");
|
||||||
|
|
||||||
|
@ -1257,14 +1270,14 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
{
|
{
|
||||||
Crs.CrsCod = CrsCod;
|
Crs.CrsCod = CrsCod;
|
||||||
Crs_GetDataOfCourseByCod (&Crs);
|
Crs_GetDataOfCourseByCod (&Crs);
|
||||||
if (ClassTypeOld == TT_LECTURE ||
|
if (ClassType == TT_LECTURE ||
|
||||||
ClassTypeOld == TT_PRACTICAL)
|
ClassType == TT_PRACTICAL)
|
||||||
fprintf (Gbl.F.Out,"%s<br />",
|
fprintf (Gbl.F.Out,"%s<br />",
|
||||||
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)",
|
fprintf (Gbl.F.Out,"%s (%dh%s)",
|
||||||
Txt_TIMETABLE_CLASS_TYPES[ClassTypeOld],
|
Txt_TIMETABLE_CLASS_TYPES[ClassType],
|
||||||
DurationOld / 2,
|
DurationOld / 2,
|
||||||
DurationOld % 2 ? "30'" :
|
DurationOld % 2 ? "30'" :
|
||||||
"");
|
"");
|
||||||
|
@ -1297,15 +1310,15 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
fprintf (Gbl.F.Out,"<select name=\"ModTTClassTypeOld\" style=\"width:68px;\""
|
fprintf (Gbl.F.Out,"<select name=\"ModTTClassTypeOld\" style=\"width:68px;\""
|
||||||
" onchange=\"document.getElementById('%s').submit();\">",
|
" onchange=\"document.getElementById('%s').submit();\">",
|
||||||
Gbl.Form.Id);
|
Gbl.Form.Id);
|
||||||
for (CT = (TT_ClassTypeOld_t) 0;
|
for (CT = (TT_ClassType_t) 0;
|
||||||
CT < (TT_ClassTypeOld_t) TT_NUM_CLASS_TYPES;
|
CT < (TT_ClassType_t) TT_NUM_CLASS_TYPES;
|
||||||
CT++)
|
CT++)
|
||||||
if ((CT == TT_FREE) ||
|
if ((CT == TT_FREE) ||
|
||||||
((TimeTableView == TT_CRS_EDIT) && (CT == TT_LECTURE || CT == TT_PRACTICAL)) ||
|
((TimeTableView == TT_CRS_EDIT) && (CT == TT_LECTURE || CT == TT_PRACTICAL)) ||
|
||||||
((TimeTableView == TT_TUT_EDIT) && (CT == TT_TUTORING)))
|
((TimeTableView == TT_TUT_EDIT) && (CT == TT_TUTORING)))
|
||||||
{
|
{
|
||||||
fprintf (Gbl.F.Out,"<option");
|
fprintf (Gbl.F.Out,"<option");
|
||||||
if (CT == ClassTypeOld)
|
if (CT == ClassType)
|
||||||
fprintf (Gbl.F.Out," selected=\"selected\"");
|
fprintf (Gbl.F.Out," selected=\"selected\"");
|
||||||
fprintf (Gbl.F.Out," value=\"%s\">%s</option>",
|
fprintf (Gbl.F.Out," value=\"%s\">%s</option>",
|
||||||
TimeTableStrsClassTypeOldDB[CT],
|
TimeTableStrsClassTypeOldDB[CT],
|
||||||
|
@ -1318,7 +1331,7 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
for (H = HourOld + 1;
|
for (H = HourOld + 1;
|
||||||
H < TT_HOURS_PER_DAY * 2;
|
H < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
H++)
|
||||||
if (TimeTable[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
if (TimeTableOld[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
||||||
break;
|
break;
|
||||||
MaxDuration = H - HourOld;
|
MaxDuration = H - HourOld;
|
||||||
if (MaxDuration > 1)
|
if (MaxDuration > 1)
|
||||||
|
@ -1333,14 +1346,14 @@ static void TT_TimeTableDrawCell (unsigned Day,unsigned HourOld,unsigned Column,
|
||||||
fprintf (Gbl.F.Out,"<select name=\"ModTTDur\" style=\"width:57px;\""
|
fprintf (Gbl.F.Out,"<select name=\"ModTTDur\" style=\"width:57px;\""
|
||||||
" onchange=\"document.getElementById('%s').submit();\">",
|
" onchange=\"document.getElementById('%s').submit();\">",
|
||||||
Gbl.Form.Id);
|
Gbl.Form.Id);
|
||||||
for (H = HourOld + TimeTable[Day][HourOld].Columns[Column].DurationOld;
|
for (H = HourOld + TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
||||||
H < TT_HOURS_PER_DAY * 2;
|
H < TT_HOURS_PER_DAY * 2;
|
||||||
H++)
|
H++)
|
||||||
if (TimeTable[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
if (TimeTableOld[Day][H].NumColumns == TT_MAX_COLUMNS_PER_CELL)
|
||||||
break;
|
break;
|
||||||
MaxDuration = H - HourOld;
|
MaxDuration = H - HourOld;
|
||||||
if (TimeTable[Day][HourOld].Columns[Column].DurationOld > MaxDuration)
|
if (TimeTableOld[Day][HourOld].Columns[Column].DurationOld > MaxDuration)
|
||||||
MaxDuration = TimeTable[Day][HourOld].Columns[Column].DurationOld;
|
MaxDuration = TimeTableOld[Day][HourOld].Columns[Column].DurationOld;
|
||||||
for (Dur = 0;
|
for (Dur = 0;
|
||||||
Dur <= MaxDuration;
|
Dur <= MaxDuration;
|
||||||
Dur++)
|
Dur++)
|
||||||
|
|
|
@ -58,7 +58,7 @@ typedef enum
|
||||||
TT_LECTURE = 1,
|
TT_LECTURE = 1,
|
||||||
TT_PRACTICAL = 2,
|
TT_PRACTICAL = 2,
|
||||||
TT_TUTORING = 3,
|
TT_TUTORING = 3,
|
||||||
} TT_ClassTypeOld_t;
|
} TT_ClassType_t;
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/****************************** Public prototypes ****************************/
|
/****************************** Public prototypes ****************************/
|
||||||
|
|
Loading…
Reference in New Issue