Add image resizing to better fit screens
Add image resizing to better fit screens

file:b/.htaccess (new)
  # Apache configuration file
  # httpd.apache.org/docs/2.2/mod/quickreference.html
 
  # Note .htaccess files are an overhead, this logic should be in your Apache config if possible
  # httpd.apache.org/docs/2.2/howto/htaccess.html
 
  # Techniques in here adapted from all over, including:
  # Kroc Camen: camendesign.com/.htaccess
  # perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
  # Sample .htaccess file of CMS MODx: modxcms.com
 
 
  ###
  ### If you run a webserver other than apache, consider:
  ### github.com/paulirish/html5-boilerplate-server-configs
  ###
 
 
 
  # ----------------------------------------------------------------------
  # Better website experience for IE users
  # ----------------------------------------------------------------------
 
  # Force the latest IE version, in various cases when it may fall back to IE7 mode
  # github.com/rails/rails/commit/123eb25#commitcomment-118920
  # Use ChromeFrame if it's installed for a better experience for the poor IE folk
 
  <IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=Edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|xpi|safariextz|vcf)$" >
  Header unset X-UA-Compatible
  </FilesMatch>
  </IfModule>
 
 
  # ----------------------------------------------------------------------
  # Cross-domain AJAX requests
  # ----------------------------------------------------------------------
 
  # Serve cross-domain ajax requests, disabled.
  # enable-cors.org
  # code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
 
  # <IfModule mod_headers.c>
  # Header set Access-Control-Allow-Origin "*"
  # </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Webfont access
  # ----------------------------------------------------------------------
 
  # Allow access from all domains for webfonts.
  # Alternatively you could only whitelist your
  # subdomains like "subdomain.example.com".
 
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
  <IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
  </IfModule>
  </FilesMatch>
 
 
 
  # ----------------------------------------------------------------------
  # Proper MIME type for all files
  # ----------------------------------------------------------------------
 
 
  # JavaScript
  # Normalize to standard type (it's sniffed in IE anyways)
  # tools.ietf.org/html/rfc4329#section-7.2
  AddType application/javascript js
 
  # Audio
  AddType audio/ogg oga ogg
  AddType audio/mp4 m4a
 
  # Video
  AddType video/ogg ogv
  AddType video/mp4 mp4 m4v
  AddType video/webm webm
 
  # SVG.
  # Required for svg webfonts on iPad
  # twitter.com/FontSquirrel/status/14855840545
  AddType image/svg+xml svg svgz
  AddEncoding gzip svgz
 
  # Webfonts
  AddType application/vnd.ms-fontobject eot
  AddType application/x-font-ttf ttf ttc
  AddType font/opentype otf
  AddType application/x-font-woff woff
 
  # Assorted types
  AddType image/x-icon ico
  AddType image/webp webp
  AddType text/cache-manifest appcache manifest
  AddType text/x-component htc
  AddType application/x-chrome-extension crx
  AddType application/x-xpinstall xpi
  AddType application/octet-stream safariextz
  AddType text/x-vcard vcf
 
 
 
  # ----------------------------------------------------------------------
  # Allow concatenation from within specific js and css files
  # ----------------------------------------------------------------------
 
  # e.g. Inside of script.combined.js you could have
  # <!--#include file="libs/jquery-1.5.0.min.js" -->
  # <!--#include file="plugins/jquery.idletimer.js" -->
  # and they would be included into this single file.
 
  # This is not in use in the boilerplate as it stands. You may
  # choose to name your files in this way for this advantage or
  # concatenate and minify them manually.
  # Disabled by default.
 
  #<FilesMatch "\.combined\.js$">
  # Options +Includes
  # AddOutputFilterByType INCLUDES application/javascript application/json
  # SetOutputFilter INCLUDES
  #</FilesMatch>
  #<FilesMatch "\.combined\.css$">
  # Options +Includes
  # AddOutputFilterByType INCLUDES text/css
  # SetOutputFilter INCLUDES
  #</FilesMatch>
 
 
  # ----------------------------------------------------------------------
  # Gzip compression
  # ----------------------------------------------------------------------
 
  <IfModule mod_deflate.c>
 
  # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
  <IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
  SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
  RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
  </IfModule>
  </IfModule>
 
  # HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
  <IfModule filter_module>
  FilterDeclare COMPRESS
  FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
  FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
  FilterProvider COMPRESS DEFLATE resp=Content-Type $text/plain
  FilterProvider COMPRESS DEFLATE resp=Content-Type $text/xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $text/x-component
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/javascript
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/json
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/xhtml+xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/rss+xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/atom+xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/vnd.ms-fontobject
  FilterProvider COMPRESS DEFLATE resp=Content-Type $image/svg+xml
  FilterProvider COMPRESS DEFLATE resp=Content-Type $application/x-font-ttf
  FilterProvider COMPRESS DEFLATE resp=Content-Type $font/opentype
  FilterChain COMPRESS
  FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no
  </IfModule>
 
  <IfModule !mod_filter.c>
  # Legacy versions of Apache
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
  AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml application/atom+xml
  AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype
  </IfModule>
  </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Expires headers (for better cache control)
  # ----------------------------------------------------------------------
 
  # These are pretty far-future expires headers.
  # They assume you control versioning with cachebusting query params like
  # <script src="application.js?20100608">
  # Additionally, consider that outdated proxies may miscache
  # www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
 
  # If you don't use filenames to version, lower the CSS and JS to something like
  # "access plus 1 week" or so.
 
  <IfModule mod_expires.c>
  ExpiresActive on
 
  # Perhaps better to whitelist expires rules? Perhaps.
  ExpiresDefault "access plus 1 month"
 
  # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
  ExpiresByType text/cache-manifest "access plus 0 seconds"
 
  # Your document html
  ExpiresByType text/html "access plus 0 seconds"
 
  # Data
  ExpiresByType text/xml "access plus 0 seconds"
  ExpiresByType application/xml "access plus 0 seconds"
  ExpiresByType application/json "access plus 0 seconds"
 
  # Feed
  ExpiresByType application/rss+xml "access plus 1 hour"
  ExpiresByType application/atom+xml "access plus 1 hour"
 
  # Favicon (cannot be renamed)
  ExpiresByType image/x-icon "access plus 1 week"
 
  # Media: images, video, audio
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/jpg "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType video/ogg "access plus 1 month"
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"
 
  # HTC files (css3pie)
  ExpiresByType text/x-component "access plus 1 month"
 
  # Webfonts
  ExpiresByType font/truetype "access plus 1 month"
  ExpiresByType font/opentype "access plus 1 month"
  ExpiresByType application/x-font-woff "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
 
  # CSS and JavaScript
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
 
  <IfModule mod_headers.c>
  Header append Cache-Control "public"
  </IfModule>
 
  </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # ETag removal
  # ----------------------------------------------------------------------
 
  # FileETag None is not enough for every server.
  <IfModule mod_headers.c>
  Header unset ETag
  </IfModule>
 
  # Since we're sending far-future expires, we don't need ETags for
  # static content.
  # developer.yahoo.com/performance/rules.html#etags
  FileETag None
 
 
 
  # ----------------------------------------------------------------------
  # Stop screen flicker in IE on CSS rollovers
  # ----------------------------------------------------------------------
 
  # The following directives stop screen flicker in IE on CSS rollovers - in
  # combination with the "ExpiresByType" rules for images (see above). If
  # needed, un-comment the following rules.
 
  # BrowserMatch "MSIE" brokenvary=1
  # BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
  # BrowserMatch "Opera" !brokenvary
  # SetEnvIf brokenvary 1 force-no-vary
 
 
 
  # ----------------------------------------------------------------------
  # Cookie setting from iframes
  # ----------------------------------------------------------------------
 
  # Allow cookies to be set from iframes (for IE only)
  # If needed, uncomment and specify a path or regex in the Location directive
 
  # <IfModule mod_headers.c>
  # <Location />
  # Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
  # </Location>
  # </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Start rewrite engine
  # ----------------------------------------------------------------------
 
  # Turning on the rewrite engine is necessary for the following rules and features.
  # FollowSymLinks must be enabled for this to work.
 
  <IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Suppress or force the "www." at the beginning of URLs
  # ----------------------------------------------------------------------
 
  # The same content should never be available under two different URLs - especially not with and
  # without "www." at the beginning, since this can cause SEO problems (duplicate content).
  # That's why you should choose one of the alternatives and redirect the other one.
 
  # By default option 1 (no "www.") is activated. Remember: Shorter URLs are sexier.
  # no-www.org/faq.php?q=class_b
 
  # If you rather want to use option 2, just comment out all option 1 lines
  # and uncomment option 2.
  # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
 
  # ----------------------------------------------------------------------
 
  # Option 1:
  # Rewrite "www.example.com -> example.com"
 
  <IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
  </IfModule>
 
  # ----------------------------------------------------------------------
 
  # Option 2:
  # To rewrite "example.com -> www.example.com" uncomment the following lines.
  # Be aware that the following rule might not be a good idea if you
  # use "real" subdomains for certain parts of your website.
 
  # <IfModule mod_rewrite.c>
  # RewriteCond %{HTTPS} !=on
  # RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
  # RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
  # </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Built-in filename-based cache busting
  # ----------------------------------------------------------------------
 
  # If you're not using the build script to manage your filename version revving,
  # you might want to consider enabling this, which will route requests for
  # /css/style.20110203.css to /css/style.css
 
  # To understand why this is important and a better idea than all.css?v1231,
  # read: github.com/paulirish/html5-boilerplate/wiki/Version-Control-with-Cachebusting
 
  # Uncomment to enable.
  # <IfModule mod_rewrite.c>
  # RewriteCond %{REQUEST_FILENAME} !-f
  # RewriteCond %{REQUEST_FILENAME} !-d
  # RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
  # </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Prevent SSL cert warnings
  # ----------------------------------------------------------------------
 
  # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
  # https://www.example.com when your cert only allows https://secure.example.com
  # Uncomment the following lines to use this feature.
 
  # <IfModule mod_rewrite.c>
  # RewriteCond %{SERVER_PORT} !^443
  # RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
  # </IfModule>
 
 
 
  # ----------------------------------------------------------------------
  # Prevent 404 errors for non-existing redirected folders
  # ----------------------------------------------------------------------
 
  # without -MultiViews, Apache will give a 404 for a rewrite if a folder of the same name does not exist
  # e.g. /blog/hello : webmasterworld.com/apache/3808792.htm
 
  Options -MultiViews
 
 
 
  # ----------------------------------------------------------------------
  # Custom 404 page
  # ----------------------------------------------------------------------
 
  # You can add custom pages to handle 500 or 403 pretty easily, if you like.
  ErrorDocument 404 /404.html
 
 
 
  # ----------------------------------------------------------------------
  # UTF-8 encoding
  # ----------------------------------------------------------------------
 
  # Use UTF-8 encoding for anything served text/plain or text/html
  AddDefaultCharset utf-8
 
  # Force UTF-8 for a number of file formats
  AddCharset utf-8 .html .css .js .xml .json .rss .atom
 
 
 
  # ----------------------------------------------------------------------
  # A little more security
  # ----------------------------------------------------------------------
 
 
  # Do we want to advertise the exact version number of Apache we're running?
  # Probably not.
  ## This can only be enabled if used in httpd.conf - It will not work in .htaccess
  # ServerTokens Prod
 
 
  # "-Indexes" will have Apache block users from browsing folders without a default document
  # Usually you should leave this activated, because you shouldn't allow everybody to surf through
  # every folder on your server (which includes rather private places like CMS system folders).
  Options -Indexes
 
 
  # Block access to "hidden" directories whose names begin with a period. This
  # includes directories used by version control systems such as Subversion or Git.
  <IfModule mod_rewrite.c>
  RewriteRule "(^|/)\." - [F]
  </IfModule>
 
 
  # If your server is not already configured as such, the following directive
  # should be uncommented in order to set PHP's register_globals option to OFF.
  # This closes a major security hole that is abused by most XSS (cross-site
  # scripting) attacks. For more information: http://php.net/register_globals
  #
  # IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
  #
  # Your server does not allow PHP directives to be set via .htaccess. In that
  # case you must make this change in your php.ini file instead. If you are
  # using a commercial web host, contact the administrators for assistance in
  # doing this. Not all servers allow local php.ini files, and they should
  # include all PHP configurations (not just this one), or you will effectively
  # reset everything to PHP defaults. Consult www.php.net for more detailed
  # information about setting PHP directives.
 
  # php_flag register_globals Off
 
  # Rename session cookie to something else, than PHPSESSID
  # php_value session.name sid
 
  # Do not show you are using PHP
  # Note: Move this line to php.ini since it won't work in .htaccess
  # php_flag expose_php Off
 
  # Level of log detail - log all errors
  # php_value error_reporting -1
 
  # Write errors to log file
  # php_flag log_errors On
 
  # Do not display errors in browser (production - Off, development - On)
  # php_flag display_errors Off
 
  # Do not display startup errors (production - Off, development - On)
  # php_flag display_startup_errors Off
 
  # Format errors in plain text
  # Note: Leave this setting 'On' for xdebug's var_dump() output
  # php_flag html_errors Off
 
  # Show multiple occurrence of error
  # php_flag ignore_repeated_errors Off
 
  # Show same errors from different sources
  # php_flag ignore_repeated_source Off
 
  # Size limit for error messages
  # php_value log_errors_max_len 1024
 
  # Don't precede error with string (doesn't accept empty string, use whitespace if you need)
  # php_value error_prepend_string " "
 
  # Don't prepend to error (doesn't accept empty string, use whitespace if you need)
  # php_value error_append_string " "
 
  # Increase cookie security
  <IfModule php5_module>
  php_value session.cookie_httponly true
  </IfModule>
 
