render('layout.php', array_merge($data, array('page' => $page))); }; function partial($template, $data=array(), $debug=false) { global $app; if($debug) { $tpl = new Savant3(\Slim\Extras\Views\Savant::$savantOptions); echo '
' . $tpl->fetch($template . '.php') . '
'; return ''; } ob_start(); $tpl = new Savant3(\Slim\Extras\Views\Savant::$savantOptions); foreach($data as $k=>$v) { $tpl->{$k} = $v; } $tpl->display($template . '.php'); return ob_get_clean(); } function session($key) { if(array_key_exists($key, $_SESSION)) return $_SESSION[$key]; else return null; } function k($a, $k, $default=null) { if(is_array($k)) { $result = true; foreach($k as $key) { $result = $result && array_key_exists($key, $a); } return $result; } else { if(is_array($a) && array_key_exists($k, $a) && $a[$k]) return $a[$k]; elseif(is_object($a) && property_exists($a, $k) && $a->$k) return $a->$k; else return $default; } } function get_timezone($lat, $lng) { try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://timezone-api.geoloqi.com/timezone/'.$lat.'/'.$lng); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $tz = @json_decode($response); if($tz) return new DateTimeZone($tz->timezone); } catch(Exception $e) { return null; } return null; } function micropub_post($endpoint, $params, $access_token) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $endpoint); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token )); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array_merge(array( 'h' => 'entry' ), $params))); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); $response = curl_exec($ch); $error = curl_error($ch); return array( 'response' => $response, 'error' => $error, 'curlinfo' => curl_getinfo($ch) ); } function static_map($latitude, $longitude, $height=180, $width=700, $zoom=14) { return 'http://static-maps.pdx.esri.com/img.php?marker[]=lat:' . $latitude . ';lng:' . $longitude . ';icon:small-blue-cutout&basemap=gray&width=' . $width . '&height=' . $height . '&zoom=' . $zoom; } function relative_time($date) { static $rel; if(!isset($rel)) { $config = array( 'language' => '\RelativeTime\Languages\English', 'separator' => ', ', 'suffix' => true, 'truncate' => 1, ); $rel = new \RelativeTime\RelativeTime($config); } return $rel->timeAgo($date); }