From: maxious Date: Fri, 04 Mar 2011 10:44:17 +0000 Subject: Fix indenting of php files and split includes logically X-Git-Url: https://maxious.lambdacomplex.org/git/?p=busui.git&a=commitdiff&h=1b05a44f3746a2d77d7009eaf7c67e2addbcffab --- Fix indenting of php files and split includes logically --- --- a/about.php +++ b/about.php @@ -1,10 +1,11 @@

Busness Time - An ACT bus timetable webapp
-Based on the maxious-canberra-transit-feed (download, last updated )
+Based on the maxious-canberra-transit-feed (download, last updated )
Source code for the transit feed and this site @ http://maxious.lambdacomplex.org/git
Uses jQuery Mobile, PHP, Ruby, Python, Google Transit Feed Specification tools, OpenTripPlanner, OpenLayers, OpenStreetMap, Cloudmade Geocoder and Tile Service

--- a/aws/awsStartup.sh +++ b/aws/awsStartup.sh @@ -1,7 +1,7 @@ #!/bin/bash #this script should be run from a fresh git checkout from http://maxious.lambdacomplex.org #ami base must have yum install lighttpd-fastcgi, git, tomcat6 -#screen php-cli php-gd tomcat6-webapps tomcat6-admin-webapps +#screen php-cli php-gd tomcat6-webapps tomcat6-admin-webapps svn maven2 #http://www.how2forge.org/installing-lighttpd-with-php5-and-mysql-support-on-fedora-12 cp -rfv /tmp/busui/* /var/www --- /dev/null +++ b/common-geo.inc.php @@ -1,1 +1,146 @@ - + $mapPoint) { + $markers.= $mapPoint[0] . "," . $mapPoint[1] . "," . $markerImage . ($index + 1); + if ($index + 1 != sizeof($mapPoints)) $markers.= "|"; + if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; + if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; + if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1]; + if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1]; + $totalLat+= $mapPoint[0]; + $totalLon+= $mapPoint[1]; + } + if ($zoom == 0) { + $mapwidthinmeters = distance($minlat, $minlon, $minlat, $maxlon); + foreach (array_reverse($metersperpixel, true) as $zoomLevel => $maxdistance) { + if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; + } + } + $center = $totalLat / sizeof($mapPoints) . "," . $totalLon / sizeof($mapPoints); + } + $output = ""; + if ($collapsible) $output.= '

Open Map...

'; + $output.= '
'; + if ($collapsible) $output.= '
'; + return $output; +} +function distance($lat1, $lng1, $lat2, $lng2) +{ + $pi80 = M_PI / 180; + $lat1*= $pi80; + $lng1*= $pi80; + $lat2*= $pi80; + $lng2*= $pi80; + $r = 6372.797; // mean radius of Earth in km + $dlat = $lat2 - $lat1; + $dlng = $lng2 - $lng1; + $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); + $c = 2 * atan2(sqrt($a) , sqrt(1 - $a)); + $km = $r * $c; + return $km * 1000; +} +function decodePolylineToArray($encoded) +{ + // source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 + $length = strlen($encoded); + $index = 0; + $points = array(); + $lat = 0; + $lng = 0; + while ($index < $length) { + // Temporary variable to hold each ASCII byte. + $b = 0; + // The encoded polyline consists of a latitude value followed by a + // longitude value. They should always come in pairs. Read the + // latitude value first. + $shift = 0; + $result = 0; + do { + // The `ord(substr($encoded, $index++))` statement returns the ASCII + // code for the character at $index. Subtract 63 to get the original + // value. (63 was added to ensure proper ASCII characters are displayed + // in the encoded polyline string, which is `human` readable) + $b = ord(substr($encoded, $index++)) - 63; + // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. + // Then left shift the bits by the required amount, which increases + // by 5 bits each time. + // OR the value into $results, which sums up the individual 5-bit chunks + // into the original value. Since the 5-bit chunks were reversed in + // order during encoding, reading them in this way ensures proper + // summation. + $result|= ($b & 0x1f) << $shift; + $shift+= 5; + } + // Continue while the read byte is >= 0x20 since the last `chunk` + // was not OR'd with 0x20 during the conversion process. (Signals the end) + while ($b >= 0x20); + // Check if negative, and convert. (All negative values have the last bit + // set) + $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); + // Compute actual latitude since value is offset from previous value. + $lat+= $dlat; + // The next values will correspond to the longitude for this point. + $shift = 0; + $result = 0; + do { + $b = ord(substr($encoded, $index++)) - 63; + $result|= ($b & 0x1f) << $shift; + $shift+= 5; + } while ($b >= 0x20); + $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); + $lng+= $dlng; + // The actual latitude and longitude values were multiplied by + // 1e5 before encoding so that they could be converted to a 32-bit + // integer representation. (With a decimal accuracy of 5 places) + // Convert back to original values. + $points[] = array( + $lat * 1e-5, + $lng * 1e-5 + ); + } + return $points; +} +function geocode($query, $giveOptions) +{ + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=" . urlencode($query) . "&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; + $contents = json_decode(getPage($url)); + if ($giveOptions) return $contents->features; + elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0] . "," . $contents->features[0]->centroid->coordinates[1]; + else return ""; +} +function reverseGeocode($lat, $lng) +{ + global $cloudmadeAPIkey; + $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=" . $lat . "," . $lng . "&distance=closest&object_type=road"; + $contents = json_decode(getPage($url)); + return $contents->features[0]->properties->name; +} +?> --- /dev/null +++ b/common-net.inc.php @@ -1,1 +1,22 @@ - + Database temporarily unavailable: " . curl_errno($ch) . " " . curl_error($ch) . "
"; + curl_close($ch); + return $page; +} +function curPageURL() +{ + $isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); + $port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); + $port = ($port) ? ':' . $_SERVER["SERVER_PORT"] : ''; + $url = ($isHTTPS ? 'https://' : 'http://') . $_SERVER["SERVER_NAME"] . $port . htmlentities(dirname($_SERVER['PHP_SELF']) , ENT_QUOTES) . "/"; + return $url; +} +?> --- /dev/null +++ b/common-template.inc.php @@ -1,1 +1,150 @@ + + + + ' . $pageTitle . ''; + if (isDebug()) echo ' + + '; + else echo ' + + '; + echo ' + + + + + + + + + '; + if ($geolocate) { + echo " "; + } + echo ' + + '; + if (isMetricsOn()) { + require_once ('owa/owa_env.php'); + require_once (OWA_DIR . 'owa_php.php'); + $owa = new owa_php(); + global $owaSiteID; + $owa->setSiteId($owaSiteID); + $owa->setPageTitle($pageTitle); + $owa->setPageType($pageType); + $owa->trackPageView(); + $owa->placeHelperPageTags(); + } + if ($opendiv) { + echo '
+ +
+