<?php <?php
  include_once("config.inc.php");
   
  include("php-calendar.lib.php");
function include_header($title) { function include_header($title) {
?> ?>
<!doctype html> <!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title> <title></title>
<meta name="description" content=""> <meta name="description" content="">
<meta name="author" content=""> <meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="viewport" content="width=device-width,initial-scale=1">
<!-- CSS concatenated and minified via ant build script--> <!-- CSS concatenated and minified via ant build script-->
<link rel="stylesheet" href="css/style.css"> <link rel="stylesheet" href="css/style.css">
<!-- end CSS--> <!-- end CSS-->
<script src="js/libs/modernizr-2.0.6.min.js"></script> <script src="js/libs/modernizr-2.0.6.min.js"></script>
</head> </head>
<body> <body>
<div id="container"> <div id="container">
<header> <header>
</header> </header>
<div id="main" role="main"> <div id="main" role="main">
<?php <?php
} }
function include_footer() { function include_footer() {
?> ?>
</div> </div>
<footer> <footer>
</footer> </footer>
</div> <!--! end of #container --> </div> <!--! end of #container -->
  <!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary -->
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="js/libs/jquery-1.5.1.min.js">\x3C/script>')</script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> <script type="text/javascript" src="js/jquery.imagefit.js"></script>
  <script>
  $(window).load(function(){
<!-- scripts concatenated and minified via ant build script $('.col1').imagefit();
<script defer src="js/plugins.js"></script> });
<script defer src="js/script.js"></script> </script>
end scripts-->  
   
   
<!-- <script> // Change UA-XXXXX-X to be your site's ID  
window._gaq = [['_setAccount','UAXXXXXXXX1'],['_trackPageview'],['_trackPageLoadTime']];  
Modernizr.load({  
load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js'  
});  
</script>-->  
   
   
<!--[if lt IE 7 ]>  
<script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js"></script>  
<script>window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})</script>  
<![endif]-->  
   
