Cache listing generated from Opencaching.de This is a waypoint file generated from Opencaching.de{wpchildren} Opencaching.de contact@opencaching.de http://www.opencaching.de Opencaching.de - Geocaching in Deutschland, Oesterreich und der Schweiz cache, geocache, opencaching, waypoint '; $gpxLine = ' {waypoint} {cachename} www.opencaching.de ' . $absolute_server_URI . 'viewcache.php?cacheid={cacheid} {cachename} {sym} Geocache|{type} {cachename} {owner} {owner} {type} {container} {attributes} {difficulty} {terrain} {country} {state} {shortdesc} {desc}<br />{images} {hints} {logs} {geokrety} {cache_waypoints}'; /* Ocprop: * * '; $gpxTimeFormat = 'Y-m-d\TH:i:s\Z'; $gpxStatus[0] = 'available="False" archived="False"'; // other (unavailable, not archived) $gpxStatus[1] = 'available="True" archived="False"'; //available, not archived $gpxStatus[2] = 'available="False" archived="False"'; //unavailable, not archived $gpxStatus[3] = 'available="False" archived="True"'; //unavailable, archived $gpxStatus[6] = 'available="False" archived="True"'; //locked, visible $gpxContainer[0] = 'Other'; $gpxContainer[2] = 'Micro'; $gpxContainer[3] = 'Small'; $gpxContainer[4] = 'Regular'; $gpxContainer[5] = 'Large'; $gpxContainer[6] = 'Large'; $gpxContainer[7] = 'Virtual'; $gpxContainer[8] = 'Micro'; // cache types known by gpx $gpxType[0] = 'Unknown Cache'; $gpxType[2] = 'Traditional Cache'; $gpxType[3] = 'Multi-cache'; $gpxType[4] = 'Virtual Cache'; $gpxType[5] = 'Webcam Cache'; $gpxType[6] = 'Event Cache'; // unknown ... converted $gpxType[7] = 'Unknown Cache'; $gpxType[8] = 'Unknown Cache'; $gpxType[10] = 'Traditional Cache'; $gpxLogType[0] = 'Other'; $gpxLogType[1] = 'Found it'; $gpxLogType[2] = 'Didn\'t find it'; $gpxLogType[3] = 'Write note'; $gpxLogType[7] = 'Attended'; $gpxLogType[8] = 'Will attend'; $gpxLogType[9] = 'Archive'; $gpxLogType[10] = 'Owner Maintenance'; $gpxLogType[11] = 'Temporarily Disable Listing'; $gpxLogType[13] = 'Archive'; $gpxLogType[14] = 'Archive'; $gpxSymNormal = 'Geocache'; $gpxSymFound = 'Geocache Found'; $childwphandler = new ChildWp_Handler(); $children=''; $rs = sql('SELECT `searchtmp`.`cache_id` `cacheid` FROM `searchtmp`'); while ($r = sql_fetch_array($rs)) if (count($childwphandler->getChildWps($r['cacheid']))) $children=" (HasChildren)"; mysql_free_result($rs); $gpxHead = mb_ereg_replace('{wpchildren}', $children, $gpxHead); $gpxHead = mb_ereg_replace('{time}', date($gpxTimeFormat, time()), $gpxHead); append_output($gpxHead); if ($usr === false) $user_id = 0; else $user_id = $usr['userid']; $rs = sql_slave("SELECT SQL_BUFFER_RESULT `searchtmp`.`cache_id` `cacheid`, `searchtmp`.`longitude` `longitude`, `searchtmp`.`latitude` `latitude`, `cache_location`.`adm2` `state`, `caches`.`wp_oc` `waypoint`, `caches`.`date_hidden` `date_hidden`, `caches`.`name` `name`, `caches`.`country` `country`, `countries`.`name` AS `country_name`, `caches`.`terrain` `terrain`, `caches`.`difficulty` `difficulty`, `caches`.`desc_languages` `desc_languages`, `caches`.`size` `size`, `caches`.`type` `type`, `caches`.`status` `status`, `user`.`username` `username`, `caches`.`user_id` `userid`, `user`.`data_license`, `cache_desc`.`desc` `desc`, `cache_desc`.`short_desc` `short_desc`, `cache_desc`.`hint` `hint`, IFNULL(`stat_cache_logs`.`found`, 0) AS `found` FROM `searchtmp` INNER JOIN `caches` ON `searchtmp`.`cache_id`=`caches`.`cache_id` INNER JOIN `countries` ON `caches`.`country`=`countries`.`short` INNER JOIN `user` ON `searchtmp`.`user_id`=`user`.`user_id` INNER JOIN `cache_desc` ON `caches`.`cache_id`=`cache_desc`.`cache_id`AND `caches`.`default_desclang`=`cache_desc`.`language` LEFT JOIN `cache_location` ON `searchtmp`.`cache_id`=`cache_location`.`cache_id` LEFT JOIN `stat_cache_logs` ON `searchtmp`.`cache_id`=`stat_cache_logs`.`cache_id` AND `stat_cache_logs`.`user_id`='&1'", $user_id); while ($r = sql_fetch_array($rs)) { $thisline = $gpxLine; $lat = sprintf('%01.5f', $r['latitude']); $thisline = mb_ereg_replace('{lat}', $lat, $thisline); $lon = sprintf('%01.5f', $r['longitude']); $thisline = mb_ereg_replace('{lon}', $lon, $thisline); $time = date($gpxTimeFormat, strtotime($r['date_hidden'])); $thisline = mb_ereg_replace('{time}', $time, $thisline); $thisline = mb_ereg_replace('{waypoint}', $r['waypoint'], $thisline); $thisline = mb_ereg_replace('{cacheid}', $r['cacheid'], $thisline); $thisline = mb_ereg_replace('{cachename}', xmlentities($r['name']), $thisline); $thisline = mb_ereg_replace('{country}', $r['country_name'], $thisline); $thisline = mb_ereg_replace('{state}', xmlentities($r['state']), $thisline); if ($r['hint'] == '') $thisline = mb_ereg_replace('{hints}', '', $thisline); else // Ocprop: (.*?)<\/groundspeak:encoded_hints> $hint = html_entity_decode(strip_tags($r['hint']), ENT_COMPAT, "UTF-8"); $thisline = mb_ereg_replace('{hints}', ' ' . xmlentities($hint) . ' ', $thisline); $thisline = mb_ereg_replace('{shortdesc}', xmlentities($r['short_desc']), $thisline); $desc = str_replace(' 0) $thisline = mb_ereg_replace('{sym}', xmlentities($gpxSymFound), $thisline); else $thisline = mb_ereg_replace('{sym}', xmlentities($gpxSymNormal), $thisline); // clear cache specific data $logentries = ''; $cache_note = false; $attribentries = ''; $waypoints = ''; $gkentries = ''; // fetch logs if ($user_id != 0) { // insert personal note $cacheNote = getCacheNote($user_id, $r['cacheid']); if ($cacheNote) { $thislog = $gpxLog; $thislog = mb_ereg_replace('{id}', 0, $thislog); $thislog = mb_ereg_replace('{date}', date($gpxTimeFormat), $thislog); $thislog = mb_ereg_replace('{userid}', $user_id, $thislog); $thislog = mb_ereg_replace('{username}', xmlentities($login->username), $thislog); $thislog = mb_ereg_replace('{type}', $gpxLogType[3], $thislog); $thislog = mb_ereg_replace('{text}', xmlentities($cacheNote['note']), $thislog); $logentries .= $thislog . "\n"; } // current users logs $rsLogs = sql_slave("SELECT `cache_logs`.`id`, `cache_logs`.`type`, `cache_logs`.`date`, `cache_logs`.`text`, `user`.`username`, `user`.`user_id` FROM `cache_logs`, `user` WHERE `cache_logs`.`user_id`=`user`.`user_id` AND `cache_logs`.`cache_id`=&1 AND `user`.`user_id`=&2 ORDER BY `cache_logs`.`date` DESC", $r['cacheid'], $user_id); while ($rLog = sql_fetch_array($rsLogs)) { $thislog = $gpxLog; $thislog = mb_ereg_replace('{id}', $rLog['id'], $thislog); $thislog = mb_ereg_replace('{date}', date($gpxTimeFormat, strtotime($rLog['date'])), $thislog); $thislog = mb_ereg_replace('{userid}', xmlentities($rLog['user_id']), $thislog); $thislog = mb_ereg_replace('{username}', xmlentities($rLog['username']), $thislog); if (isset($gpxLogType[$rLog['type']])) $logtype = $gpxLogType[$rLog['type']]; else $logtype = $gpxLogType[0]; $thislog = mb_ereg_replace('{type}', $logtype, $thislog); $thislog = mb_ereg_replace('{text}', xmlentities(decodeEntities($rLog['text'])), $thislog); $logentries .= $thislog . "\n"; } mysql_free_result($rsLogs); } // newest 20 logs (except current users) $rsLogs = sql_slave("SELECT `cache_logs`.`id`, `cache_logs`.`type`, `cache_logs`.`date`, `cache_logs`.`text`, `user`.`username`, `user`.`user_id` FROM `cache_logs`, `user` WHERE `cache_logs`.`user_id`=`user`.`user_id` AND `cache_logs`.`cache_id`=&1 AND `user`.`user_id`!=&2 ORDER BY `cache_logs`.`date` DESC LIMIT 20", $r['cacheid'], $user_id); while ($rLog = sql_fetch_array($rsLogs)) { $thislog = $gpxLog; $thislog = mb_ereg_replace('{id}', $rLog['id'], $thislog); $thislog = mb_ereg_replace('{date}', date($gpxTimeFormat, strtotime($rLog['date'])), $thislog); $thislog = mb_ereg_replace('{userid}', xmlentities($rLog['user_id']), $thislog); $thislog = mb_ereg_replace('{username}', xmlentities($rLog['username']), $thislog); if (isset($gpxLogType[$rLog['type']])) $logtype = $gpxLogType[$rLog['type']]; else $logtype = $gpxLogType[0]; $thislog = mb_ereg_replace('{type}', $logtype, $thislog); $thislog = mb_ereg_replace('{text}', xmlentities(decodeEntities($rLog['text'])), $thislog); $logentries .= $thislog . "\n"; } mysql_free_result($rsLogs); $thisline = mb_ereg_replace('{logs}', $logentries, $thisline); // attributes $rsAttributes = sql_slave("SELECT `gc_id`, `gc_inc`, `gc_name` FROM `caches_attributes` INNER JOIN `cache_attrib` ON `cache_attrib`.`id`=`caches_attributes`.`attrib_id` WHERE `caches_attributes`.`cache_id`=&1", $r['cacheid']); $gc_ids = array(); while ($rAttrib = sql_fetch_array($rsAttributes)) { // Multiple OC attributes can be mapped to one GC attribute, either with // the same "inc"s or with different. Both may disturb applications, so we // output each GC ID only once. if (!isset($gc_ids[$rAttrib['gc_id']])) { $thisattribute = mb_ereg_replace('{attrib_id}', $rAttrib['gc_id'], $gpxAttributes); $thisattribute = mb_ereg_replace('{attrib_inc}', $rAttrib['gc_inc'], $thisattribute); $thisattribute = mb_ereg_replace('{attrib_name}', xmlentities($rAttrib['gc_name']), $thisattribute); $attribentries .= $thisattribute . "\n"; $gc_ids[$rAttrib['gc_id']] = true; } } mysql_free_result($rsAttributes); $thisline = mb_ereg_replace('{attributes}', $attribentries, $thisline); // geokrety $rsGeokrety = sql_slave("SELECT `gk_item`.`id`, `gk_item`.`name`, `caches`.`wp_oc` FROM `gk_item` INNER JOIN `gk_item_waypoint` ON `gk_item`.`id`=`gk_item_waypoint`.`id` INNER JOIN `caches` ON `gk_item_waypoint`.`wp`=`caches`.`wp_oc` WHERE `caches`.`cache_id`=&1", $r['cacheid']); while ($rGK = sql_fetch_array($rsGeokrety)) { $thiskrety = $gpxGeokrety; $thiskrety = mb_ereg_replace('{gkid}', $rGK['id'], $thiskrety); $thiskrety = mb_ereg_replace('{gkref}', sprintf("GK%04X",$rGK['id']), $thiskrety); $thiskrety = mb_ereg_replace('{gkname}', xmlentities($rGK['name']), $thiskrety); $gkentries .= $thiskrety . "\n"; } mysql_free_result($rsGeokrety); $thisline = mb_ereg_replace('{geokrety}', $gkentries, $thisline); // additional waypoints, including personal cache note $childWaypoints = $childwphandler->getChildWps($r['cacheid']); $n = 1; $digits = "%0" . strlen(count($childWaypoints)) . "d"; foreach ($childWaypoints as $childWaypoint) { $thiswp = $gpxWaypoints; $thiswp = mb_ereg_replace('{wp_lat}', sprintf('%01.5f', $childWaypoint['latitude']), $thiswp); $thiswp = mb_ereg_replace('{wp_lon}', sprintf('%01.5f', $childWaypoint['longitude']), $thiswp); $thiswp = mb_ereg_replace('{time}', $time, $thiswp); $thiswp = mb_ereg_replace('{name}', $r['waypoint'].'-'.sprintf($digits,$n) , $thiswp); $thiswp = mb_ereg_replace('{cachename}', xmlentities($r['name']), $thiswp); $thiswp = mb_ereg_replace('{comment}',xmlentities($childWaypoint['description']), $thiswp); $thiswp = mb_ereg_replace('{desc}', xmlentities($childWaypoint['name']), $thiswp); switch ($childWaypoint['type']) { case 1: $wp_typename = "Parking Area"; break; // well-known garmin symbols case 2: $wp_typename = "Flag, Green"; break; // stage / ref point case 3: $wp_typename = "Flag, Blue"; break; // path case 4: $wp_typename = "Circle with X"; break; // final case 5: $wp_typename = "Diamond, Green"; break; // point of interest default: $wp_typename = "Flag, Blue"; break; // for the case new types are forgotten here .. } $thiswp = mb_ereg_replace('{type}', $wp_typename, $thiswp); $thiswp = mb_ereg_replace('{parent}', $r['waypoint'], $thiswp); $thiswp = mb_ereg_replace('{cacheid}', $r['cacheid'], $thiswp); $waypoints .= $thiswp; ++$n; } if ($cacheNote && !empty($cacheNote['latitude']) && !empty($cacheNote['longitude'])) { $thiswp = $gpxWaypoints; $thiswp = mb_ereg_replace('{wp_lat}', sprintf('%01.5f', $cacheNote['latitude']), $thiswp); $thiswp = mb_ereg_replace('{wp_lon}', sprintf('%01.5f', $cacheNote['longitude']), $thiswp); $thiswp = mb_ereg_replace('{time}', $time, $thiswp); $thiswp = mb_ereg_replace('{name}', $r['waypoint'].'NOTE', $thiswp); $thiswp = mb_ereg_replace('{cachename}', xmlentities($r['name']), $thiswp); $thiswp = mb_ereg_replace('{comment}', xmlentities($cacheNote['note']), $thiswp); $thiswp = mb_ereg_replace('{desc}', $cache_note_text, $thiswp); $thiswp = mb_ereg_replace('{type}', "Reference Point", $thiswp); $thiswp = mb_ereg_replace('{parent}', $r['waypoint'], $thiswp); $thiswp = mb_ereg_replace('{cacheid}', $r['cacheid'], $thiswp); $waypoints .= $thiswp; } $thisline = mb_ereg_replace('{cache_waypoints}', $waypoints, $thisline); append_output($thisline); } mysql_free_result($rs); append_output($gpxFoot); } function decodeEntities($str) { $str = changePlaceholder($str); $str = html_entity_decode($str, ENT_COMPAT, "UTF-8"); $str = changePlaceholder($str, true); return $str; } function changePlaceholder($str, $inverse = false) { static $translate = array( '<' => '{oc-placeholder-lt}', '>' => '{oc-placeholder-gt}', '&' => '{oc-placeholder-amp}' ); foreach ($translate as $entity => $placeholder) { if (!$inverse) { $str = mb_ereg_replace($entity, $placeholder, $str); } else { $str = mb_ereg_replace($placeholder, $entity, $str); } } return $str; } function xmlentities($str) { $str = htmlspecialchars($str, ENT_NOQUOTES, "UTF-8"); return filterevilchars($str); } function filterevilchars($str) { return mb_ereg_replace('[\\x00-\\x09|\\x0B-\\x0C|\\x0E-\\x1F]', '', $str); } function getCacheNote($userid, $cacheid) { $cacheNoteHandler = new CacheNote_Handler(); $cacheNote = $cacheNoteHandler->getCacheNote($userid, $cacheid); if (isset($cacheNote['note']) || isset($cacheNote['latitude']) || isset($cacheNote['longitude'])) return $cacheNote; return null; } // based on oc.pl code, but embedded thumbs instead of full pictures // (also to hide spoilers first) function getPictures($cacheid) { global $translate, $absolute_server_URI; $retval = ""; $rs = sql_slave("SELECT uuid, title, url, spoiler FROM pictures WHERE object_id='&1' AND object_type=2 AND display=1 ORDER BY date_created", $cacheid); while ($r = sql_fetch_array($rs)) { $retval .= '
' . '' . '
' . $r['title']; if ($r['spoiler']) $retval .= ' (' . $translate->t('click on spoiler to display','',basename(__FILE__), __LINE__) . ')'; $retval .= "
"; } mysql_free_result($rs); return $retval; } ?>