Beispiel #1
0
$table[1][2] = -765;
function findValue($table, $v)
{
    for ($row = 0; $row <= 1; ++$row) {
        for ($colm = 0; $colm <= 2; ++$colm) {
            if ($table[$row][$colm] == $v) {
                echo "{$v} was found at row {$row}, column {$colm}\n";
                goto done;
                // not quite the same as break 2!
            }
        }
    }
    echo "{$v} was not found\n";
    done:
    // note that a label must always precede a statement
}
findValue($table, 123);
findValue($table, -23);
/*
// Try to jump into a while loop (which is inside a for loop); disallowed

goto label1;
for($i = 1; $j = 20, $i <= 10; $i++)
{
        while($j--)
        {
label1:
                ;
        }
}
*/
Beispiel #2
0
function handle_WP_GPX_Maps_Shortcodes($attr, $content = '')
{
    $error = '';
    $gpx = findValue($attr, "gpx", "", "");
    $w = findValue($attr, "width", "wpgpxmaps_width", "100%");
    $mh = findValue($attr, "mheight", "wpgpxmaps_height", "450px");
    $mt = findValue($attr, "mtype", "wpgpxmaps_map_type", "HYBRID");
    $gh = findValue($attr, "gheight", "wpgpxmaps_graph_height", "200px");
    $showCad = findValue($attr, "showcad", "wpgpxmaps_show_cadence", false);
    $showHr = findValue($attr, "showhr", "wpgpxmaps_show_hr", false);
    $showAtemp = findValue($attr, "showatemp", "wpgpxmaps_show_atemp", false);
    $showW = findValue($attr, "waypoints", "wpgpxmaps_show_waypoint", false);
    $showEle = findValue($attr, "showele", "wpgpxmaps_show_elevation", "true");
    $showSpeed = findValue($attr, "showspeed", "wpgpxmaps_show_speed", false);
    $showGrade = findValue($attr, "showgrade", "wpgpxmaps_show_grade", false);
    $zoomOnScrollWheel = findValue($attr, "zoomonscrollwheel", "wpgpxmaps_zoomonscrollwheel", false);
    $donotreducegpx = findValue($attr, "donotreducegpx", "wpgpxmaps_donotreducegpx", false);
    $pointsoffset = findValue($attr, "pointsoffset", "wpgpxmaps_pointsoffset", 10);
    $uom = findValue($attr, "uom", "wpgpxmaps_unit_of_measure", "0");
    $uomspeed = findValue($attr, "uomspeed", "wpgpxmaps_unit_of_measure_speed", "0");
    $color_map = findValue($attr, "mlinecolor", "wpgpxmaps_map_line_color", "#3366cc");
    $color_graph = findValue($attr, "glinecolor", "wpgpxmaps_graph_line_color", "#3366cc");
    $color_graph_speed = findValue($attr, "glinecolorspeed", "wpgpxmaps_graph_line_color_speed", "#ff0000");
    $color_graph_hr = findValue($attr, "glinecolorhr", "wpgpxmaps_graph_line_color_hr", "#ff77bd");
    $color_graph_atemp = findValue($attr, "glinecoloratemp", "wpgpxmaps_graph_line_color_atemp", "#ff77bd");
    $color_graph_cad = findValue($attr, "glinecolorcad", "wpgpxmaps_graph_line_color_cad", "#beecff");
    $color_graph_grade = findValue($attr, "glinecolorgrade", "wpgpxmaps_graph_line_color_grade", "#beecff");
    $chartFrom1 = findValue($attr, "chartfrom1", "wpgpxmaps_graph_offset_from1", "");
    $chartTo1 = findValue($attr, "chartto1", "wpgpxmaps_graph_offset_to1", "");
    $chartFrom2 = findValue($attr, "chartfrom2", "wpgpxmaps_graph_offset_from2", "");
    $chartTo2 = findValue($attr, "chartto2", "wpgpxmaps_graph_offset_to2", "");
    $startIcon = findValue($attr, "starticon", "wpgpxmaps_map_start_icon", "");
    $endIcon = findValue($attr, "endicon", "wpgpxmaps_map_end_icon", "");
    $currentIcon = findValue($attr, "currenticon", "wpgpxmaps_map_current_icon", "");
    $waypointIcon = findValue($attr, "waypointicon", "wpgpxmaps_map_waypoint_icon", "");
    $ngGalleries = findValue($attr, "nggalleries", "wpgpxmaps_map_ngGalleries", "");
    $ngImages = findValue($attr, "ngimages", "wpgpxmaps_map_ngImages", "");
    // folgende Zeile hinzugefügt:
    $attachments = findValue($attr, "attachments", "wpgpxmaps_map_attachments", false);
    $download = findValue($attr, "download", "wpgpxmaps_download", "");
    $dtoffset = findValue($attr, "dtoffset", "wpgpxmaps_dtoffset", 0);
    $distanceType = findValue($attr, "distanceType", "wpgpxmaps_distance_type", 0);
    $skipcache = findValue($attr, "skipcache", "wpgpxmaps_skipcache", "");
    $summary = findValue($attr, "summary", "wpgpxmaps_summary", "");
    $p_tot_len = findValue($attr, "summarytotlen", "wpgpxmaps_summary_tot_len", false);
    $p_max_ele = findValue($attr, "summarymaxele", "wpgpxmaps_summary_max_ele", false);
    $p_min_ele = findValue($attr, "summaryminele", "wpgpxmaps_summary_min_ele", false);
    $p_total_ele_up = findValue($attr, "summaryeleup", "wpgpxmaps_summary_total_ele_up", false);
    $p_total_ele_down = findValue($attr, "summaryeledown", "wpgpxmaps_summary_total_ele_down", false);
    $p_avg_speed = findValue($attr, "summaryavgspeed", "wpgpxmaps_summary_avg_speed", false);
    $p_total_time = findValue($attr, "summarytotaltime", "wpgpxmaps_summary_total_time", false);
    $usegpsposition = findValue($attr, "usegpsposition", "wpgpxmaps_usegpsposition", false);
    $currentpositioncon = findValue($attr, "currentpositioncon", "wpgpxmaps_currentpositioncon", "");
    $colors_map = "\"" . implode("\",\"", explode(" ", $color_map)) . "\"";
    $gpxurl = $gpx;
    // Add file modification time to cache filename to catch new uploads with same file name
    $mtime = sitePath() . str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, trim($gpx));
    if (file_exists($mtime)) {
        $mtime = filemtime($mtime);
    } else {
        $mtime = 0;
    }
    $cacheFileName = "{$gpx},{$mtime},{$w},{$mh},{$mt},{$gh},{$showEle},{$showW},{$showHr},{$showAtemp},{$showCad},{$donotreducegpx},{$pointsoffset},{$showSpeed},{$showGrade},{$uomspeed},{$uom},{$distanceType},v1.3.9";
    $cacheFileName = md5($cacheFileName);
    $gpxcache = gpxCacheFolderPath();
    if (!(file_exists($gpxcache) && is_dir($gpxcache))) {
        @mkdir($gpxcache, 0755, true);
    }
    $gpxcache .= DIRECTORY_SEPARATOR . $cacheFileName . ".tmp";
    // Try to load cache
    if (file_exists($gpxcache) && !($skipcache == true)) {
        try {
            $cache_str = file_get_contents($gpxcache);
            $cache_obj = unserialize($cache_str);
            $points_maps = $cache_obj["points_maps"];
            $points_x_time = $cache_obj["points_x_time"];
            $points_x_lat = $cache_obj["points_x_lat"];
            $points_x_lon = $cache_obj["points_x_lon"];
            $points_graph_dist = $cache_obj["points_graph_dist"];
            $points_graph_ele = $cache_obj["points_graph_ele"];
            $points_graph_speed = $cache_obj["points_graph_speed"];
            $points_graph_hr = $cache_obj["points_graph_hr"];
            $points_graph_atemp = $cache_obj["points_graph_atemp"];
            $points_graph_cad = $cache_obj["points_graph_cad"];
            $points_graph_grade = $cache_obj["points_graph_grade"];
            $waypoints = $cache_obj["waypoints"];
            $max_ele = $cache_obj["max_ele"];
            $min_ele = $cache_obj["min_ele"];
            $max_time = $cache_obj["max_time"];
            $min_time = $cache_obj["min_time"];
            $total_ele_up = $cache_obj["total_ele_up"];
            $total_ele_down = $cache_obj["total_ele_down"];
            $avg_speed = $cache_obj["avg_speed"];
            $tot_len = $cache_obj["tot_len"];
        } catch (Exception $e) {
            $points_maps = '';
            $points_x_time = '';
            $points_x_lat = '';
            $points_x_lon = '';
            $points_graph_dist = '';
            $points_graph_ele = '';
            $points_graph_speed = '';
            $points_graph_hr = '';
            $points_graph_atemp = '';
            $points_graph_cad = '';
            $points_graph_grade = '';
            $waypoints = '';
            $max_ele = 0;
            $min_ele = 0;
            $max_time = 0;
            $min_time = 0;
            $total_ele_up = 0;
            $total_ele_down = 0;
            $avg_speed = 0;
            $tot_len = 0;
        }
    }
    $isGpxUrl = preg_match('/^(http(s)?\\:\\/\\/)/', trim($gpx)) == 1;
    if ((!isset($points_maps) || $points_maps == '') && $gpx != '') {
        //if (true)	{
        $sitePath = sitePath();
        $gpx = trim($gpx);
        if ($isGpxUrl == true) {
            $gpx = downloadRemoteFile($gpx);
        } else {
            $gpx = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $gpx);
            $gpx = $sitePath . $gpx;
        }
        if ($gpx == '') {
            return "No gpx found";
        }
        $points = getPoints($gpx, $pointsoffset, $donotreducegpx, $distanceType);
        $points_maps = '';
        $points_graph_dist = '';
        $points_graph_ele = '';
        $points_graph_speed = '';
        $points_graph_hr = '';
        $points_graph_atemp = '';
        $points_graph_cad = '';
        $points_graph_grade = '';
        $waypoints = '';
        $points_x_time = $points->dt;
        $points_x_lat = $points->lat;
        $points_x_lon = $points->lon;
        $max_ele = $points->maxEle;
        $min_ele = $points->minEle;
        $max_time = $points->maxTime;
        $min_time = $points->minTime;
        $total_ele_up = $points->totalEleUp;
        $total_ele_down = $points->totalEleDown;
        $avg_speed = $points->avgSpeed;
        $tot_len = $points->totalLength;
        if (is_array($points_x_lat)) {
            foreach (array_keys($points_x_lat) as $i) {
                $_lat = (double) $points_x_lat[$i];
                $_lon = (double) $points_x_lon[$i];
                if ($_lat == 0 && $_lon == 0) {
                    $points_maps .= 'null,';
                    $points_graph_dist .= 'null,';
                    $points_graph_ele .= 'null,';
                    if ($showSpeed == true) {
                        $points_graph_speed .= 'null,';
                    }
                    if ($showHr == true) {
                        $points_graph_hr .= 'null,';
                    }
                    if ($showAtemp == true) {
                        $points_graph_atemp .= 'null,';
                    }
                    if ($showCad == true) {
                        $points_graph_cad .= 'null,';
                    }
                    if ($showGrade == true) {
                        $points_graph_grade .= 'null,';
                    }
                } else {
                    $points_maps .= '[' . number_format((double) $points_x_lat[$i], 7, '.', '') . ',' . number_format((double) $points_x_lon[$i], 7, '.', '') . '],';
                    $_ele = (double) $points->ele[$i];
                    $_dist = (double) $points->dist[$i];
                    if ($uom == '1') {
                        // Miles and feet
                        $_dist *= 0.000621371192;
                        $_ele *= 3.2808399;
                    } else {
                        if ($uom == '2') {
                            // meters / kilometers
                            $_dist = (double) ($_dist / 1000);
                        } else {
                            if ($uom == '3') {
                                // meters / kilometers / nautical miles
                                $_dist = (double) ($_dist / 1000 / 1.852);
                            } else {
                                if ($uom == '4') {
                                    // meters / miles
                                    $_dist *= 0.000621371192;
                                } else {
                                    if ($uom == '5') {
                                        // meters / kilometers / nautical miles and feet
                                        $_dist = (double) ($_dist / 1000 / 1.852);
                                        $_ele *= 3.2808399;
                                    }
                                }
                            }
                        }
                    }
                    $points_graph_dist .= number_format($_dist, 2, '.', '') . ',';
                    $points_graph_ele .= number_format($_ele, 2, '.', '') . ',';
                    if ($showSpeed == true) {
                        $_speed = (double) $points->speed[$i];
                        $points_graph_speed .= convertSpeed($_speed, $uomspeed) . ',';
                    }
                    if ($showHr == true) {
                        $points_graph_hr .= number_format($points->hr[$i], 2, '.', '') . ',';
                    }
                    if ($showAtemp == true) {
                        $points_graph_atemp .= number_format($points->atemp[$i], 1, '.', '') . ',';
                    }
                    if ($showCad == true) {
                        $points_graph_cad .= number_format($points->cad[$i], 2, '.', '') . ',';
                    }
                    if ($showGrade == true) {
                        $points_graph_grade .= number_format($points->grade[$i], 2, '.', '') . ',';
                    }
                }
            }
        }
        if ($uom == '1') {
            // Miles and feet
            $tot_len = round($tot_len * 0.000621371192, 2) . " mi";
            $max_ele = round($max_ele * 3.2808399, 0) . " ft";
            $min_ele = round($min_ele * 3.2808399, 0) . " ft";
            $total_ele_up = round($total_ele_up * 3.2808399, 0) . " ft";
            $total_ele_down = round($total_ele_down * 3.2808399, 0) . " ft";
        } else {
            if ($uom == '2') {
                // meters / kilometers
                $tot_len = round($tot_len / 1000, 2) . " km";
                $max_ele = round($max_ele, 0) . " m";
                $min_ele = round($min_ele, 0) . " m";
                $total_ele_up = round($total_ele_up, 0) . " m";
                $total_ele_down = round($total_ele_down, 0) . " m";
            } else {
                if ($uom == '3') {
                    // meters / kilometers / nautical miles
                    $tot_len = round($tot_len / 1000 / 1.852, 2) . " NM";
                    $max_ele = round($max_ele, 0) . " m";
                    $min_ele = round($min_ele, 0) . " m";
                    $total_ele_up = round($total_ele_up, 0) . " m";
                    $total_ele_down = round($total_ele_down, 0) . " m";
                } else {
                    if ($uom == '4') {
                        // meters / kilometers / nautical miles
                        $tot_len = round($tot_len * 0.000621371192, 2) . " mi";
                        $max_ele = round($max_ele, 0) . " m";
                        $min_ele = round($min_ele, 0) . " m";
                        $total_ele_up = round($total_ele_up, 0) . " m";
                        $total_ele_down = round($total_ele_down, 0) . " m";
                    } else {
                        if ($uom == '5') {
                            // meters / kilometers / nautical miles and feet
                            $tot_len = round($tot_len / 1000 / 1.852, 2) . " NM";
                            $max_ele = round($max_ele * 3.2808399, 0) . " ft";
                            $min_ele = round($min_ele * 3.2808399, 0) . " ft";
                            $total_ele_up = round($total_ele_up * 3.2808399, 0) . " ft";
                            $total_ele_down = round($total_ele_down * 3.2808399, 0) . " ft";
                        } else {
                            // meters / meters
                            $tot_len = round($tot_len, 0) . " m";
                            $max_ele = round($max_ele, 0) . " m";
                            $min_ele = round($min_ele, 0) . " m";
                            $total_ele_up = round($total_ele_up, 0) . " m";
                            $total_ele_down = round($total_ele_down, 0) . " m";
                        }
                    }
                }
            }
        }
        $avg_speed = convertSpeed($avg_speed, $uomspeed, true);
        $waypoints = '[]';
        if ($showW == true) {
            $wpoints = getWayPoints($gpx);
            /*
            foreach ($wpoints as $p) {
            	$waypoints .= '['.number_format ( (float)$p[0] , 7 , '.' , '' ).','.number_format ( (float)$p[1] , 7 , '.' , '' ).',\''.unescape($p[4]).'\',\''.unescape($p[5]).'\',\''.unescape($p[7]).'\'],';
            }
            */
            $waypoints = json_encode($wpoints);
        }
        if ($showEle == "false") {
            $points_graph_ele = "";
        }
        $p = "/(,|,null,)\$/";
        $points_maps = preg_replace($p, "", $points_maps);
        $points_graph_dist = preg_replace($p, "", $points_graph_dist);
        $points_graph_ele = preg_replace($p, "", $points_graph_ele);
        $points_graph_speed = preg_replace($p, "", $points_graph_speed);
        $points_graph_hr = preg_replace($p, "", $points_graph_hr);
        $points_graph_atemp = preg_replace($p, "", $points_graph_atemp);
        $points_graph_cad = preg_replace($p, "", $points_graph_cad);
        $points_graph_grade = preg_replace($p, "", $points_graph_grade);
        $waypoints = preg_replace($p, "", $waypoints);
        if (preg_match("/^(0,?)+\$/", $points_graph_dist)) {
            $points_graph_dist = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_ele)) {
            $points_graph_ele = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_speed)) {
            $points_graph_speed = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_hr)) {
            $points_graph_hr = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_hr)) {
            $points_graph_hr = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_atemp)) {
            $points_graph_atemp = "";
        }
        if (preg_match("/^(0,?)+\$/", $points_graph_grade)) {
            $points_graph_grade = "";
        }
    }
    $ngimgs_data = '';
    if ($ngGalleries != '' || $ngImages != '') {
        //print_r($points);
        $ngimgs = getNGGalleryImages($ngGalleries, $ngImages, $points_x_time, $points_x_lat, $points_x_lon, $dtoffset, $error);
        $ngimgs_data = '';
        foreach ($ngimgs as $img) {
            $data = $img['data'];
            $data = str_replace("\n", "", $data);
            $ngimgs_data .= '<span lat="' . $img['lat'] . '" lon="' . $img['lon'] . '">' . $data . '</span>';
        }
    }
    // Folgende Zeilen hinzugefügt
    if ($attachments == true) {
        $attimgs = getAttachedImages($points_x_time, $points_x_lat, $points_x_lon, $dtoffset, $error);
        foreach ($attimgs as $img) {
            $data = $img['data'];
            $data = str_replace("\n", "", $data);
            $ngimgs_data .= '<span lat="' . $img['lat'] . '" lon="' . $img['lon'] . '">' . $data . '</span>';
        }
    }
    if (!($skipcache == true)) {
        @file_put_contents($gpxcache, serialize(array("points_maps" => $points_maps, "points_x_time" => $points_x_time, "points_x_lat" => $points_x_lat, "points_x_lon" => $points_x_lon, "points_graph_dist" => $points_graph_dist, "points_graph_ele" => $points_graph_ele, "points_graph_speed" => $points_graph_speed, "points_graph_hr" => $points_graph_hr, "points_graph_atemp" => $points_graph_atemp, "points_graph_cad" => $points_graph_cad, "points_graph_grade" => $points_graph_grade, "waypoints" => $waypoints, "max_ele" => $max_ele, "min_ele" => $min_ele, "total_ele_up" => $total_ele_up, "total_ele_down" => $total_ele_down, "avg_speed" => $avg_speed, "tot_len" => $tot_len, "max_time" => $max_time, "min_time" => $min_time)), LOCK_EX);
        @chmod($gpxcache, 0755);
    }
    $hideGraph = $gh == "0" || $gh == "0px";
    global $post;
    $r = $post->ID . "_" . rand(1, 5000000);
    $output = '
		<div id="wpgpxmaps_' . $r . '" class="wpgpxmaps">
			<div id="map_' . $r . '_cont" style="width:' . $w . '; height:' . $mh . ';position:relative" >
				<div id="map_' . $r . '" style="width:' . $w . '; height:' . $mh . '"></div>
				<div id="wpgpxmaps_' . $r . '_osm_footer" class="wpgpxmaps_osm_footer" style="display:none;"><span> &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors</span></div>			
			</div>
			<div id="hchart_' . $r . '" class="plot" style="width:' . $w . '; height:' . $gh . '"></div>
			<div id="ngimages_' . $r . '" class="ngimages" style="display:none">' . $ngimgs_data . '</div>
			<div id="report_' . $r . '" class="report"></div>
		</div>
		' . $error . '
		<script type="text/javascript">
			jQuery(document).ready(function() {
				jQuery("#wpgpxmaps_' . $r . '").wpgpxmaps({ 
					targetId    : "' . $r . '",
					mapType     : "' . $mt . '",
					mapData     : [' . $points_maps . '],
					graphDist   : [' . ($hideGraph ? '' : $points_graph_dist) . '],
					graphEle    : [' . ($hideGraph ? '' : $points_graph_ele) . '],
					graphSpeed  : [' . ($hideGraph ? '' : $points_graph_speed) . '],
					graphHr     : [' . ($hideGraph ? '' : $points_graph_hr) . '],
					graphAtemp  : [' . ($hideGraph ? '' : $points_graph_atemp) . '],
					graphCad    : [' . ($hideGraph ? '' : $points_graph_cad) . '],
					graphGrade  : [' . ($hideGraph ? '' : $points_graph_grade) . '],
					waypoints   : ' . $waypoints . ',
					unit        : "' . $uom . '",
					unitspeed   : "' . $uomspeed . '",
					color1      : [' . $colors_map . '],
					color2      : "' . $color_graph . '",
					color3      : "' . $color_graph_speed . '",
					color4      : "' . $color_graph_hr . '",
					color5      : "' . $color_graph_cad . '",
					color6      : "' . $color_graph_grade . '",
					color7      : "' . $color_graph_atemp . '",
					chartFrom1  : "' . $chartFrom1 . '",
					chartTo1    : "' . $chartTo1 . '",
					chartFrom2  : "' . $chartFrom2 . '",
					chartTo2    : "' . $chartTo2 . '",
					startIcon   : "' . $startIcon . '",
					endIcon     : "' . $endIcon . '",
					currentIcon : "' . $currentIcon . '",
					waypointIcon : "' . $waypointIcon . '",
					currentpositioncon : "' . $currentpositioncon . '",
					usegpsposition : "' . $usegpsposition . '",
					zoomOnScrollWheel : "' . $zoomOnScrollWheel . '", 
					ngGalleries : [' . $ngGalleries . '],
					ngImages : [' . $ngImages . '],
					pluginUrl : "' . plugins_url() . '",
					langs : { altitude              : "' . __("Altitude", "wp-gpx-maps") . '",
							  currentPosition       : "' . __("Current Position", "wp-gpx-maps") . '",
							  speed                 : "' . __("Speed", "wp-gpx-maps") . '", 
							  grade                 : "' . __("Grade", "wp-gpx-maps") . '", 
							  heartRate             : "' . __("Heart rate", "wp-gpx-maps") . '", 
							  atemp             	: "' . __("Temperature", "wp-gpx-maps") . '", 
							  cadence               : "' . __("Cadence", "wp-gpx-maps") . '",
							  goFullScreen          : "' . __("Go Full Screen", "wp-gpx-maps") . '",
							  exitFullFcreen        : "' . __("Exit Full Screen", "wp-gpx-maps") . '",
							  hideImages            : "' . __("Hide Images", "wp-gpx-maps") . '",
							  showImages            : "' . __("Show Images", "wp-gpx-maps") . '",
							  backToCenter		    : "' . __("Back to center", "wp-gpx-maps") . '"
							}
				});
			});
		</script>';
    // print summary
    if ($summary == 'true' && ($points_graph_speed != '' || $points_graph_ele != '' || $points_graph_dist != '')) {
        $output .= "<div id='wpgpxmaps_summary_" . $r . "' class='wpgpxmaps_summary'>";
        if ($points_graph_dist != '' && $p_tot_len == 'true') {
            $output .= "<span class='totlen'><span class='summarylabel'>" . __("Total distance", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$tot_len}</span></span><br />";
        }
        if ($points_graph_ele != '') {
            if ($p_max_ele == 'true') {
                $output .= "<span class='maxele'><span class='summarylabel'>" . __("Max elevation", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$max_ele}</span></span><br />";
            }
            if ($p_min_ele == 'true') {
                $output .= "<span class='minele'><span class='summarylabel'>" . __("Min elevation", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$min_ele}</span></span><br />";
            }
            if ($p_total_ele_up == 'true') {
                $output .= "<span class='totaleleup'><span class='summarylabel'>" . __("Total climbing", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$total_ele_up}</span></span><br />";
            }
            if ($p_total_ele_down == 'true') {
                $output .= "<span class='totaleledown'><span class='summarylabel'>" . __("Total descent", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$total_ele_down}</span></span><br />";
            }
        }
        if ($points_graph_speed != '' && $p_avg_speed == 'true') {
            $output .= "<span class='avgspeed'><span class='summarylabel'>" . __("Average speed", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$avg_speed}</span></span><br />";
        }
        if ($p_total_time == 'true' && $max_time > 0) {
            $time_diff = date("H:i:s", $max_time - $min_time);
            $output .= "<span class='totaltime'><span class='summarylabel'>" . __("Total Time", "wp-gpx-maps") . ":</span><span class='summaryvalue'> {$time_diff}</span></span><br />";
        }
        $output .= "</div>";
    }
    // print download link
    if ($download == 'true' && $gpxurl != '') {
        if ($isGpxUrl == true) {
        } else {
            // wpml fix
            $dummy = defined('WP_SITEURL') ? WP_SITEURL : get_bloginfo('url');
            $gpxurl = $dummy . $gpxurl;
        }
        $output .= "<a href='{$gpxurl}' target='_new'>" . __("Download", "wp-gpx-maps") . "</a>";
    }
    return $output;
}
    }
}
// Wind Speed & Direction
$x = findValue("yweather:wind", "speed", $xml);
if ($x) {
    $output .= "   " . $x . "mph" . windToCompass(findValue("yweather:wind", "direction", $xml));
}
// Today's sunset
$x = findValue("yweather:astronomy", "sunset", $xml);
if ($x) {
    $output .= "\nSunset: " . $x . "\n";
}
// Forecast
$x = findValue("yweather:forecast", "day", $xml);
if ($x) {
    $output .= "\n" . $x . ": " . findValue("yweather:forecast", "high", $xml) . "° " . findValue("yweather:forecast", "text", $xml);
}
if (strlen(trim($output))) {
    echo $output . "\n";
}
/// FUNCTIONS
function findValue($delimeter, $attrib, $xml)
{
    $val = "";
    $xml = split("\n", $xml);
    foreach ($xml as $line) {
        if (strpos($line, $delimeter) !== FALSE) {
            $val = $line;
            break;
        }
    }