</body> </body>
</html> </html>
<?php <?php
} }
   
  function include_sidebar() {
  ?>
  <a href="upload.php">Upload a new day</a><br>
  <a href="help.php">Help/Instructions</a><br>
  <hr>
  <?php
  foreach (getCalendarMonths() as $month) {
  echo generate_calendar($month['year'], $month['month'], getCalendarDays($month['year'], $month['month']), 3);
  }
  }
   
  function getNextAvailableDate() {
  if ($previousDate = getPreviousDate()) {
  $nextDayTime = strtotime("+1 day",strtotime($previousDate));
  if (date("m",$nextDayTime) == "08" and date("d",$nextDayTime) == "24") {
  // skip the 24th of August
  $nextDayTime = strtotime("+1 day",$nextDayTime);
  }
  return date("Y-m-d",$nextDayTime);
  } else {
  return START_DATE;
  }
  }
  function getPreviousDate() {
  $datedFiles = scandir(DATA_DIR); // sorted descendingly by default
  if (sizeof($datedFiles) > 2) {// always at least 2 even for an empty folder because of ./ and ../
  return removeImageFileExtensions($datedFiles[sizeof($datedFiles)-1]);
  } else {
  return false;
  }
  }
  function getPhoto($displayDate) {
  $cacheFile = CACHE_DIR.$displayDate.".png";
  if (file_exists($cacheFile)) {
  return $cacheFile;
  } else {
  if (file_exists(DATA_DIR.$displayDate.".jpg")) {
  $source_gd_image = imagecreatefromjpeg( DATA_DIR.$displayDate.".jpg");
   
  } else if (file_exists(DATA_DIR.$displayDate.".png")) {
  $source_gd_image = imagecreatefrompng( DATA_DIR.$displayDate.".png" );
  } else {
  return false;
  }
   
  if ( $source_gd_image === false )
  {
  return false;
  }
  $source_image_width = imagesx($source_gd_image);
  $source_image_height = imagesy($source_gd_image);
   
  $header_gd_image = imagecreatefrompng( "img/header.png" );
  $header_image_width = imagesx($header_gd_image);
  $header_image_height = imagesy($header_gd_image);
   
  $white = imagecolorallocate($source_gd_image, 255, 255, 255);
  $black = imagecolorallocate($source_gd_image, 0, 0, 0);
  function calculateTextBox($text,$fontFile,$fontSize) {
  /************
  simple function that calculates the *exact* bounding box (single pixel precision).
  The function returns an associative array with these keys:
  left, top: coordinates you will pass to imagettftext
  width, height: dimension of the image you have to create
  *************/
  $rect = imagettfbbox($fontSize,0,$fontFile,$text);
  $minX = min(array($rect[0],$rect[2],$rect[4],$rect[6]));
  $maxX = max(array($rect[0],$rect[2],$rect[4],$rect[6]));
  $minY = min(array($rect[1],$rect[3],$rect[5],$rect[7]));
  $maxY = max(array($rect[1],$rect[3],$rect[5],$rect[7]));
   
  return array(
  "left" => abs($minX) - 1,
  "top" => abs($minY) - 1,
  "width" => $maxX - $minX,
  "height" => $maxY - $minY,
  "box" => $rect
  );
  }
  $date = strtotime($displayDate);
  // First we create our bounding box for the first text
  $textDayName = date("l",$date);
  $sizeDayName = 18;
  $fontDayName = "./img/mplus-1p-medium.ttf";
  $bboxDayName = calculateTextBox($textDayName,$fontDayName,$sizeDayName);
   
  $textDate = date("jS F Y",$date);
  $sizeDate = 14;
  $fontDate = "./img/mplus-1p-regular.ttf";
  $bboxDate = calculateTextBox($textDate,$fontDate,$sizeDate);
   
  $margin = 15;
  $maxX = $header_image_width + $margin*2 + max($bboxDayName['width'],$bboxDate['width']) + $margin*2;
  $maxY = max($header_image_height + $margin*2 , ($bboxDayName['height']+$margin+$bboxDate['height']));
   
  // Draw a white rectangle
  imagefilledrectangle($source_gd_image, 0, 0, $maxX, $maxY, $white);
   
  imagecopy($source_gd_image, $header_gd_image,$margin,$margin,0,0,$header_image_width,$header_image_height);
   
  // Write it
  imagettftext($source_gd_image, $sizeDayName, 0, $header_image_width+$margin*2+$bboxDayName['left'], $margin+$bboxDayName['top'], $black, $fontDayName, $textDayName);
  imagettftext($source_gd_image, $sizeDate, 0, $header_image_width+$margin*2+$bboxDate['left'], $margin+$bboxDayName['height']+$margin+$bboxDate['top'], $black, $fontDate, $textDate);
   
  imagepng( $source_gd_image, $cacheFile, 9 );
  imagedestroy( $source_gd_image );
  return $cacheFile;
  }
  }
  function getCalendarDays($year,$month) {
  $result = Array();
  if ($handle = opendir(DATA_DIR)) {
  while (false !== ($file = readdir($handle))) {
  if ($file != "." && $file != ".." && startsWith($file,"$year-$month")) {
  $parts = explode("-",$file);
  $day = removeImageFileExtensions($parts[2]);
  $result[$day]=Array("index.php?date=$year-$month-$day",'linked-day');
  }
  }
  }
  ksort($result);
  return $result;
  }
  function getCalendarMonths() {
  $months = Array();
  if ($handle = opendir(DATA_DIR)) {
  while (false !== ($file = readdir($handle))) {
  if ($file != "." && $file != "..") {
  $parts = explode("-",$file);
  $months[$parts[0].$parts[1]]=Array("month"=>$parts[1],"year"=>$parts[0]);
  }
  }
  }
  return $months;
  }
  function startsWith($haystack, $needle)
  {
  // source: http://stackoverflow.com/questions/834303/php-startswith-and-endswith-functions
  $length = strlen($needle);
  return (substr($haystack, 0, $length) === $needle);
  }
  function removeImageFileExtensions($filename) {
  return str_replace(Array(".png",".jpg"),"",$filename);
  }