' . $pageTitle . '

+
+
'; + } +} +function include_footer() +{ + if ($geolocate && isset($_SESSION['lat'])) { + echo ""; + } + echo ''; +} +function timePlaceSettings($geolocate = false) +{ + global $service_periods; + $geoerror = false; + if ($geolocate == true) { + $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; + } + if ($geoerror) { + echo '
Sorry, but your location could not currently be detected. + Please allow location permission, wait for your location to be detected, + or enter an address/co-ordinates in the box below.
'; + } + echo '
+

Change Time/Place...

+
+
+
+ + +
+
+ + Current Time? +
+
+ + + +
+ + + +
'; +} +?> --- /dev/null +++ b/common-transit.inc.php @@ -1,1 +1,73 @@ - + 0) { + $midnight = mktime(0, 0, 0, date("n") , date("j") , date("Y")); + return date("h:ia", $midnight + $seconds); + } + else { + return ""; + } +} +function viaPoints($tripid, $stopid, $timingPointsOnly = false) +{ + global $APIurl; + $url = $APIurl . "/json/tripstoptimes?trip=" . $tripid; + $json = json_decode(getPage($url)); + debug(print_r($json, true)); + $stops = $json[0]; + $times = $json[1]; + $foundStop = false; + $viaPoints = Array(); + foreach ($stops as $key => $row) { + if ($foundStop) { + if (!$timingPointsOnly || !startsWith($row[5], "Wj")) { + $viaPoints[] = Array( + "id" => $row[0], + "name" => $row[1], + "time" => $times[$key] + ); + } + } + else { + if ($row[0] == $stopid) $foundStop = true; + } + } + return $viaPoints; +} +function viaPointNames($tripid, $stopid) +{ + $points = viaPoints($tripid, $stopid, true); + $pointNames = Array(); + foreach ($points as $point) { + $pointNames[] = $point['name']; + } + return implode(", ", $pointNames); +} +?> --- a/common.inc.php +++ b/common.inc.php @@ -1,514 +1,143 @@ centroid)) { - $geocoded = true; - $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; - $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; - } - else { - $_SESSION['lat'] = ""; - $_SESSION['lon'] = ""; - } - } - if ($_SESSION['lat'] != "" && isMetricsOn()) { -// Create a new Instance of the tracker -$owa = new owa_php($config); -// Set the ID of the site being tracked -$owa->setSiteId($owaSiteID); -// Create a new event object -$event = $owa->makeEvent(); -// Set the Event Type, in this case a "video_play" -$event->setEventType('geolocate'); -// Set a property -$event->set('lat',$_SESSION['lat']); -$event->set('lon',$_SESSION['lon']); -$event->set('geocoded',$geocoded); -// Track the event -$owa->trackEvent($event); - } - } -debug(print_r($_SESSION,true)); +if (isset($_REQUEST['service_period'])) { + $_SESSION['service_period'] = filter_var($_REQUEST['service_period'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['time'])) { + $_SESSION['time'] = filter_var($_REQUEST['time'], FILTER_SANITIZE_STRING); +} +if (isset($_REQUEST['geolocate'])) { + $geocoded = false; + if (isset($_REQUEST['lat']) && isset($_REQUEST['lon'])) { + $_SESSION['lat'] = filter_var($_REQUEST['lat'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); + $_SESSION['lon'] = filter_var($_REQUEST['lon'], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); + } + else { + $contents = geocode(filter_var($_REQUEST['geolocate'], FILTER_SANITIZE_URL) , true); + if (isset($contents[0]->centroid)) { + $geocoded = true; + $_SESSION['lat'] = $contents[0]->centroid->coordinates[0]; + $_SESSION['lon'] = $contents[0]->centroid->coordinates[1]; + } + else { + $_SESSION['lat'] = ""; + $_SESSION['lon'] = ""; + } + } + if ($_SESSION['lat'] != "" && isMetricsOn()) { + // Create a new Instance of the tracker + $owa = new owa_php($config); + // Set the ID of the site being tracked + $owa->setSiteId($owaSiteID); + // Create a new event object + $event = $owa->makeEvent(); + // Set the Event Type, in this case a "video_play" + $event->setEventType('geolocate'); + // Set a property + $event->set('lat', $_SESSION['lat']); + $event->set('lon', $_SESSION['lon']); + $event->set('geocoded', $geocoded); + // Track the event + $owa->trackEvent($event); + } +} +debug(print_r($_SESSION, true) , "session"); +function isDebugServer() +{ + return $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; +} function isDebug($debugReason = "other") { - global $debugOkay; - return in_array($debugReason,$debugOkay,false) && $_SERVER['SERVER_NAME'] == "10.0.1.154" || $_SERVER['SERVER_NAME'] == "localhost" || $_SERVER['SERVER_NAME'] == "127.0.0.1" || !$_SERVER['SERVER_NAME']; + global $debugOkay; + return in_array($debugReason, $debugOkay, false) && isDebugServer(); } - function isMetricsOn() { - return !isDebug(); + return !isDebugServer(); } - -function debug($msg, $debugReason = "other") { - if (isDebug($debugReason)) echo "\n\n"; +function debug($msg, $debugReason = "other") +{ + if (isDebug($debugReason)) echo "\n\n"; } -function isFastDevice() { - $ua = $_SERVER['HTTP_USER_AGENT']; - $fastDevices = Array("Mozilla/5.0 (X11;", "Mozilla/5.0 (Windows;", "Mozilla/5.0 (iP", "Mozilla/5.0 (Linux; U; Android", "Mozilla/4.0 (compatible; MSIE"); - - $slowDevices = Array("J2ME","MIDP","Opera/","Mozilla/2.0 (compatible;","Mozilla/3.0 (compatible;"); - return true; +function isFastDevice() +{ + $ua = $_SERVER['HTTP_USER_AGENT']; + $fastDevices = Array( + "Mozilla/5.0 (X11;", + "Mozilla/5.0 (Windows;", + "Mozilla/5.0 (iP", + "Mozilla/5.0 (Linux; U; Android", + "Mozilla/4.0 (compatible; MSIE" + ); + $slowDevices = Array( + "J2ME", + "MIDP", + "Opera/", + "Mozilla/2.0 (compatible;", + "Mozilla/3.0 (compatible;" + ); + return true; } - -function include_header($pageTitle, $pageType, $opendiv = true, $geolocate = false) { - echo ' - - - - '.$pageTitle.''; - if (isDebug()) echo ' - - '; - else echo ' - - '; -echo ' - - - - - - - - - '; - if ($geolocate) { -echo " "; - } -echo ' - - '; - if (isMetricsOn()) { - require_once('owa/owa_env.php'); - require_once(OWA_DIR.'owa_php.php'); - $owa = new owa_php(); - global $owaSiteID; - $owa->setSiteId($owaSiteID); - $owa->setPageTitle($pageTitle); - $owa->setPageType($pageType); - $owa->trackPageView(); - $owa->placeHelperPageTags(); - } - -if ($opendiv) { - echo '
- -
-

