diff --git a/class.class.php b/class.class.php
--- a/class.class.php
+++ b/class.class.php
@@ -19,6 +19,7 @@ class Classes
//--------------------------------------------------
function __construct($n)
{
+ $this->sections = array();
$this->name = $n;
$this->nsections = 0;
}
@@ -57,7 +58,28 @@ class Classes
$result = $this->sections[$i];
return $result;
}
-
+
+ /**
+ * \brief
+ * Retrieve a section of this class based on its letter.
+ *
+ * \todo Make this function replace completely the getSection()
+ * function, have $this->sections be keyed by letter, and have a
+ * __wakup() convert the old $this->sections format to the new one.
+ *
+ * \return
+ * The requested section or NULL if that section does not yet
+ * exist for this class.
+ */
+ public function section_get($letter)
+ {
+ foreach ($this->sections as $section)
+ if ($section->getLetter() == $letter)
+ return $section;
+
+ return NULL;
+ }
+
//--------------------------------------------------
// Returns the name of the class.
//--------------------------------------------------
@@ -111,7 +133,9 @@ class Classes
'sections' => array());
foreach ($this->sections as $section)
{
- $json_array['sections'][] = $section->to_json_array();
+ $section_json_arrays = $section->to_json_arrays();
+ foreach ($section_json_arrays as $section_json_array)
+ $json_array['sections'][] = $section_json_array;
}
return $json_array;
diff --git a/class.schedule.php b/class.schedule.php
--- a/class.schedule.php
+++ b/class.schedule.php
@@ -71,7 +71,7 @@ class Schedule
//--------------------------------------------------
// Adds a section to the desired class.
//--------------------------------------------------
- function addSection($n, $l, $s, $e, $d, $synonym = NULL, $faculty = NULL, $room = NULL)
+ function addSection($course_name, $letter, $time_start, $time_end, $days, $synonym = NULL, $faculty = NULL, $room = NULL)
{
$found = false;
$counter = 0;
@@ -80,7 +80,7 @@ class Schedule
{
$temp = $this->classStorage[$counter]->getName();
- if((strcmp($temp,$n)) == 0)
+ if((strcmp($temp,$course_name)) == 0)
{
$found = true;
} else {
@@ -90,9 +90,15 @@ class Schedule
if($counter == $this->nclasses)
{
- echo "Could not find class: " . $n . "
";
+ echo 'Could not find class: ' . $course_name . "
\n";
} else {
- $this->classStorage[$counter]->section_add(new Section($l, $s, $e, $d, $synonym, $faculty, $room));
+ $section = $this->classStorage[$counter]->section_get($letter);
+ if (!$section)
+ {
+ $section = new Section($letter, array(), $synonym, $faculty);
+ $this->classStorage[$counter]->section_add($section);
+ }
+ $section->meeting_add(new SectionMeeting($days, $time_start, $time_end, $room));
}
}
@@ -276,45 +282,69 @@ class Schedule
for($dayLoop = 0; $dayLoop < 5; $dayLoop++)
{
+ $last_meeting = NULL;
for($j = 0; $j < $this->nclasses; $j++)
{
+ $class = $this->classStorage[$j];
+ $section_index = $this->storage[$i][$j];
+ $section = $class->getSection($section_index);
// Makes sure there is not a class already in progress
if($this->getClassCont($dayLoop) == -1)
{
- // Checks if the class meets on the given day
- if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getDay($dayLoop)))
+ /* iterate through all of a class's meeting times */
+ $meetings = $section->getMeetings();
+
+ /* find any meeting which are going on at this time */
+ $current_meeting = NULL;
+ foreach ($meetings as $meeting)
+ {
+ if ($meeting->getDay($dayLoop)
+ && $meeting->getStartTime() >= $time[$r]
+ && $meeting->getStartTime() < $time[$r+1])
+ {
+ $current_meeting = $meeting;
+ /* $last_meeting has meaning for a longer time than $current_meeting does. */
+ $last_meeting = $meeting;
+ }
+ }
+
+ if ($current_meeting)
+ {
+ // Checks if the class continues after the given time
+ if($current_meeting->getEndTime() > $time[$r+1])
{
- // Checks if the class meets at the given time
- if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1]))
- {
- // Checks if the class continues after the given time
- if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1])
- {
- $table .= "\n\t\t
" . htmlentities($this->classStorage[$j]->getName()) . " " . htmlentities($this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter()) . " | ";
- $this->setClassCont($dayLoop, $j);
- $filled = true;
- }else{
- $table .= "\n\n\t" . htmlentities($this->classStorage[$j]->getName()) . " " . htmlentities($this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter()) . " | ";
- $filled = true;
- }
- }
+ $table .= "\n\t\t" . htmlentities($class->getName()) . " " . htmlentities($section->getLetter()) . " | ";
+ $this->setClassCont($dayLoop, $j);
+ $filled = TRUE;
+ }
+ else
+ {
+ $table .= "\n\n\t" . htmlentities($class->getName()) . " " . htmlentities($section->getLetter()) . " | ";
+ $filled = TRUE;
}
- }else{
- if($j == $this->getClassCont($dayLoop))
- {
- if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1])
- {
- $table .= "\n\t\t | ";
- $filled = true;
- }else{
- $table .= "\n\t\t | ";
- $this->setClassCont($dayLoop, -1);
- $filled = true;
- }
- }
+ }
}
- }
-
+
+ else
+ {
+ if($j == $this->getClassCont($dayLoop))
+ {
+ if($last_meeting
+ && $last_meeting->getEndTime() > $time[$r+1])
+ {
+ $table .= "\n\t\t | ";
+ $filled = TRUE;
+ }
+ else
+ {
+ $table .= "\n\t\t | ";
+ $this->setClassCont($dayLoop, -1);
+ $filled = TRUE;
+ }
+ }
+ }
+ }
+
// If the cell was not filled, fill it with an empty cell.
if(!$filled)
{
diff --git a/class.section.php b/class.section.php
--- a/class.section.php
+++ b/class.section.php
@@ -5,16 +5,20 @@
//
// Represents a section of a class.
//--------------------------------------------------
+
+require_once('inc/class.section_meeting.inc');
class Section
{
private $letter; // Section letter
private $prof; // Professor
- private $start; // Start time
- private $tend; // End time
- private $idays; // Integer version of meeting days
- private $bdays; // Boolean array of meeting days
+
+ /* meeting times, array of SectionMeeting */
+ private $meetings;
+
+ /* the section synonym which uniquely identifies this section/course combination */
+ private $synonym;
/**
* \brief
@@ -23,112 +27,27 @@ class Section
* \param $letter
* The identifier (often a letter or numeral) of this section. For
* CS-262-A, this would be 'a'.
- * \param $time_start
- * The time of day when this section meets. Formatted as a string,
- * with the 24-hr representation of the hour taking the first two
- * characters and a two-digit representation of minutes taking the
- * next two characters.
- * \param $time_end
- * The time of day when this section's meeting is over.
- * \param $days
- * A string representing the days that this section meets. The
- * format of this string is an ordered series of numerals less
- * than or equal to 5. Each numeral from 1 through 5 represents
- * one of Monday, Tuesday, Wednesday, Thursday, and Friday. For
- * example, '135' would be for a course which meets on Monday,
- * Wednesday, and Friday.
+ * \param $section_meetings
+ * An array of SectionMeeting objects which describe all the
+ * different types of meetings this particular section has. It
+ * will be very uncommon for a course to have more than one such
+ * meeting time for a section. For example, Calvin doesn't have
+ * this. Another example, Cedarville lists different meeting times
+ * inside of a single section. Cedarville also lists all lectures
+ * and lab meeting times directly in a section's listing.
+ * \param $synonym
+ * Some schools have a unique number for each section. This field
+ * is for that number.
* \param $prof
* The faculty person(s) who teaches this section.
- * \param $room
- * An identifier of the room within which the section is taught.
*/
- function __construct ($letter, $time_start, $time_end, $days,
- $synonym = NULL, $prof = NULL, $room = NULL)
+ function __construct ($letter, array $section_meetings = array(), $synonym = NULL, $prof = NULL)
{
$this->letter = $letter;
- $this->start = $time_start;
- $this->tend = $time_end;
-
- $this->idays = $days;
- $this->bdays = $this->setbdays();
-
- $this->synonym = $synonym;
- $this->prof = $prof;
- $this->room = $room;
- }
-
- private function setbdays()
- {
- $result = array(FALSE, FALSE, FALSE, FALSE, FALSE);
-
- if($this->idays == 12345)
- {$result[0] = true; $result[1] = true; $result[2] = true; $result[3] = true; $result[4] = true;}
-
- if($this->idays == 1234)
- {$result[0] = true; $result[1] = true; $result[2] = true; $result[3] = true; $result[4] = false;}
- if($this->idays == 1235)
- {$result[0] = true; $result[1] = true; $result[2] = true; $result[3] = false; $result[4] = true;}
- if($this->idays == 1245)
- {$result[0] = true; $result[1] = true; $result[2] = false; $result[3] = true; $result[4] = true;}
- if($this->idays == 1345)
- {$result[0] = true; $result[1] = false; $result[2] = true; $result[3] = true; $result[4] = true;}
- if($this->idays == 2345)
- {$result[0] = false; $result[1] = true; $result[2] = true; $result[3] = true; $result[4] = true;}
- if($this->idays == 123)
- {$result[0] = true; $result[1] = true; $result[2] = true; $result[3] = false; $result[4] = false;}
- if($this->idays == 124)
- {$result[0] = true; $result[1] = true; $result[2] = false; $result[3] = true; $result[4] = false;}
- if($this->idays == 125)
- {$result[0] = true; $result[1] = true; $result[2] = false; $result[3] = false; $result[4] = true;}
- if($this->idays == 134)
- {$result[0] = true; $result[1] = false; $result[2] = true; $result[3] = true; $result[4] = false;}
- if($this->idays == 135)
- {$result[0] = true; $result[1] = false; $result[2] = true; $result[3] = false; $result[4] = true;}
- if($this->idays == 145)
- {$result[0] = true; $result[1] = false; $result[2] = false; $result[3] = true; $result[4] = true;}
- if($this->idays == 234)
- {$result[0] = false; $result[1] = true; $result[2] = true; $result[3] = true; $result[4] = false;}
- if($this->idays == 235)
- {$result[0] = false; $result[1] = true; $result[2] = true; $result[3] = false; $result[4] = true;}
- if($this->idays == 245)
- {$result[0] = false; $result[1] = true; $result[2] = false; $result[3] = true; $result[4] = true;}
- if($this->idays == 345)
- {$result[0] = false; $result[1] = false; $result[2] = true; $result[3] = true; $result[4] = true;}
+ $this->meetings = $section_meetings;
- if($this->idays == 12)
- {$result[0] = true; $result[1] = true; $result[2] = false; $result[3] = false; $result[4] = false;}
- if($this->idays == 13)
- {$result[0] = true; $result[1] = false; $result[2] = true; $result[3] = false; $result[4] = false;}
- if($this->idays == 14)
- {$result[0] = true; $result[1] = false; $result[2] = false; $result[3] = true; $result[4] = false;}
- if($this->idays == 15)
- {$result[0] = true; $result[1] = false; $result[2] = false; $result[3] = false; $result[4] = true;}
- if($this->idays == 23)
- {$result[0] = false; $result[1] = true; $result[2] = true; $result[3] = false; $result[4] = false;}
- if($this->idays == 24)
- {$result[0] = false; $result[1] = true; $result[2] = false; $result[3] = true; $result[4] = false;}
- if($this->idays == 25)
- {$result[0] = false; $result[1] = true; $result[2] = false; $result[3] = false; $result[4] = true;}
- if($this->idays == 34)
- {$result[0] = false; $result[1] = false; $result[2] = true; $result[3] = true; $result[4] = false;}
- if($this->idays == 35)
- {$result[0] = false; $result[1] = false; $result[2] = true; $result[3] = false; $result[4] = true;}
- if($this->idays == 45)
- {$result[0] = false; $result[1] = false; $result[2] = false; $result[3] = true; $result[4] = true;}
-
- if($this->idays == 1)
- {$result[0] = true; $result[1] = false; $result[2] = false; $result[3] = false; $result[4] = false;}
- if($this->idays == 2)
- {$result[0] = false; $result[1] = true; $result[2] = false; $result[3] = false; $result[4] = false;}
- if($this->idays == 3)
- {$result[0] = false; $result[1] = false; $result[2] = true; $result[3] = false; $result[4] = false;}
- if($this->idays == 4)
- {$result[0] = false; $result[1] = false; $result[2] = false; $result[3] = true; $result[4] = false;}
- if($this->idays == 5)
- {$result[0] = false; $result[1] = false; $result[2] = false; $result[3] = false; $result[4] = true;}
-
- return $result;
+ $this->prof = $prof;
}
public function getLetter()
@@ -143,15 +62,6 @@ class Section
/**
* \return
- * This Section's room or NULL if none is defined.
- */
- public function getRoom()
- {
- return $this->room;
- }
-
- /**
- * \return
* This section's synonym -- a unique numeric identifier for this
* course. NULL if undefined.
*/
@@ -160,49 +70,21 @@ class Section
return $this->synonym;
}
- public function getStartTime()
- {
- return $this->start;
- }
-
- public function getEndTime()
- {
- return $this->tend;
- }
-
- public function getM()
- {
- return $this->bdays[0];
- }
-
- public function getTu()
+ /**
+ * \brief
+ * Get an array of section meetings for this section.
+ *
+ * \return
+ * An array of SectionMeeting objects.
+ */
+ public function getMeetings()
{
- return $this->bdays[1];
- }
-
- public function getW()
- {
- return $this->bdays[2];
- }
-
- public function getTh()
- {
- return $this->bdays[3];
- }
-
- public function getF()
- {
- return $this->bdays[4];
- }
-
- public function getDay($i)
- {
- return $this->bdays[$i];
+ return $this->meetings;
}
/**
* \brief
- * Check if this section conflicts withthe given section.
+ * Check if this section conflicts with the given section.
*
* \param $that
* The other section for which I should check for conflicts.
@@ -211,32 +93,24 @@ class Section
*/
public function conflictsWith(Section $that)
{
- /*
- * The two sections can't conflict if the start/end times don't
- * overlap. Also, use >= or <= here so that one can say ``I have
- * gym from 10 through 11 and then latin from 11 though 12''.
- */
- if ($this->getStartTime() >= $that->getEndTime()
- || $this->getEndTime() <= $that->getStartTime())
- {
- return FALSE;
- }
+ foreach ($this->meetings as $this_meeting)
+ foreach ($that->meetings as $that_meeting)
+ if ($this_meeting->conflictsWith($that_meeting))
+ return TRUE;
+
+ return FALSE;
+ }
- /*
- * Now we know that the sections overlap in start/end times. But
- * if they don't both meet on the same day at least once, they
- * don't conflict.
- */
- for ($day = 0; $day < 5; $day ++)
- {
- if ($this->getDay($day) && $that->getDay($day))
- return TRUE;
- }
-
- /*
- * The sections don't both share a day of the week.
- */
- return FALSE;
+ /**
+ * \brief
+ * Add another section meeting time to this section.
+ *
+ * Useful for process.php when it's calling
+ * Schedule::addSectionMeeting() multiple times.
+ */
+ public function meeting_add(SectionMeeting $meeting)
+ {
+ $this->meetings[] = $meeting;
}
/**
@@ -307,23 +181,59 @@ class Section
/**
* \brief
- * Get an array of information needed by the AJAX stuff.
+ * Get arrays of information needed by the AJAX stuff.
+ *
+ * \return
+ * An array of arrays that should be merged with the return value
+ * of other Section::to_json_array() calls.
*/
- public function to_json_array()
+ public function to_json_arrays()
{
- static $daymap = array(0 => 'm', 1 => 't', 2 => 'w', 3 => 'h', 4 => 'f');
+ $json_arrays = array();
+
+ foreach ($this->meetings as $meeting)
+ {
+ $json_array = array('section' => $this->letter,
+ 'prof' => $this->prof,
+ 'synonym' => $this->synonym,
+ );
+
+ $json_array += $meeting->to_json_array();
+ $json_arrays[] = $json_array;
+ }
+
+ return $json_arrays;
+ }
+
- $json_array = array('section' => $this->letter,
- 'prof' => $this->prof,
- 'time_start' => $this->start,
- 'time_end' => $this->tend,
- 'days' => array(),
- 'synonym' => $this->synonym,
- 'room' => $this->room,
- );
- for ($day = 0; $day < 5; $day ++)
- $json_array['days'][$daymap[$day]] = $this->getDay($day);
+ /* for legacy unserialization */
+ private $start;
+ private $tend;
+ private $bdays;
- return $json_array;
+ /**
+ * \brief
+ * A magic function which tries to upgrade old serialized sections
+ * to the new format.
+ */
+ public function __wakeup()
+ {
+ /* upgrade to SectionMeeting stuffage */
+ if (!empty($this->start))
+ {
+ $days = '';
+ $daymap = array(0 => 'm', 1 => 't', 2 => 'w', 3 => 'h', 4 => 'f');
+ foreach ($this->bdays as $day => $have_day)
+ if ($have_day)
+ $days .= $daymap[$day];
+
+ $this->meetings = array();
+ $this->meeting_add(new SectionMeeting($days, $this->start, $this->tend, '', 'lecture'));
+
+ /*
+ * if we're reserialized in the future, make sure we don't do this same upgrade procedure again ;-).
+ */
+ unset($this->start);
+ }
}
}
diff --git a/inc/class.section_meeting.inc b/inc/class.section_meeting.inc
new file mode 100644
--- /dev/null
+++ b/inc/class.section_meeting.inc
@@ -0,0 +1,194 @@
+days_set($days);
+
+ $this->time_start = $time_start;
+ $this->time_end = $time_end;
+
+ $this->location = $location;
+
+ $this->type = $type;
+ }
+
+ /**
+ * \brief
+ * Take a days of week string and store it into our $days of week array.
+ *
+ * \param $days_str
+ * The days of the week in a string format. One char per
+ * day. Mon-Fri is represented with 'm', 't', 'w', 'h', 'f'.
+ */
+ private function days_set($days_str)
+ {
+ $this->days = array(0 => FALSE, 1 => FALSE, 2 => FALSE, 3 => FALSE, 4 => FALSE);
+
+ $days_str_strlen = strlen($days_str);
+ for ($i = 0; $i < $days_str_strlen; $i ++)
+ $this->days[self::day_atoi($days_str[$i])] = TRUE;
+ }
+
+ /**
+ * \brief
+ * Convert a day letter to a day numeral.
+ *
+ * Works fine if you give the numeral as well.
+ */
+ private static function day_atoi($day_c)
+ {
+ static $day_atoi = array('m' => 0, 't' => 1, 'w' => 2, 'h' => 3, 'f' => 4,
+ 'M' => 0, 'T' => 1, 'W' => 2, 'H' => 3, 'F' => 4,
+ 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4);
+
+ return $day_atoi[$day_c];
+ }
+
+ /**
+ * \brief
+ * Determine whether or not this class meeting time meets on a
+ * specified day of the week or not.
+ *
+ * \param $day
+ * The letter or numeral of the day to retrieve.
+ * \return
+ * TRUE if this section meeting meets on that day. FALSE
+ * otherwise.
+ */
+ public function getDay($day)
+ {
+ return $this->days[self::day_atoi($day)];
+ }
+
+ /**
+ * \return
+ * This SectionMeeting's location or NULL if none is defined.
+ */
+ public function getLocation()
+ {
+ return $this->location;
+ }
+
+ /**
+ * \brief
+ * Get the start_time of this meeting in slate_permutate's internal format.
+ */
+ public function getStartTime()
+ {
+ return $this->time_start;
+ }
+
+ public function getEndTime()
+ {
+ return $this->time_end;
+ }
+
+ /**
+ * \brief
+ * Check if this section conflicts with the given section.
+ *
+ * \param $that
+ * The other section for which I should check for conflicts.
+ * \return
+ * TRUE if there is a conflict, FALSE otherwise.
+ */
+ public function conflictsWith(SectionMeeting $that)
+ {
+ /*
+ * The two sections meetings can't conflict if the start/end times
+ * don't overlap. Also, use >= or <= here so that one can say ``I
+ * have gym from 10 through 11 and then latin from 11 though 12''.
+ */
+ if ($this->getStartTime() >= $that->getEndTime()
+ || $this->getEndTime() <= $that->getStartTime())
+ {
+ return FALSE;
+ }
+
+ /*
+ * Now we know that the sections meetings overlap in start/end
+ * times. But if they don't both meet on the same day at least
+ * once, they don't conflict.
+ */
+ for ($day = 0; $day < 5; $day ++)
+ {
+ if ($this->getDay($day) && $that->getDay($day))
+ return TRUE;
+ }
+
+ /*
+ * The sections meetings don't both share a day of the week.
+ */
+ return FALSE;
+ }
+
+ /**
+ * \brief
+ * Return an array of JSON keys specific to this section meeting
+ * time.
+ *
+ * Currently, the AJAX UI doesn't recognize that a given section may
+ * have multiple meeting times. Thus, we simulate this by having
+ * multiple instances of the same section but just with different
+ * times in the UI.
+ */
+ public function to_json_array()
+ {
+ static $daymap = array(0 => 'm', 1 => 't', 2 => 'w', 3 => 'h', 4 => 'f');
+
+ $json_array = array(
+ 'time_start' => $this->time_start,
+ 'time_end' => $this->time_end,
+ 'days' => array(),
+ 'location' => $this->location,
+ );
+
+ for ($day = 0; $day < 5; $day ++)
+ $json_array['days'][$daymap[$day]] = $this->getDay($day);
+
+ return $json_array;
+ }
+}
diff --git a/inc/school.crawl.inc b/inc/school.crawl.inc
--- a/inc/school.crawl.inc
+++ b/inc/school.crawl.inc
@@ -62,7 +62,7 @@ function school_crawl_time_format($time)
*/
function school_crawl_days_format($days)
{
- static $daymap_1 = array('m' => 1, 't' => 2, 'w' => 3, 'h' => 4, 'r' => 4, 'f' => 5);
+ static $daymap_1 = array('m' => 'm', 't' => 't', 'w' => 'w', 'h' => 'h', 'r' => 'h', 'f' => 'f');
static $daymap_2 = array('th' => 'h');
$my_days = array();
diff --git a/input.php b/input.php
--- a/input.php
+++ b/input.php
@@ -36,12 +36,16 @@ if ($sch)
for ($section_key = $nsections - 1; $section_key >= 0; $section_key --)
{
$section = $class->getSection($section_key);
- $my_hc .= ' add_section_n(class_last, \'' . htmlentities($section->getLetter(), ENT_QUOTES) . '\', \''
- . htmlentities($section->getSynonym(), ENT_QUOTES) . '\', \''
- . $section->getStartTime() . '\', \''
- . $section->getEndTime() . '\', '
- . json_encode(array('m' => $section->getDay(0), 't' => $section->getDay(1), 'w' => $section->getDay(2), 'h' => $section->getDay(3), 'f' => $section->getDay(4))) . ', \''
- . htmlentities($section->getProf(), ENT_QUOTES) . "');\n";
+ $meetings = $section->getMeetings();
+ foreach ($meetings as $meeting)
+ {
+ $my_hc .= ' add_section_n(class_last, \'' . htmlentities($section->getLetter(), ENT_QUOTES) . '\', \''
+ . htmlentities($section->getSynonym(), ENT_QUOTES) . '\', \''
+ . $meeting->getStartTime() . '\', \''
+ . $meeting->getEndTime() . '\', '
+ . json_encode(array('m' => $meeting->getDay(0), 't' => $meeting->getDay(1), 'w' => $meeting->getDay(2), 'h' => $meeting->getDay(3), 'f' => $meeting->getDay(4))) . ', \''
+ . htmlentities($section->getProf(), ENT_QUOTES) . "');\n";
+ }
}
}
$my_hc .= ' });
diff --git a/process.php b/process.php
--- a/process.php
+++ b/process.php
@@ -10,7 +10,8 @@ include_once 'class.section.php';
// Supports multiple modes, prettiness, and searching for different indicators
function arrayToDays($array, $mode = 'num', $pretty = false, $key = 1) {
$outString = '';
- switch($mode){
+ switch($mode)
+ {
case 'short':
$days = array('Mon','Tue','Wed','Thur','Fri');
break;
@@ -20,6 +21,9 @@ function arrayToDays($array, $mode = 'nu
case 'num':
$days = array('1','2','3','4','5');
break;
+ case 'alpha':
+ $days = array('m', 't', 'w', 'h', 'f');
+ break;
default:
$outString = 'Invalid mode passed to arrayToDays()!';
return $outString;
@@ -117,7 +121,7 @@ if(!$DEBUG)
/* Skip the section name, which isn't a section */
if(is_array($section))
{
- $allClasses->addSection($class['name'], $section['letter'], $section['start'], $section['end'], arrayToDays($section['days']));
+ $allClasses->addSection($class['name'], $section['letter'], $section['start'], $section['end'], arrayToDays($section['days'], 'alpha'), NULL, $section['professor']);
}
}
}
diff --git a/schedulecreator.php b/schedulecreator.php
--- a/schedulecreator.php
+++ b/schedulecreator.php
@@ -14,39 +14,39 @@ include_once 'class.section.php';
$allClasses = new Schedule("Fall 2010");
$allClasses->addClass("CS 104");
- $allClasses->addSection("CS 104", "A", 1030, 1120, 24);
+ $allClasses->addSection("CS 104", "A", 1030, 1120, 'th');
$allClasses->addClass("Engr 209");
- $allClasses->addSection("Engr 209", "A", 1330, 1420, 1235);
- $allClasses->addSection("Engr 209", "B", 1430, 1520, 1235);
+ $allClasses->addSection("Engr 209", "A", 1330, 1420, 'mtwf');
+ $allClasses->addSection("Engr 209", "B", 1430, 1520, 'mtwf');
$allClasses->addClass("Engr 209L");
- $allClasses->addSection("Engr 209L", "A", 1830, 2120, 4);
- $allClasses->addSection("Engr 209L", "B", 1830, 2120, 3);
+ $allClasses->addSection("Engr 209L", "A", 1830, 2120, 'h');
+ $allClasses->addSection("Engr 209L", "B", 1830, 2120, 'w');
$allClasses->addClass("Math 231");
- $allClasses->addSection("Math 231", "A", 800, 850, 1235);
+ $allClasses->addSection("Math 231", "A", 800, 850, 'mtwf');
$allClasses->addClass("Phys 235");
- $allClasses->addSection("Phys 235", "A", 900, 950, 135);
- $allClasses->addSection("Phys 235", "B", 1130, 1220, 135);
- $allClasses->addSection("Phys 235", "C", 1230, 1320, 135);
+ $allClasses->addSection("Phys 235", "A", 900, 950, 'mwf');
+ $allClasses->addSection("Phys 235", "B", 1130, 1220, 'mwf');
+ $allClasses->addSection("Phys 235", "C", 1230, 1320, 'mwf');
$allClasses->addClass("Phys 235L");
- $allClasses->addSection("Phys 235L", "A", 1430, 1720, 1);
- $allClasses->addSection("Phys 235L", "B", 1430, 1720, 3);
- $allClasses->addSection("Phys 235L", "C", 830, 1120, 4);
- $allClasses->addSection("Phys 235L", "D", 1230, 1520, 4);
+ $allClasses->addSection("Phys 235L", "A", 1430, 1720, 'm');
+ $allClasses->addSection("Phys 235L", "B", 1430, 1720, 'w');
+ $allClasses->addSection("Phys 235L", "C", 830, 1120, 'h');
+ $allClasses->addSection("Phys 235L", "D", 1230, 1520, 'h');
$allClasses->addClass("Rel 131");
- $allClasses->addSection("Rel 131", "A", 800, 850, 135);
- $allClasses->addSection("Rel 131", "B", 900, 950, 135);
- $allClasses->addSection("Rel 131", "C", 1330, 1420, 135);
- $allClasses->addSection("Rel 131", "D", 1430, 1520, 135);
- $allClasses->addSection("Rel 131", "E", 835, 950, 24);
- $allClasses->addSection("Rel 131", "F", 1030, 1145, 24);
- $allClasses->addSection("Rel 131", "G", 1205, 1320, 24);
- $allClasses->addSection("Rel 131", "H", 1330, 1445, 24);
+ $allClasses->addSection("Rel 131", "A", 800, 850, 'mwf');
+ $allClasses->addSection("Rel 131", "B", 900, 950, 'mwf');
+ $allClasses->addSection("Rel 131", "C", 1330, 1420, 'mwf');
+ $allClasses->addSection("Rel 131", "D", 1430, 1520, 'mwf');
+ $allClasses->addSection("Rel 131", "E", 835, 950, 'th');
+ $allClasses->addSection("Rel 131", "F", 1030, 1145, 'th');
+ $allClasses->addSection("Rel 131", "G", 1205, 1320, 'th');
+ $allClasses->addSection("Rel 131", "H", 1330, 1445, 'th');
$allClasses->findPossibilities();
$allClasses->writeoutTables();
diff --git a/school.d/calvin.crawl.inc b/school.d/calvin.crawl.inc
--- a/school.d/calvin.crawl.inc
+++ b/school.d/calvin.crawl.inc
@@ -329,7 +329,7 @@ function calvin_crawl(Semester $semester
foreach (array('date_start', 'date_end', 'meeting_type', 'days', 'time_start', 'time_end', 'meeting_place') as $var)
echo $var . ':' . ${$var} . "\n";
- $section = new Section($section_id['section'], $time_start, $time_end, $days, $synonym, $faculty_name, $meeting_place);
+ $section = new Section($section_id['section'], array(new SectionMeeting($days, $time_start, $time_end, $meeting_place)), $synonym, $faculty_name);
$semester->section_add($section_id['department'], $section_id['course'], $section);
}
diff --git a/school.d/cedarville.inc b/school.d/cedarville.inc
--- a/school.d/cedarville.inc
+++ b/school.d/cedarville.inc
@@ -74,6 +74,8 @@ function cedarville_crawl($semester, $ve
$tables[$department] = table_parse(cedarville_html_fix($html));
}
+ $meeting_type_maps = array('LAB' => 'lab', 'LECT' => 'lecture');
+
foreach ($tables as $dept_table)
{
/*
@@ -192,20 +194,20 @@ function cedarville_crawl($semester, $ve
);
}
+ $section_meetings = array();
foreach ($meetings as $meeting)
{
- $section_letter = $section_parts['section'];
- if ($meeting['type'] == 'LECT')
- /**
- * \todo this might not make much sense.
- */
- $section_letter = 'L' . $section_letter;
- $semester->section_add($section_parts['department'], $section_parts['course'],
- new Section($section_letter,
- $meeting['time_start'], $meeting['time_end'],
- $meeting['days'], $synonym, $instructor,
- $meeting['room']));
+ $meeting_type = $meeting['type'];
+ if (isset($meeting_type_maps[$meeting_type]))
+ $meeting_type = $meeting_type_maps[$meeting_type];
+
+ $section_meetings[] = new SectionMeeting($meeting['days'], $meeting['time_start'],
+ $meeting['time_end'], $meeting['room'],
+ $meeting_type);
}
+ $semester->section_add($section_parts['department'], $section_parts['course'],
+ new Section($section_parts['section'], $section_meetings,
+ $synonym, $instructor));
}
}