?> ?>
  <?php
  date_default_timezone_set('Antarctica/Macquarie');
   
  define("START_DATE","2012-08-25");
   
  define("MIN_IMAGE_SIZE",1000);
   
  //Data should not be placed anywhere it is accessable from the web, but should still be writable by webserver
  define("DATA_DIR","./data/");
   
  //Cache should be writable by webserver, in the web accessable directory, not directory listable
  define("CACHE_DIR","./cache/");
  ?>
  <?php
  include("common.inc.php");
  include_header("confirmUpload");
  $error = false;
   
  if (!isset($_FILES['userfile'])) {
  echo 'No file was uploaded. You should start from the <a href="upload.php">upload page</a>';
  $error = true;
  } else {
  $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
  $source_image_type = $imageinfo['mime'];
  $source_image_width = $imageinfo[0];
  $source_image_height = $imageinfo[1];
  }
   
  if($error == false && ($source_image_type != 'image/png' && $source_image_type != 'image/jpeg')) {
  echo "Sorry, we only accept PNG and JPEG images. Your image was of type '$source_image_type'.<br>";
  $error = true;
  }
  if($error == false && ($source_image_width < MIN_IMAGE_SIZE || $source_image_height < MIN_IMAGE_SIZE)) {
  echo "Sorry, we only accept images larger than ".MIN_IMAGE_SIZE." pixels. Your image was $source_image_width x $source_image_height pixels big. <br>";
  $error = true;
  }
   
  if($error == false && ($source_image_width != $source_image_height)) {
  echo "Sorry, we only accept images that are exactly square (the height is the same as the width). Your image was $source_image_width x $source_image_height pixels big. <br>";
  $error = true;
  }
  if (!$error) {
  $fileExtension = ($source_image_type == 'image/png' ? ".png" : ".jpg");
  $fileDate = getNextAvailableDate();
  echo "Uploaded file meets all necessary requirements, next available date is $fileDate <br>";
  $uploaddir = '/var/spool/uploads/'; # Outside of web root
  $uploadfile = DATA_DIR . $fileDate . $fileExtension;
  if (file_exists($uploadfile)) {
  echo "Oh no! A file for $fileDate already exists! Please retry in a moment<br>";
  } else {
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File was successfully uploaded.\n<br>";
  } else {
  echo "File uploading failed.\n<br>";
  }
  }
  }
  include_footer();
  ?>
