My A2 coursework, re-done in PHP using Symfony.