'.$pageTitle.'

-
-
'; -} -} -function include_footer() -{ - if ($geolocate && isset($_SESSION['lat'])) { - echo ""; - } - echo ''; -} - -$service_periods = Array ('sunday','saturday','weekday'); - -function service_period() -{ -if (isset($_SESSION['service_period'])) return $_SESSION['service_period']; - -switch (date('w')){ - -case 0: - return 'sunday'; -case 6: - return 'saturday'; -default: - return 'weekday'; -} -} - function remove_spaces($string) { - return str_replace(' ','',$string); + return str_replace(' ', '', $string); } - -function midnight_seconds() +function object2array($object) { -// from http://www.perturb.org/display/Perlfunc__Seconds_Since_Midnight.html -if (isset($_SESSION['time'])) { - $time = strtotime($_SESSION['time']); - return (date("G",$time) * 3600) + (date("i",$time) * 60) + date("s",$time); - } - return (date("G") * 3600) + (date("i") * 60) + date("s"); + if (is_object($object)) { + foreach ($object as $key => $value) { + $array[$key] = $value; + } + } + else { + $array = $object; + } + return $array; } - -function midnight_seconds_to_time($seconds) +function startsWith($haystack, $needle, $case = true) { -if ($seconds > 0) { - $midnight = mktime (0, 0, 0, date("n"), date("j"), date("Y")); - return date("h:ia",$midnight+$seconds); -} else { -return ""; + if ($case) { + return (strcmp(substr($haystack, 0, strlen($needle)) , $needle) === 0); + } + return (strcasecmp(substr($haystack, 0, strlen($needle)) , $needle) === 0); } +function endsWith($haystack, $needle, $case = true) +{ + if ($case) { + return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)) , $needle) === 0); + } + return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)) , $needle) === 0); } -function getPage($url) +function bracketsMeanNewLine($input) { - debug($url); - $ch = curl_init($url); -curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); -curl_setopt( $ch, CURLOPT_HEADER, 0 ); - curl_setopt($ch,CURLOPT_TIMEOUT,30); -$page = curl_exec($ch); - if(curl_errno($ch)) echo " Database temporarily unavailable: ".curl_errno($ch)." ".curl_error($ch)."
"; -curl_close($ch); -return $page; + return str_replace(")", "", str_replace("(", "
", $input)); } -function array_flatten($a,$f=array()){ - if(!$a||!is_array($a))return ''; - foreach($a as $k=>$v){ - if(is_array($v))$f=array_flatten($v,$f); - else $f[$k]=$v; - } - return $f; -} - -function curPageURL() { -$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on"); -$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443"))); -$port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : ''; -$url = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.dirname($_SERVER['PHP_SELF'])."/"; -return $url; -} - -function staticmap($mapPoints, $zoom = 0, $markerImage = "iconb", $collapsible = true) -{ -$width = 300; -$height = 300; -$metersperpixel[9]=305.492*$width; -$metersperpixel[10]=152.746*$width; -$metersperpixel[11]=76.373*$width; -$metersperpixel[12]=38.187*$width; -$metersperpixel[13]=19.093*$width; -$metersperpixel[14]=9.547*$width; -$metersperpixel[15]=4.773*$width; -$metersperpixel[16]=2.387*$width; -// $metersperpixel[17]=1.193*$width; -$center = ""; -$markers = ""; -$minlat = 999; -$minlon = 999; -$maxlat = 0; -$maxlon = 0; - - if (sizeof($mapPoints) < 1) return "map error"; - if (sizeof($mapPoints) === 1) { - if ($zoom == 0) $zoom = 14; - $markers .= "{$mapPoints[0][0]},{$mapPoints[0][1]},$markerimage"; - $center = "{$mapPoints[0][0]},{$mapPoints[0][1]}"; - } else { - foreach ($mapPoints as $index => $mapPoint) { - $markers .= $mapPoint[0].",".$mapPoint[1].",".$markerImage.($index+1); - if ($index+1 != sizeof($mapPoints)) $markers .= "|"; - if ($mapPoint[0] < $minlat) $minlat = $mapPoint[0]; - if ($mapPoint[0] > $maxlat) $maxlat = $mapPoint[0]; - if ($mapPoint[1] < $minlon) $minlon = $mapPoint[1]; - if ($mapPoint[1] > $maxlon) $maxlon = $mapPoint[1]; - $totalLat += $mapPoint[0]; - $totalLon += $mapPoint[1]; - } - if ($zoom == 0) { - $mapwidthinmeters = distance($minlat,$minlon,$minlat,$maxlon); - foreach (array_reverse($metersperpixel,true) as $zoomLevel => $maxdistance) - { - if ($zoom == 0 && $mapwidthinmeters < ($maxdistance + 50)) $zoom = $zoomLevel; - } - } - $center = $totalLat/sizeof($mapPoints).",".$totalLon/sizeof($mapPoints); - } - $output = ""; - if ($collapsible) $output .= '