file:a/css/screen.css (deleted)
body {  
margin:0;  
padding:0;  
border:0; /* This removes the border around the viewport in old versions of IE */  
width:100%;  
background:#fff;  
min-width:600px; /* Minimum width of layout - remove line if not required */  
/* The min-width property does not work in old versions of Internet Explorer */  
font-size:90%;  
}  
a {  
color:#369;  
}  
a:hover {  
color:#fff;  
background:#369;  
text-decoration:none;  
}  
h1, h2, h3 {  
margin:.8em 0 .2em 0;  
padding:0;  
}  
p {  
margin:.4em 0 .8em 0;  
padding:0;  
}  
img {  
margin:10px 0 5px;  
}  
#ads img {  
display:block;  
padding-top:10px;  
}  
 
/* Header styles */  
#header {  
clear:both;  
float:left;  
width:100%;  
}  
#header {  
border-bottom:1px solid #000;  
}  
#header p,  
#header h1,  
#header h2 {  
padding:.4em 15px 0 15px;  
margin:0;  
}  
#header ul {  
clear:left;  
float:left;  
width:100%;  
list-style:none;  
margin:10px 0 0 0;  
padding:0;  
}  
#header ul li {  
display:inline;  
list-style:none;  
margin:0;  
padding:0;  
}  
#header ul li a {  
display:block;  
float:left;  
margin:0 0 0 1px;  
padding:3px 10px;  
text-align:center;  
background:#eee;  
color:#000;  
text-decoration:none;  
position:relative;  
left:15px;  
line-height:1.3em;  
}  
#header ul li a:hover {  
background:#369;  
color:#fff;  
}  
#header ul li a.active,  
#header ul li a.active:hover {  
color:#fff;  
background:#000;  
font-weight:bold;  
}  
#header ul li a span {  
display:block;  
}  
/* 'widths' sub menu */  
#layoutdims {  
clear:both;  
background:#eee;  
border-top:4px solid #000;  
margin:0;  
padding:6px 15px !important;  
text-align:right;  
}  
/* column container */  
.colmask {  
position:relative; /* This fixes the IE7 overflow hidden bug */  
clear:both;  
float:left;  
width:100%; /* width of whole page */  
overflow:hidden; /* This chops off any overhanging divs */  
}  
/* common column settings */  
.colright,  
.colmid,  
.colleft {  
float:left;  
width:100%;  
position:relative;  
}  
.col1,  
.col2,  
.col3 {  
float:left;  
position:relative;  
padding:0 0 1em 0;  
overflow:hidden;  
}  
/* 2 Column (right menu) settings */  
.rightmenu {  
background:#eee; /* right column background colour */  
}  
.rightmenu .colleft {  
right:25%; /* right column width */  
background:#fff; /* left column background colour */  
}  
.rightmenu .col1 {  
width:71%; /* left column content width (left column width minus left and right padding) */  
left:27%; /* (right column width) plus (left column left padding) */  
}  
.rightmenu .col2 {  
width:21%; /* right column content width (right column width minus left and right padding) */  
left:31%; /* (right column width) plus (left column left and right padding) plus (right column left padding) */  
}  
/* Footer styles */  
#footer {  
clear:both;  
float:left;  
width:100%;  
border-top:1px solid #000;  
}  
#footer p {  
padding:10px;  
margin:0;  
}  
 
/* HTML5 ✰ Boilerplate /* HTML5 ✰ Boilerplate
* ==|== normalize ========================================================== * ==|== normalize ==========================================================
*/ */
   
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; } article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
audio:not([controls]) { display: none; } audio:not([controls]) { display: none; }
[hidden] { display: none; } [hidden] { display: none; }
   
