<?php
// Copyright (c) 2012, Björn Victor <Bjorn@Victor.se>
// I used to use webcal://ical.oops.se/weeks/Sweden/-1%2C%2B1, but it went away so I reimplemented it.

require_once($_SERVER['DOCUMENT_ROOT']."/../php/init.php");
require_once(
"htlang.php");    // check preferred language
$lang htlang();

$page_title = ($lang == 'sv' 'Veckonummer' 'Week numbers');

function 
make_ical_weeks($year) {
  
// cf http://stackoverflow.com/questions/186431/calculating-days-of-week-given-a-week-number
  
for ($wk 1$wk 54$wk++) {
    
$wkstart strtotime($year."-W".($wk 10 "0":"").$wk);
    
$date getdate($wkstart);
    if (
$date['year'] == $year)
      
make_ical_week($wk,$wkstart);
  }
}

function 
make_ical_week($wk,$start) {
  
// SEQUENCE? DTSTAMP?
  
global $lang;
  print 
"BEGIN:VEVENT\nSUMMARY:".($lang=='sv' "Vecka" "Week").$wk\nDTSTART;VALUE=DATE:".strftime("%Y%m%d",$start)
    .
"\nDTEND;VALUE=DATE:".strftime("%Y%m%d",$start+7*24*60*60)
    .
"\nUID:".$start."@".$lang        // required
    
."\nTRANSP:TRANSPARENT"    // not blocking
    //    ."\nFREEBYSY;FBTYPE=FREE"        // not busy
    
."\nEND:VEVENT\n";
}

function 
make_ical_header($from,$to) {
  print 
"BEGIN:VCALENDAR\nMETHOD:PUBLISH\nVERSION:2.0\nCALSCALE:GREGORIAN\n";
}
function 
make_ical_trailer() {
  print 
"END:VCALENDAR\n";
}

function 
make_http_headers($from,$to) {
  
header("Content-Type: text/calendar; name=\"veckonummer-$from-$to.ics\"");
  
header("Content-Disposition: inline; filename=\"veckonummer-$from-$to.ics\"");
  
header("Content-Description: Veckonummer mellan $from och $to");
}

$lang htlang();

$fromarg $_GET['from'];
$toarg $_GET['to'];

$now getdate(time());
$thisyear $now['year'];

$from 0$to 0;

if (
is_numeric($fromarg))
  
$from = (int)$fromarg;
if (
is_numeric($toarg))
  
$to = (int)$toarg;

if (
$from or (($from or $to != 0) and $from 10))
  
$from $thisyear+$from;
if (
$to or (($to or $from != 0) and $to 10))
  
$to $thisyear+$to;

if (
$from != and $to != 0) {
  
make_http_headers($from,$to);
  
make_ical_header($from,$to);
  for (
$year $from$year <= $to$year++)
    
make_ical_weeks($year);
  
make_ical_trailer();
  exit;
 }

include(
"header.php");
?>
<body>
<h1><?php echo $page_title?></h1>
<p>
Skapar ett iCal-fl&ouml;de med veckonummer f&ouml;r valda &aring;r. Om Fr&aring;n/Till &auml;r negativt eller mindre &auml;n 10 tolkas det relativt nuvarande &aring;r.
<ul><li>Exempel: ange "0" och "2" som intervall - resultatet &auml;r helgdagar fr&aring;n &aring;r nu+0 till nu+2.</li>
</ul>
</p>

<form action="" method="GET">
<input type="hidden" name="lang" value="<?php echo $lang ?>">
  <label for="frombox">Fr&aring;n:</label>
<input type="text" size="6" id="frombox" name="from" value="<?php echo $fromarg ?>">
  <label for="tobox">Till:</label>
<input type="text" size="6" id="tobox" name="to" value="<?php echo $toarg ?>">
<input type="submit" value="Skapa iCal-fl&ouml;de">
</form>

<p>
Se också <a href="holidays.php">en sida för att beräkna helgdagar och flaggdagar</a>.
</p>
<p>
<?php
$rq 
strpos($_SERVER['REQUEST_URI'],'?') === false $_SERVER['REQUEST_URI'] : substr($_SERVER['REQUEST_URI'],0,strpos($_SERVER['REQUEST_URI'],'?'));
$src basename($rq,".php")."-source.php";

if (
$lang == 'sv')
  echo 
"(Du kan titta p&aring; <a href='".$src."'>k&auml;llkoden</a> om du vill se hur ber&auml;kningarna g&aring;r till.)";
else
  echo 
"(You can have a look at the <a href='".$src."'>source code</a> if you want to see how the calculations are done.)";

include(
"footer.php");
?>
</body>
</html>