Open Map...

'; - $output .= '
'; - if ($collapsible) $output .= '
'; - return $output; -} - -function distance($lat1, $lng1, $lat2, $lng2) -{ - $pi80 = M_PI / 180; - $lat1 *= $pi80; - $lng1 *= $pi80; - $lat2 *= $pi80; - $lng2 *= $pi80; - - $r = 6372.797; // mean radius of Earth in km - $dlat = $lat2 - $lat1; - $dlng = $lng2 - $lng1; - $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2); - $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); - $km = $r * $c; - - return $km * 1000; -} - -function decodePolylineToArray($encoded) -{ -// source: http://latlongeeks.com/forum/viewtopic.php?f=4&t=5 - $length = strlen($encoded); - $index = 0; - $points = array(); - $lat = 0; - $lng = 0; - - while ($index < $length) - { - // Temporary variable to hold each ASCII byte. - $b = 0; - - // The encoded polyline consists of a latitude value followed by a - // longitude value. They should always come in pairs. Read the - // latitude value first. - $shift = 0; - $result = 0; - do - { - // The `ord(substr($encoded, $index++))` statement returns the ASCII - // code for the character at $index. Subtract 63 to get the original - // value. (63 was added to ensure proper ASCII characters are displayed - // in the encoded polyline string, which is `human` readable) - $b = ord(substr($encoded, $index++)) - 63; - - // AND the bits of the byte with 0x1f to get the original 5-bit `chunk. - // Then left shift the bits by the required amount, which increases - // by 5 bits each time. - // OR the value into $results, which sums up the individual 5-bit chunks - // into the original value. Since the 5-bit chunks were reversed in - // order during encoding, reading them in this way ensures proper - // summation. - $result |= ($b & 0x1f) << $shift; - $shift += 5; - } - // Continue while the read byte is >= 0x20 since the last `chunk` - // was not OR'd with 0x20 during the conversion process. (Signals the end) - while ($b >= 0x20); - - // Check if negative, and convert. (All negative values have the last bit - // set) - $dlat = (($result & 1) ? ~($result >> 1) : ($result >> 1)); - - // Compute actual latitude since value is offset from previous value. - $lat += $dlat; - - // The next values will correspond to the longitude for this point. - $shift = 0; - $result = 0; - do - { - $b = ord(substr($encoded, $index++)) - 63; - $result |= ($b & 0x1f) << $shift; - $shift += 5; - } - while ($b >= 0x20); - - $dlng = (($result & 1) ? ~($result >> 1) : ($result >> 1)); - $lng += $dlng; - - // The actual latitude and longitude values were multiplied by - // 1e5 before encoding so that they could be converted to a 32-bit - // integer representation. (With a decimal accuracy of 5 places) - // Convert back to original values. - $points[] = array($lat * 1e-5, $lng * 1e-5); - } - - return $points; -} - -function object2array($object) { - if (is_object($object)) { - foreach ($object as $key => $value) { - $array[$key] = $value; - } - } - else { - $array = $object; - } - return $array; -} - -function geocode($query, $giveOptions) { - global $cloudmadeAPIkey; - $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?query=".urlencode($query)."&bbox=-35.5,149.00,-35.15,149.1930&return_location=true&bbox_only=true"; - $contents = json_decode(getPage($url)); - if ($giveOptions) return $contents->features; - elseif (isset($contents->features[0]->centroid)) return $contents->features[0]->centroid->coordinates[0].",".$contents->features[0]->centroid->coordinates[1]; - else return ""; -} - -function reverseGeocode($lat,$lng) { - global $cloudmadeAPIkey; - $url = "http://geocoding.cloudmade.com/$cloudmadeAPIkey/geocoding/v2/find.js?around=".$lat.",".$lng."&distance=closest&object_type=road"; - $contents = json_decode(getPage($url)); - return $contents->features[0]->properties->name; -} - -function startsWith($haystack,$needle,$case=true) { - if($case){return (strcmp(substr($haystack, 0, strlen($needle)),$needle)===0);} - return (strcasecmp(substr($haystack, 0, strlen($needle)),$needle)===0); -} - -function endsWith($haystack,$needle,$case=true) { - if($case){return (strcmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0);} - return (strcasecmp(substr($haystack, strlen($haystack) - strlen($needle)),$needle)===0); -} -function bracketsMeanNewLine($input) { - return str_replace(")","
",str_replace("(","
",$input)); -} - -function viaPoints($tripid,$stopid, $timingPointsOnly = false) { - global $APIurl; - $url = $APIurl."/json/tripstoptimes?trip=".$tripid; - -$json = json_decode(getPage($url)); -debug(print_r($json,true)); -$stops = $json[0]; -$times = $json[1]; -$foundStop = false; -$viaPoints = Array(); -foreach ($stops as $key => $row) -{ - if ($foundStop) { - if (!$timingPointsOnly || !startsWith($row[5],"Wj") ) { - $viaPoints[] = Array("id" => $row[0], "name" => $row[1], "time" => $times[$key]); - } - } else { - if ($row[0] == $stopid) $foundStop = true; - } -} - return $viaPoints; -} - -function viaPointNames($tripid,$stopid) { - $points = viaPoints($tripid,$stopid,true); - $pointNames = Array(); - foreach ($points as $point) { - $pointNames[] = $point['name']; - } - return implode(", ",$pointNames); -} - -function timePlaceSettings($geolocate = false) { - global $service_periods; - $geoerror = false; - if ($geolocate == true) { - $geoerror = !isset($_SESSION['lat']) || !isset($_SESSION['lat']) - || $_SESSION['lat'] == "" || $_SESSION['lon'] == ""; - } - if ($geoerror) { - echo '
Sorry, but your location could not currently be detected. - Please allow location permission, wait for your location to be detected, - or enter an address/co-ordinates in the box below.
'; - } - echo '
-

Change Time/Place...

-
-
-
- - -
-
- - Current Time? -
-
- - - -
- - - -
'; -} - - ?> --- a/feedback.php +++ b/feedback.php @@ -1,32 +1,29 @@ verifyEmailAddress($address); -//$con->listVerifiedEmailAddresses(); - -$m = new SimpleEmailServiceMessage(); -$m->addTo($address); -$m->setFrom($address); -$m->setSubject($topic); -$m->setMessageFromString($message); -$con->sendEmail($m); -} else { -// In case any of our lines are larger than 70 characters, we should use wordwrap() -$message = wordwrap($message, 70); - -// Send -mail($address, $topic, $message); +include ('common.inc.php'); +include_header("Feedback", "feedback"); +function sendEmail($topic, $message) +{ + $address = "maxious@lambdacomplex.org"; + if (file_exists("/tmp/aws.php")) { + include_once ('ses.php'); + include_once ("/tmp/aws.php"); + $con = new SimpleEmailService($accessKey, $secretKey); + //$con->verifyEmailAddress($address); + //$con->listVerifiedEmailAddresses(); + $m = new SimpleEmailServiceMessage(); + $m->addTo($address); + $m->setFrom($address); + $m->setSubject($topic); + $m->setMessageFromString($message); + $con->sendEmail($m); + } + else { + // In case any of our lines are larger than 70 characters, we should use wordwrap() + $message = wordwrap($message, 70); + // Send + mail($address, $topic, $message); + } } -} - - ?>

Add/Move/Delete a Bus Stop Location

StopID: --- a/index.php +++ b/index.php @@ -1,13 +1,13 @@ -

busness time


Canberra Bus Timetables and Trip Planner
- Launch Trip Planner... + Launch Trip Planner...
  • Timetables - Stops
  • Major (Timing Point) Stops
  • --- a/layar_api.php +++ b/layar_api.php @@ -1,62 +1,64 @@ $page_start && $stopNum <= $page_end) { - $hotspot = Array(); - $hotspot['id'] = $row[0]; - $hotspot['title'] = $row[1]; - $hotspot['type'] = 0; - $hotspot['lat'] = floor($row[2]*1000000); - $hotspot['lon'] = floor($row[3]*1000000); - $hotspot['distance'] = distance($row[2], $row[3], $_REQUEST['lat'], $_REQUEST['lon']); - if (!isset($_REQUEST['radius']) || $hotspot['distance'] < $radius) { - $hotspot['actions'] = Array(Array("label" => 'View more trips/information', 'uri' => 'http://bus.lambdacomplex.org/'.'stop.php?stopid='.$row[0])); - $url = $APIurl."/json/stoptrips?stop=".$row[0]."&time=".midnight_seconds()."&service_period=".service_period()."&limit=4&time_range=".str(90*60); - $trips = json_decode(getPage($url)); - debug(print_r($trips,true)); - foreach ($trips as $key => $row) - { - if ($key < 3) { - $hotspot['line'.strval($key+2)]= $row[1][1] .' @ ' .midnight_seconds_to_time($row[0]); - } - } - if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; - $output['hotspots'][] = $hotspot; - } - } +foreach ($contents as $row) { + $stopNum++; + if ($stopNum > $page_start && $stopNum <= $page_end) { + $hotspot = Array(); + $hotspot['id'] = $row[0]; + $hotspot['title'] = $row[1]; + $hotspot['type'] = 0; + $hotspot['lat'] = floor($row[2] * 1000000); + $hotspot['lon'] = floor($row[3] * 1000000); + $hotspot['distance'] = distance($row[2], $row[3], $_REQUEST['lat'], $_REQUEST['lon']); + if (!isset($_REQUEST['radius']) || $hotspot['distance'] < $radius) { + $hotspot['actions'] = Array( + Array( + "label" => 'View more trips/information', + 'uri' => 'http://bus.lambdacomplex.org/' . 'stop.php?stopid=' . $row[0] + ) + ); + $url = $APIurl . "/json/stoptrips?stop=" . $row[0] . "&time=" . midnight_seconds() . "&service_period=" . service_period() . "&limit=4&time_range=" . str(90 * 60); + $trips = json_decode(getPage($url)); + debug(print_r($trips, true)); + foreach ($trips as $key => $row) { + if ($key < 3) { + $hotspot['line' . strval($key + 2) ] = $row[1][1] . ' @ ' . midnight_seconds_to_time($row[0]); + } + } + if (sizeof($trips) == 0) $hotspot['line2'] = 'No trips in the near future.'; + $output['hotspots'][] = $hotspot; + } + } } if (sizeof($hotspot) > 0) { - $output['errorString'] = 'ok'; - $output['errorCode'] = 0; - } else { - $output['errorString'] = 'no results, try increasing range'; - $output['errorCode'] = 21; + $output['errorString'] = 'ok'; + $output['errorCode'] = 0; +} +else { + $output['errorString'] = 'no results, try increasing range'; + $output['errorCode'] = 21; } if ($page_end >= $max_results || sizeof($hotspot) < $max_page) { - $output["morePages"] = false; - $output["nextPageKey"] = null; -} else { - $output["morePages"] = true; - $output["nextPageKey"] = $page_end; + $output["morePages"] = false; + $output["nextPageKey"] = null; +} +else { + $output["morePages"] = true; + $output["nextPageKey"] = $page_end; } echo json_encode($output); ?> --- a/routeList.php +++ b/routeList.php @@ -1,7 +1,7 @@