html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
body { margin: 0; font-size: 13px; line-height: 1.231; } body { margin: 0; font-size: 13px; line-height: 1.231; }
body, button, input, select, textarea { font-family: sans-serif; color: #222; } body, button, input, select, textarea { font-family: sans-serif; color: #222; }
   
::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; } ::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
::selection { background: #fe57a1; color: #fff; text-shadow: none; } ::selection { background: #fe57a1; color: #fff; text-shadow: none; }
   
a { color: #00e; } a { color: #00e; }
a:visited { color: #551a8b; } a:visited { color: #551a8b; }
a:hover { color: #06e; } a:hover { color: #06e; }
a:focus { outline: thin dotted; } a:focus { outline: thin dotted; }
a:hover, a:active { outline: 0; } a:hover, a:active { outline: 0; }
   
abbr[title] { border-bottom: 1px dotted; } abbr[title] { border-bottom: 1px dotted; }
b, strong { font-weight: bold; } b, strong { font-weight: bold; }
blockquote { margin: 1em 40px; } blockquote { margin: 1em 40px; }
dfn { font-style: italic; } dfn { font-style: italic; }
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; } hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
ins { background: #ff9; color: #000; text-decoration: none; } ins { background: #ff9; color: #000; text-decoration: none; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; } mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; } pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
q { quotes: none; } q { quotes: none; }
q:before, q:after { content: ""; content: none; } q:before, q:after { content: ""; content: none; }
small { font-size: 85%; } small { font-size: 85%; }
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
sup { top: -0.5em; } sup { top: -0.5em; }
sub { bottom: -0.25em; } sub { bottom: -0.25em; }
ul, ol { margin: 1em 0; padding: 0 0 0 40px; } ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
dd { margin: 0 0 0 40px; } dd { margin: 0 0 0 40px; }
nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; } nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; } img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
svg:not(:root) { overflow: hidden; } svg:not(:root) { overflow: hidden; }
figure { margin: 0; } figure { margin: 0; }
   
form { margin: 0; } form { margin: 0; }
fieldset { border: 0; margin: 0; padding: 0; } fieldset { border: 0; margin: 0; padding: 0; }
label { cursor: pointer; } label { cursor: pointer; }
legend { border: 0; *margin-left: -7px; padding: 0; } legend { border: 0; *margin-left: -7px; padding: 0; }
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; } button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
button, input { line-height: normal; *overflow: visible; } button, input { line-height: normal; *overflow: visible; }
table button, table input { *overflow: auto; } table button, table input { *overflow: auto; }
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; } input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; } input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
textarea { overflow: auto; vertical-align: top; resize: vertical; } textarea { overflow: auto; vertical-align: top; resize: vertical; }
input:valid, textarea:valid { } input:valid, textarea:valid { }
input:invalid, textarea:invalid { background-color: #f0dddd; } input:invalid, textarea:invalid { background-color: #f0dddd; }
   
table { border-collapse: collapse; border-spacing: 0; } table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; } td { vertical-align: top; }
   
   
/* ==|== primary styles ===================================================== /* ==|== primary styles =====================================================
Author: Author:
========================================================================== */ ========================================================================== */
   
   
/* Header styles */  
#header {  
clear:both;  
float:left;  
width:100%;  
}  
#header {  
border-bottom:1px solid #000;  
}  
#header p,  
#header h1,  
#header h2 {  
padding:.4em 15px 0 15px;  
margin:0;  
}  
#header ul {  
clear:left;  
float:left;  
width:100%;  
list-style:none;  
margin:10px 0 0 0;  
padding:0;  
}  
#header ul li {  
display:inline;  
list-style:none;  
margin:0;  
padding:0;  
}  
#header ul li a {  
display:block;  
float:left;  
margin:0 0 0 1px;  
padding:3px 10px;  
text-align:center;  
background:#eee;  
color:#000;  
text-decoration:none;  
position:relative;  
left:15px;  
line-height:1.3em;  
}  
#header ul li a:hover {  
background:#369;  
color:#fff;  
}  
#header ul li a.active,  
#header ul li a.active:hover {  
color:#fff;  
background:#000;  
font-weight:bold;  
}  
#header ul li a span {  
display:block;  
}  
/* 'widths' sub menu */  
#layoutdims {  
clear:both;  
background:#eee;  
border-top:4px solid #000;  
margin:0;  
padding:6px 15px !important;  
text-align:right;  
}  
/* column container */ /* column container */
.colmask { .colmask {
position:relative; /* This fixes the IE7 overflow hidden bug */ position:relative; /* This fixes the IE7 overflow hidden bug */
clear:both; clear:both;
float:left; float:left;
width:100%; /* width of whole page */ width:100%; /* width of whole page */
overflow:hidden; /* This chops off any overhanging divs */ overflow:hidden; /* This chops off any overhanging divs */
} }
/* common column settings */ /* common column settings */
.colright,  
.colmid,  
.colleft { .colleft {
float:left; float:left;
width:100%; width:100%;
position:relative; position:relative;
} }
.col1, .col1,
.col2, .col2 {
.col3 {  
float:left; float:left;
position:relative; position:relative;
padding:0 0 1em 0; padding:0 0 1em 0;
overflow:hidden; overflow:hidden;
} }
.col2 { .col2 {
text-align: center; text-align: center;
height: 100%; }
  .col2 table {
  width: 100%;
} }
/* 2 Column (right menu) settings */ /* 2 Column (right menu) settings */
.rightmenu { .rightmenu {
background:#eee; /* right column background colour */ background:#eee; /* right column background colour */
} }
.rightmenu .colleft { .rightmenu .colleft {
right:25%; /* right column width */ right:25%; /* right column width */
background:#fff; /* left column background colour */ background:#fff; /* left column background colour */
} }
.rightmenu .col1 { .rightmenu .col1 {
width:71%; /* left column content width (left column width minus left and right padding) */ width:71%; /* left column content width (left column width minus left and right padding) */
left:27%; /* (right column width) plus (left column left padding) */ left:27%; /* (right column width) plus (left column left padding) */
} }
.rightmenu .col2 { .rightmenu .col2 {
width:21%; /* right column content width (right column width minus left and right padding) */ width:21%; /* right column content width (right column width minus left and right padding) */
left:31%; /* (right column width) plus (left column left and right padding) plus (right column left padding) */ left:31%; /* (right column width) plus (left column left and right padding) plus (right column left padding) */
} }
   
   
/* ==|== non-semantic helper classes ======================================== */ /* ==|== non-semantic helper classes ======================================== */
.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; } .ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
.ir br { display: none; } .ir br { display: none; }
.hidden { display: none !important; visibility: hidden; } .hidden { display: none !important; visibility: hidden; }
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; } .visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
.invisible { visibility: hidden; } .invisible { visibility: hidden; }
.clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:before, .clearfix:after { content: ""; display: table; }
.clearfix:after { clear: both; } .clearfix:after { clear: both; }
.clearfix { zoom: 1; } .clearfix { zoom: 1; }
   
   
/* ==|== media queries ====================================================== */ /* ==|== media queries ====================================================== */
   
