GitBucket
4.21.2
Toggle navigation
Snippets
Sign in
Files
Branches
1
Releases
Issues
1
Pull requests
Labels
Priorities
Milestones
Wiki
Forks
nigel.stanger
/
Handbook
Browse code
- Added script to generate LaTeX macros for teaching period calendar weeks.
master
1 parent
430906c
commit
ecb9dc7acb059d4cf057c8108c065de30554b685
nstanger
authored
on 17 Feb 2012
Patch
Showing
1 changed file
calendar/generate_calendar.php
Ignore Space
Show notes
View
calendar/generate_calendar.php
0 → 100755
<?php /* File: $Id$ This script generates a LaTeX include file that contains macros specifying the date ranges for every week of the three main teaching periods through the year (i.e., summer school, first semester, second semester). Simply set the configuration as outlined below and run the script, saving the output in a suitable location (ideally only once for all papers, perhaps in $ALL_PAPERS_ROOT?). */ // LaTeX macro names can't include numbers, so we have to convert them to words. include( "Numbers/Words.php" ); /* Teaching period configuration. It's easily extensible to a new teaching period simply by adding a new specification for that period. The key should be valid as a LaTeX macro name (i.e., no spaces, no digits, no punctuation). The components of each period specification are: start_date: The date of the first day of the first week of the period. num_weeks: The total number of weeks in the period, /including/ any breaks (e.g., 13 teaching weeks plus 1 week mid-semester break = 14 weeks). break_week: The week number that the break (if any) falls in, relative to num_weeks, so if the break week falls after the sixth teaching week, then set this to 7. The numbering of teaching weeks will skip the break week regardless. If there is no break in the period, then set this to a number larger than num_weeks. Note that this currently only supports a single, one week break per period. Generalising the configuration to multiple/longer breaks probably isn't that difficult if needed (a list of week numbers instead of a single value should cater for all cases). Setting up the LaTeX macros and teaching week numbering could be tricky, though. */ $periods = array( 'SummerSchool' => array( 'start_date' => new DateTime( "2012-01-09" ), 'num_weeks' => 6, 'break_week' => 9999, ), "SemesterOne" => array( 'start_date' => new DateTime( "2012-02-27" ), 'num_weeks' => 14, 'break_week' => 7, ), "SemesterTwo" => array( 'start_date' => new DateTime( "2012-07-09" ), 'num_weeks' => 14, 'break_week' => 8, ), ); // A couple of handy date intervals: four days to the end of the current week, // and seven days to the start of next week. $plus_four_days = new DateInterval( 'P4D' ); $plus_seven_days = new DateInterval( 'P7D' ); $numwords = new Numbers_Words(); foreach ( $periods as $period_name => $period_data ) { $week_start = clone( $period_data['start_date'] ); for ( $week = 1; $week <= $period_data['num_weeks']; $week++ ) { $week_end = clone( $week_start ); $week_end->add( $plus_four_days ); // If the week start and end dates are in the same month, we only // need to output the month name once. $same_month = $week_start->format( 'n' ) == $week_end->format( 'n' ); // Handle break weeks. if ( $week == $period_data['break_week'] ) { printf( "\\newcommand{\\%sMidSemesterBreak}{%s--%s}\n", $period_name, ( $same_month ) ? $week_start->format( 'j' ) : $week_start->format( 'j M' ), $week_end->format( 'j M' ) ); } // if break week else { // If we've passed the break week, then we need to subtract one from // the week count to get the correct teaching week number. $week_number = ( $week > $period_data['break_week'] ) ? $week - 1 : $week; if( $same_month ) { printf( "\\newcommand{\\%sWeek%s}{%s--%s \\\\ %s}\n", $period_name, ucfirst( $numwords->toWords( $week_number ) ), $week_start->format( 'j' ), $week_end->format( 'j' ), $week_end->format( 'M' ) ); } // if same month else { printf( "\\newcommand{\\%sWeek%s}{%s \\\\ --%s}\n", $period_name, ucfirst( $numwords->toWords( $week_number ) ), $week_start->format( 'j M' ), $week_end->format( 'j M' ) ); } // else different months } // else normal teaching week $week_start->add( $plus_seven_days ); } // for each week } // foreach teaching period ?>
Show line notes below