<?php if (!defined('PmWiki')) exit(); /** A thumbnail gallery generator for PmWiki Written by (c) Petko Yotov 2006-2007 This script is POSTCARDWARE, if you like it or use it, please send me a postcard. Details at http://www.pmwiki.org/Profiles/Petko This text is written for PmWiki; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. See pmwiki.php for full details and lack of warranty. Copyright 2007 Petko Yotov http://5ko.fr Copyright 2004-2006 Patrick R. Michaud http://pmwiki.org */ # Version date $RecipeInfo['TimeZones']['Version'] = '2007-10-28d'; SDV($HandleActions['tz'],'HandleSetTZ'); SDV($ActionTitleFmt['tz'],'| $[Select timezone]'); SDV($TzCookieDays, 30); SDV($TzStoreFmt, '%Y%m%dT%H%M%SZ'); $FmtPV['$LastModifiedStamp'] = '$page["time"]'; $FmtPV['$LastModified'] = 'stamp2markup($page["time"])'; $FmtPV['$CurrentTime'] = 'stamp2markup(time())'; $FmtPV['$TimeZonesVersion'] = "'TimeZones_{$RecipeInfo['TimeZones']['Version']}'"; Markup('datetimeutc', 'block', '/\\(:(\\d{8}T\\d{6}(?:Z|[+-]\\d{4}|)|@\\d+):\\)/e', "FmtDateTime(\$pagename,'$1')"); Markup('tzform', 'inline', '/\\(:tzform:\\)/ei', "FmtTZform(\$pagename)"); function FmtTZform($pagename) { global $Now, $HTMLHeaderFmt, $TimeFmt; $time = gmstrftime('%H:%M', $Now); $localtime = (@$_COOKIE['tz_offset']>'')? gmstrftime('%H:%M', $Now+60*$_COOKIE['tz_offset']) : $time; $fmt = IsEnabled($_COOKIE['FMT'], $TimeFmt); $HTMLHeaderFmt['timezone']=<<<EOF <script type='text/javascript'> <!-- // Timezone code borrowed from MediaWiki // in [-]HH:MM format... function fetchTimezone() { // FIXME: work around Safari bug var localclock = new Date(); // returns negative offset from GMT in minutes var tzRaw = localclock.getTimezoneOffset(); var tzHour = Math.floor( Math.abs(tzRaw) / 60); var tzMin = Math.abs(tzRaw) % 60; var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour + ":" + ((tzMin < 10) ? "0" : "") + tzMin; return tzString; } function guessTimeoffset() { document.timeoffset.offset.value = fetchTimezone(); } //--></script> EOF; $wiki = <<<EOF <form name='timeoffset' action='{\$ScriptUrl}' method='post'> <input type='hidden' name='action' value='tz' /> <input type='hidden' name='n' value='{\$FullName}' /> <p> $[Current UTC time is]: $time.<br/> $[Your local time is]: $localtime.<br/> $[Offset] ([-]HH:MM): <input type='text' name='offset' value='$offset' size='10'/> <input type='button' value='$[Guess from browser]' onclick='guessTimeoffset();'/><br/> $[Time format]: <input type='text' name='tzFmt' size='30' value='$fmt'/> (<a href='http://php.net/strftime' class='ext'>help</a>) <br/> <input type='submit' name='save' value='$[Save]'/> <input type='submit' name='reset' value='$[Revert to defaults]'/> </p></form> EOF; return Keep(FmtPageName($wiki, $pagename)); } function stamp2markup($t) { global $TzStoreFmt; $func=preg_match("/[^%]Z$/", $TzStoreFmt)? 'gmstrftime':'strftime'; return "(:".$func($TzStoreFmt,$t).":)"; } function FmtDateTime($pagename, $stamp) { global $TimeFmt; $fmt = IsEnabled($_COOKIE['FMT'], $TimeFmt); $time = strtotime($stamp); $func='strftime'; if(@$_COOKIE['tz_offset']>'') { $time+=60*$_COOKIE['tz_offset']; $func='gmstrftime'; } return "<span title='(:$stamp:)'>". $func($fmt, $time) . "</span>"; } function HandleSetTZ($pagename) { global $HTMLStartFmt,$HTMLEndFmt,$TimeFmt, $TzCookieDays; $offset = @$_POST["offset"]; $tzFMT = IsEnabled($_POST["tzFmt"], @$_COOKIE["FMT"]); if(IsEnabled($_POST["save"], 0)) { if(preg_match("/^(\\+|-|)(\\d\\d):(\\d\\d)$/", $offset, $m)) { $minutes = $m[2]*60+$m[3]; if($m[1]=='-')$minutes = (-1)*$minutes; setcookie('tz_offset', $minutes, strtotime("+$TzCookieDays days"), '/'); } if($tzFMT>'') setcookie('FMT', $tzFMT, strtotime("+$TzCookieDays days"), '/'); Redirect($pagename); } elseif(IsEnabled($_POST["reset"], 0)) { setcookie('tz_offset', '0', -1, '/'); if($tzFMT>'') setcookie('FMT', $TimeFmt, -1, '/'); Redirect($pagename); } else { $wiki = MarkupToHTML($pagename, '(:tzform:)'); PrintFmt($pagename,$HTMLStartFmt); echo $wiki; PrintFmt($pagename,$HTMLEndFmt); } }