@media only screen and (min-width: 480px) { @media only screen and (min-width: 480px) {
   
   
} }
   
@media only screen and (min-width: 768px) { @media only screen and (min-width: 768px) {
   
} }
   
   
   
/* ==|== print styles ======================================================= */ /* ==|== print styles ======================================================= */
@media print { @media print {
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
a, a:visited { text-decoration: underline; } a, a:visited { text-decoration: underline; }
a[href]:after { content: " (" attr(href) ")"; } a[href]:after { content: " (" attr(href) ")"; }
abbr[title]:after { content: " (" attr(title) ")"; } abbr[title]:after { content: " (" attr(title) ")"; }
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; } thead { display: table-header-group; }
tr, img { page-break-inside: avoid; } tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; } img { max-width: 100% !important; }
@page { margin: 0.5cm; } @page { margin: 0.5cm; }
p, h2, h3 { orphans: 3; widows: 3; } p, h2, h3 { orphans: 3; widows: 3; }
h2, h3 { page-break-after: avoid; } h2, h3 { page-break-after: avoid; }
} }
   
file:a/help.php -> file:b/help.php
  <?php
  include("common.inc.php");
  include_header("index");
  ?>
  <div class="colmask rightmenu">
  <div class="colleft">
   
  <div class="col1">
  Rules for uploading:
  <ul>
  <li>Must be larger than 1000 pixels </li>
  <li>Must be exactly square </li>
  <li>Must be in JPG/PNG format (BMP/TIFF is too big, GIF has too little colors) </li>
  </ul>
  </div> <div class="col2">
  <?php
  include_sidebar();
  echo ' </div>
  </div>
  </div> ';
  include_footer();
  ?>
file:a/humans.txt -> file:b/humans.txt
/* the humans responsible & colophon */ /* the humans responsible & colophon */
/* humanstxt.org */ /* humanstxt.org */
   
   
/* TEAM */ /* TEAM */
<your title>: <your name> Lead Developer: Alexander Sadleir
Site: Site: http://maxious.lambdacomplex.org
Twitter: Twitter: @maxious
Location:  
   
/* THANKS */ /* THANKS */
Names (& URL): Names (& URL):
   
/* SITE */ /* SITE */
Standards: HTML5, CSS3 Standards: HTML5, CSS3
Components: Modernizr, jQuery Components: Modernizr, jQuery
Software: Software: HTML5 Boilerplate, PHP Calendar by Keith Devens
   
   
   
-o/-  
+oo//-  
:ooo+//:  
-ooooo///-  
/oooooo//:  
:ooooooo+//-  
-+oooooooo///-  
-://////////////+oooooooooo++////////////::  
:+ooooooooooooooooooooooooooooooooooooo+:::-  
-/+ooooooooooooooooooooooooooooooo+/::////:-  
-:+oooooooooooooooooooooooooooo/::///////:-  
--/+ooooooooooooooooooooo+::://////:-  
-:+ooooooooooooooooo+:://////:--  
/ooooooooooooooooo+//////:-  
-ooooooooooooooooooo////-  
/ooooooooo+oooooooooo//:  
:ooooooo+/::/+oooooooo+//-  
-oooooo/::///////+oooooo///-  
/ooo+::://////:---:/+oooo//:  
-o+/::///////:- -:/+o+//-  
:-:///////:- -:/://  
-////:- --//:  
-- -:  
   
file:b/img/header.png (new)
 Binary files /dev/null and b/img/header.png differ
 Binary files /dev/null and b/img/mplus-1p-medium.ttf differ
 Binary files /dev/null and b/img/mplus-1p-regular.ttf differ
file:a/index.php -> file:b/index.php
<?php <?php
include("common.inc.php"); include("common.inc.php");
include("php-calendar.lib.php");  
include_header("index"); include_header("index");
echo '<div class="colmask rightmenu"> ?>
<div class="colleft"> <div class="colmask rightmenu">
  <div class="colleft">
<div class="col1">  
jdfgjkdfhjghdfjhgjdfgdf'; <div class="col1">
echo ' </div> <div class="col2"> '; <?php
$days = array( $displayDate = (isset($_GET['date']) ? filter_var(substr($_GET['date'],0,11),FILTER_SANITIZE_URL) : date("Y-m-d"));
2=>array('/weblog/archive/2004/Jan/02','linked-day'), $photoFilename = getPhoto($displayDate);
3=>array('/weblog/archive/2004/Jan/03','linked-day'), if ($photoFilename == false) {
8=>array('/weblog/archive/2004/Jan/08','linked-day'), echo "Oops, no photo uploaded for this day<br>";
22=>array('/weblog/archive/2004/Jan/22','linked-day') } else {
); echo '<img alt="Photo for '.$displayDate.'" src="'.$photoFilename.'">';
echo generate_calendar(2004, 1, $days, 3); }
  ?>
  </div> <div class="col2">
  <?php
  include_sidebar();