'; echo '
    '; -$url = $APIurl."/json/routes"; +$url = $APIurl . "/json/routes"; $contents = json_decode(getPage($url)); -debug(print_r($contents,true)); - -function printRoutes($routes){ - foreach($routes as $row) { - echo '
  • '.$row[1].' '.$row[2]." (".ucwords($row[3]).")
  • \n"; - } +debug(print_r($contents, true)); +function printRoutes($routes) +{ + foreach ($routes as $row) { + echo '
  • ' . $row[1] . ' ' . $row[2] . " (" . ucwords($row[3]) . ")
  • \n"; + } } - if ($_REQUEST['bynumber']) { $routeSeries = Array(); $seriesRange = Array(); foreach ($contents as $key => $row) { - foreach (explode(" ",$row[1]) as $routeNumber ) { - $seriesNum = substr($routeNumber, 0, -1)."0"; + foreach (explode(" ", $row[1]) as $routeNumber) { + $seriesNum = substr($routeNumber, 0, -1) . "0"; if ($seriesNum == "0") $seriesNum = $routeNumber; - $finalDigit = substr($routeNumber, sizeof($routeNumber)-1, 1); + $finalDigit = substr($routeNumber, sizeof($routeNumber) - 1, 1); if (isset($seriesRange[$seriesNum])) { - if ($finalDigit < $seriesRange[$seriesNum]['max']) - $seriesRange[$seriesNum]['max'] = $routeNumber; - if ($finalDigit > $seriesRange[$seriesNum]['min']) - $seriesRange[$seriesNum]['min'] = $routeNumber; - } else { + if ($finalDigit < $seriesRange[$seriesNum]['max']) $seriesRange[$seriesNum]['max'] = $routeNumber; + if ($finalDigit > $seriesRange[$seriesNum]['min']) $seriesRange[$seriesNum]['min'] = $routeNumber; + } + else { $seriesRange[$seriesNum]['max'] = $routeNumber; $seriesRange[$seriesNum]['min'] = $routeNumber; } - $routeSeries[$seriesNum][$seriesNum."-".$row[1]."-".$row[0]] = $row; + $routeSeries[$seriesNum][$seriesNum . "-" . $row[1] . "-" . $row[0]] = $row; } } ksort($routeSeries); ksort($seriesRange); - echo '
    Go to route numbers: '; - foreach ($seriesRange as $series => $range) - { - if ($range['min'] == $range['max']) echo "$series "; - else echo "{$range['min']}-{$range['max']} "; - } - echo "
    + echo '
    Go to route numbers: '; + foreach ($seriesRange as $series => $range) { + if ($range['min'] == $range['max']) echo "$series "; + else echo "{$range['min']}-{$range['max']} "; + } + echo "
    "; - foreach ($routeSeries as $series => $routes) - { - echo ''; - if ($series <= 9) echo '
  • '.$series."
      \n"; + foreach ($routeSeries as $series => $routes) { + echo ''; + if ($series <= 9) echo '
    • ' . $series . "
        \n"; else echo "
      • {$seriesRange[$series]['min']}-{$seriesRange[$series]['max']}
          \n"; - printRoutes($routes); + printRoutes($routes); echo "
      • \n"; } -} else { +} +else { foreach ($contents as $key => $row) { - $routeDestinations[$row[2]][] = $row; + $routeDestinations[$row[2]][] = $row; } echo '
        Go to Destination: '; - foreach(ksort($routeDestinations) as $destination => $routes) - { - echo "$destination "; - } - echo "
        + foreach (ksort($routeDestinations) as $destination => $routes) { + echo "$destination "; + } + echo "
