Changeset - 318a910b91ad
[Not reviewed]
default
0 1 0
Nathan Brink (binki) - 15 years ago 2011-03-18 15:36:47
ohnobinki@ohnopublishing.net
Now instead of automatically guessing that a user want to register for the next semester, assume they want to register for a semester whose middle is half a year into the future.
1 file changed with 28 insertions and 6 deletions:
0 comments (0 inline, 0 general)
inc/school.inc
Show inline comments
 
@@ -329,16 +329,38 @@ function school_semester_guess(array $sc
 
      && isset($semesters[$_SESSION['semester']]))
 
      return $semesters[$_SESSION['semester']];
 

	
 
  $time = time();
 
  $next_semester = FALSE;
 
  /*
 
   * The following is the most _common_ scenario:
 
   *
 
   * A student is looking ahead in the last half of March (3) to
 
   * register for a semester starting in September (9) and ending in
 
   * December. Thus, looking 6 months into the future may put us right
 
   * in the middle of the desired semester, also considering that
 
   * during the summer (6) one is looking to register for a fall
 
   * semester which ends in December (12).
 
   */
 
  $time_target = time() + 60*60*24*365.25 * 0.5;
 

	
 
  $semester = NULL;
 
  /* guessed semester */
 
  $best_semester = NULL;
 
  /*
 
   * The absolute value of the difference between the $time_target and
 
   * the middle of the guessed semester. Smaller is better.
 
   */
 
  $best_score = -1;
 
  foreach ($semesters as $semester)
 
    {
 
      if ($next_semester)
 
	return $semester;
 
      if ($semester['time_start'] < $time)
 
	$next_semester = TRUE;
 
      $my_score = abs(($semester['time_end'] + $semester['time_start']) / 2 - $time_target);
 
      if ($best_score == -1 || $my_score < $best_score)
 
	{
 
	  $best_semester = $semester;
 
	  $best_score = $my_score;
 
    }
 
      error_log($semester['name'] . ': ' . $my_score);
 
    }
 
  if (!empty($best_semester))
 
    return $best_semester;
 
  return $semester;
 
}
 

	
0 comments (0 inline, 0 general)