echo ' </div> echo ' </div>
</div> </div>
</div> '; </div> ';
include_footer(); include_footer();
?> ?>
  /* jquery.imagefit
  *
  * Version 0.2 by Oliver Boermans <http://www.ollicle.com/eg/jquery/imagefit/>
  *
  * Extends jQuery <http://jquery.com>
  *
  */
  (function($) {
  $.fn.imagefit = function(options) {
  var fit = {
  all : function(imgs){
  imgs.each(function(){
  fit.one(this);
  })
  },
  one : function(img){
  $(img)
  .width('100%').each(function()
  {
  $(this).height(Math.round(
  $(this).attr('startheight')*($(this).width()/$(this).attr('startwidth')))
  );
  })
  }
  };
 
  this.each(function(){
  var container = this;
 
  // store list of contained images (excluding those in tables)
  var imgs = $('img', container).not($("table img"));
 
  // store initial dimensions on each image
  imgs.each(function(){
  $(this).attr('startwidth', $(this).width())
  .attr('startheight', $(this).height())
  .css('max-width', $(this).attr('startwidth')+"px");
 
  fit.one(this);
  });
  // Re-adjust when window width is changed
  $(window).bind('resize', function(){
  fit.all(imgs);
  });
  });
  return this;
  };
  })(jQuery);
file:a/readme.txt -> file:b/readme.txt
  Photo Calendar
   
Minimum Requirements Minimum Requirements
PHP4 with gd2 library enabled PHP4 with gd2 library enabled
cache should be writable by webserver, not directory listable Install:
data should not be placed anywhere it is accessable from the web, but writable by webserver Unzip onto a webserver and you're done!
   
  Cache should be writable by webserver, in the web accessable directory, not directory listable
  Data should not be placed anywhere it is accessable from the web, but should still be writable by webserver
   
  Note on SELinux systems, http accessable files must be labeled:
  chcon -v --type=httpd_sys_content_t photoCalendar
  and also read writable folders
  chcon -v --type=httpd_sys_script_rw_t photoCalendar/cache
   
  Bundled Software Licensing/Copyright:
   
  Calendar icon from http://www.pdclipart.org/thumbnails.php?album=29 under Public Domain licence
   
  M+ FONTS Copyright (C) 2002-2011 M+ FONTS PROJECT
  http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/
   
  These fonts are free softwares.
  Unlimited permission is granted to use, copy, and distribute it, with
  or without modification, either commercially and noncommercially.
  THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.
   
   
  HTML5 Boilerplate
   
  This is free and unencumbered software released into the public domain.
   
  Anyone is free to copy, modify, publish, use, compile, sell, or
  distribute this software, either in source code form or as a compiled
  binary, for any purpose, commercial or non-commercial, and by any
  means.
   
  In jurisdictions that recognize copyright laws, the author or authors
  of this software dedicate any and all copyright interest in the
  software to the public domain. We make this dedication for the benefit
  of the public at large and to the detriment of our heirs and
  successors. We intend this dedication to be an overt act of
  relinquishment in perpetuity of all present and future rights to this
  software under copyright law.
   
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  OTHER DEALINGS IN THE SOFTWARE.
   
  For more information, please refer to <http://unlicense.org/>
   
  Major components:
   
  Modernizr: MIT/BSD license
  jQuery: MIT/GPL license
  DD_belatedPNG: MIT license
  YUI Profiling: BSD license
  HTML5Doctor CSS reset: Public Domain
  CSS Reset Reloaded: Public Domain
   
   
  PHP Calendar by Keith Devens
  Open Source License
  This license applies to all original software available from keithdevens.com unless the software is marked otherwise. This license is most like the Artistic License. I wrote this license separately and then discovered that the Artistic license has a similar philosophy.
   
  The code you have is Open Source. You have permission to use or modify the code for your own purposes: commercial, private, or educational. However, the author (me) retains ownership (copyright) over the code - it is not public domain.
   
  The unmodified source may be redistributed with no restrictions, provided that all files in the original distribution are included and unchanged.
   
  The modified source may be redistributed under the following conditions:
   
  Changes to the source must be made available and placed in the public domain or released on the same terms as this license.
  You must clearly state in each modified file what you have changed. This does not preclude a separate "changes" file from being distributed with the source in addition to the comments you make in the source file. So if you want to give just a short description in the source file, and then supply the location of the changes file containing more detail about the changes, you may do that.
  The initial comment header, containing my name, the URL to the homepage for the code, and any other information, must be left intact. You may add other comments below it, of course.
  You may use or redistribute this code within a larger product with no restrictions except those that apply to the source when distributed separately.
   
  Finally, I would appreciate it if you would let me know about any changes you make that you think would be generally useful so I can merge them in with the main source for the benefit of others.
   
  This shouldn't be necessary, but just in case:
  Disclaimer: All code is "use at your own risk". I provide no warranties or guarantees of anything. Though, feel free to e-mail me if you could use some support.
   
file:a/upload.php -> file:b/upload.php
  <?php
  include("common.inc.php");
  include_header("upload");
  ?>
   
  <form name="upload" action="confirmUpload.php" method="POST" ENCTYPE="multipart/form-data">
  Select the file to upload: <input type="file" name="userfile">
  <input type="submit" name="upload" value="upload">
  </form>
   
  <?php
  include_footer();
  ?>