"; - foreach ($routeDestinations as $destination => $routes) - { - echo ''; - echo '
  • '.$destination."...
      \n"; + foreach ($routeDestinations as $destination => $routes) { + echo ''; + echo '
    • ' . $destination . "...
        \n"; printRoutes($routes); echo "
    • \n"; } } echo "
    \n"; - - include_footer(); ?> --- a/schedule_viewer.py +++ b/schedule_viewer.py @@ -286,7 +286,7 @@ schedule = self.server.schedule route = schedule.GetRoute(params.get('route', None)) return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()] - + def handle_json_GET_routetrips(self, params): """ Get a trip for a route_id (preferablly the next one) """ schedule = self.server.schedule @@ -294,7 +294,12 @@ result = [] for t in schedule.GetTripList(): if t.route_id == query: - result.append ( (t.GetStartTime(), t.trip_id) ) + try: + starttime = t.GetStartTime() + except: + print "Error for GetStartTime of trip #" + t.trip_id + sys.exc_info()[0] + else: + result.append ( (starttime, t.trip_id) ) return sorted(result, key=lambda trip: trip[0]) def handle_json_GET_triprows(self, params): @@ -430,8 +435,8 @@ result = {} for trip in trips: route = schedule.GetRoute(trip.route_id) - if not trip.route_id in result: - result[trip.route_id] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id) + if not trip.route_short_name+route.route_long_name in result: + result[trip.route_short_name+route.route_long_name] = (route.route_id, route.route_short_name, route.route_long_name, trip.trip_id) return result def handle_json_GET_stopalltrips(self, params): --- a/stop.pdf.php +++ b/stop.pdf.php @@ -1,186 +1,196 @@

    '.staticmap(Array(0 => Array($stop[2],$stop[3])), 0,"iconb", false).'

    '; -$html .= '
      '; -$url = $APIurl."/json/stoptrips?stop=".$stopid."&time=".midnight_seconds()."&service_period=".service_period(); +$html.= '"; +$url = $APIurl . "/json/stoptrips?stop=" . $stopid . "&time=" . midnight_seconds() . "&service_period=" . service_period(); $trips = json_decode(getPage($url)); -debug(print_r($trips,true)); -foreach ($trips as $row) +$html.= "


      '; +$url = $APIurl . "/json/stoproutes?stop=" . $stopid . "&time=" . midnight_seconds() . "&service_period=" . service_period(); +$routes = json_decode(getPage($url)); +foreach ($routes as $route) { + $html.= '
      ' . $route[1] . ' - ' . $route[2] . ''; + $viaPoints = viaPointNames($route[3], $stopid); + if ($viaPoints != "") $html.= '
      Via: ' . $viaPoints . ''; + $html.= "
      "; +} +$html.= '
      ' . staticmap(Array( + 0 => Array( + $stop[2], + $stop[3] + ) +) , 0, "iconb", false) . "


      "; +$html.= ""; +debug(print_r($trips, true)); +foreach ($trips as $row) { + $html.= '"; + $html.= ''; + $html.= ''; +} +$html.= '
      RouteTime
      ' . $row[1][1] . "' . midnight_seconds_to_time($row[0]) . '
      '; +if (sizeof($trips) == 0) $html.= "
      No trips in the near future.
      "; +require_once ('tcpdf/config/lang/eng.php'); +require_once ('tcpdf/tcpdf.php'); +// create new PDF document +class Custom_TCPDF extends TCPDF { -$html .= '
    • '; -$html .= '

      '.$row[1][1]; -if (isFastDevice()) { - $viaPoints = viaPointNames($row[1][0],$stopid); - if ($viaPoints != "") $html .= '
      Via: '.$viaPoints.'

      '; -} -$html .= '

      '.midnight_seconds_to_time($row[0]).'

      '; -$html .= '
    • '; -} -if (sizeof($trips) == 0) $html .= "
    • No trips in the near future.
    • "; -$html .= '
  • '; -require_once('tcpdf/config/lang/eng.php'); -require_once('tcpdf/tcpdf.php'); - -// create new PDF document -class Custom_TCPDF extends TCPDF { - var $QRCodeURL; - - function set_QRCodeURL ($url) { - $this->QRCodeURL = $url; - } - -/** - * This method is used to render the page header. - * It is automatically called by AddPage() and could be overwritten in your own inherited class. - * @public - */ - public function Header() { - if ($this->header_xobjid < 0) { - // start a new XObject Template - $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin+10); - $headerfont = $this->getHeaderFont(); - $headerdata = $this->getHeaderData(); - $this->y = $this->header_margin; - if ($this->rtl) { - $this->x = $this->w - $this->original_rMargin; - } else { - $this->x = $this->original_lMargin-10; - } + var $QRCodeURL; + function set_QRCodeURL($url) + { + $this->QRCodeURL = $url; + } + /** + * This method is used to render the page header. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @public + */ + public function Header() + { + if ($this->header_xobjid < 0) { + // start a new XObject Template + $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin + 10); + $headerfont = $this->getHeaderFont(); + $headerdata = $this->getHeaderData(); + $this->y = $this->header_margin; + if ($this->rtl) { + $this->x = $this->w - $this->original_rMargin; + } + else { + $this->x = $this->original_lMargin - 10; + } if (isset($this->QRCodeURL)) { -// QRCODE,H : QR-CODE Best error correction -$style = array( - 'border' => 1, - 'padding' => 0, - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points -); -$this->write2DBarcode($this->QRCodeURL, 'QRCODE,H', '', '', 25, 25, $style, 'T'); -$imgy = 50+20; - } elseif (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { - $imgtype = $this->getImageFileType(K_PATH_IMAGES.$headerdata['logo']); - if (($imgtype == 'eps') OR ($imgtype == 'ai')) { - $this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } elseif ($imgtype == 'svg') { - $this->ImageSVG(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } else { - $this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } - $imgy = $this->getImageRBY(); - } else { - $imgy = $this->y; - } - $cell_height = round(($this->cell_height_ratio * $headerfont[2]) / $this->k, 2); - // set starting margin for text data cell - if ($this->getRTL()) { - $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1); - } else { - $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1); - } - $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1); - $this->SetTextColor(0, 0, 0); - // header title - $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1); - $this->SetX($header_x); - $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); - // header string - $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); - $this->SetX($header_x); - $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false); - // print an ending header line - //$this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); - //$this->SetY((2.835 / $this->k) + max($imgy, $this->y)); - if ($this->rtl) { - $this->SetX($this->original_rMargin); - } else { - $this->SetX($this->original_lMargin); - } - //$this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); - $this->endTemplate(); - } - // print header template - $x = 0; - $dx = 0; - if ($this->booklet AND (($this->page % 2) == 0)) { - // adjust margins for booklet mode - $dx = ($this->original_lMargin - $this->original_rMargin); - } - if ($this->rtl) { - $x = $this->w + $dx; - } else { - $x = 0 + $dx; - } - $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); - } - - + // QRCODE,H : QR-CODE Best error correction + $style = array( + 'border' => 1, + 'padding' => 0, + 'fgcolor' => array( + 0, + 0, + 0 + ) , + 'bgcolor' => false, //array(255,255,255) + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 + // height of a single module in points + + ); + $this->write2DBarcode($this->QRCodeURL, 'QRCODE,H', '', '', 25, 25, $style, 'T'); + $imgy = 50 + 20; + } + elseif (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { + $imgtype = $this->getImageFileType(K_PATH_IMAGES . $headerdata['logo']); + if (($imgtype == 'eps') OR ($imgtype == 'ai')) { + $this->ImageEps(K_PATH_IMAGES . $headerdata['logo'], '', '', $headerdata['logo_width']); + } + elseif ($imgtype == 'svg') { + $this->ImageSVG(K_PATH_IMAGES . $headerdata['logo'], '', '', $headerdata['logo_width']); + } + else { + $this->Image(K_PATH_IMAGES . $headerdata['logo'], '', '', $headerdata['logo_width']); + } + $imgy = $this->getImageRBY(); + } + else { + $imgy = $this->y; + } + $cell_height = round(($this->cell_height_ratio * $headerfont[2]) / $this->k, 2); + // set starting margin for text data cell + if ($this->getRTL()) { + $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1); + } + else { + $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1); + } + $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1); + $this->SetTextColor(0, 0, 0); + // header title + $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1); + $this->SetX($header_x); + $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); + // header string + $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]); + $this->SetX($header_x); + $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false); + // print an ending header line + //$this->SetLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); + //$this->SetY((2.835 / $this->k) + max($imgy, $this->y)); + if ($this->rtl) { + $this->SetX($this->original_rMargin); + } + else { + $this->SetX($this->original_lMargin); + } + //$this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); + $this->endTemplate(); + } + // print header template + $x = 0; + $dx = 0; + if ($this->booklet AND (($this->page % 2) == 0)) { + // adjust margins for booklet mode + $dx = ($this->original_lMargin - $this->original_rMargin); + } + if ($this->rtl) { + $x = $this->w + $dx; + } + else { + $x = 0 + $dx; + } + $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); + } } $pdf = new Custom_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - // set document information $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('bus.lambdacomplex.org'); $pdf->SetTitle($stop[1]); - // set default header data $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $stop[1] . " Timetable", "Some description of customization like Weekdays, 9am-10am"); -$pdf->set_QRCodeURL(curPageURL()."stop.php?stopid=".$_REQUEST['stopid']); - +$pdf->set_QRCodeURL(curPageURL() . "stop.php?stopid=" . $_REQUEST['stopid']); // set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - +$pdf->setHeaderFont(Array( + PDF_FONT_NAME_MAIN, + '', + PDF_FONT_SIZE_MAIN +)); +$pdf->setFooterFont(Array( + PDF_FONT_NAME_DATA, + '', + PDF_FONT_SIZE_DATA +)); // set default monospaced font $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - //set margins $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - //set auto page breaks $pdf->SetAutoPageBreak(TRU