Błąd

Nie podano ID aktywności.

'; return; } $table_activities = $wpdb->prefix . 'statpress_activities'; $table_categories = $wpdb->prefix . 'statpress_categories'; $table_event_types = $wpdb->prefix . 'statpress_event_types'; $table_equipment = $wpdb->prefix . 'statpress_equipment'; $sql = $wpdb->prepare( " SELECT a.*, c.name as category_name, c.icon, c.color, et.name as event_type_name, eq.name as equipment_name FROM $table_activities a LEFT JOIN $table_categories c ON a.category_id = c.id LEFT JOIN $table_event_types et ON a.event_type_id = et.id LEFT JOIN $table_equipment eq ON a.equipment_id = eq.id WHERE a.id = %d ", $activity_id ); $activity = $wpdb->get_row( $sql ); if ( ! $activity ) { echo '

Błąd

Nie znaleziono aktywności o podanym ID.

'; return; } // Funkcja pomocnicza do wyświetlania wiersza, jeśli wartość istnieje $render_row = function( $label, $value, $unit = '' ) { if ( ! is_null( $value ) && '' !== $value ) { echo ''; echo '' . esc_html( $label ) . ''; echo '' . esc_html( $value ) . ( $unit ? ' ' . esc_html( $unit ) : '' ) . ''; echo ''; } }; // Prepare map and chart data if GPX exists $gpx_data = array(); $has_gpx_data = false; if ( ! empty( $activity->gpx_url ) ) { $gpx_data = statpress_parse_gpx_data( $activity->gpx_url ); $has_gpx_data = ! empty( $gpx_data['points'] ); } if ( $has_gpx_data ) { wp_enqueue_style( 'leaflet-css', 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css' ); wp_enqueue_script( 'leaflet-js', 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js', array(), '1.9.4', true ); wp_enqueue_script( 'chart-js', 'https://cdn.jsdelivr.net/npm/chart.js', array(), null, true ); wp_register_script( 'statpress-details-loader', false ); wp_enqueue_script( 'statpress-details-loader' ); // Check which profiles have data $available_profiles = array(); if ( ! empty( array_filter( $gpx_data['profiles']['elevation'] ) ) ) { $available_profiles['elevation'] = 'Wysokość';} if ( ! empty( array_filter( $gpx_data['profiles']['speed'] ) ) ) { $available_profiles['speed'] = 'Prędkość';} if ( ! empty( array_filter( $gpx_data['profiles']['hr'] ) ) ) { $available_profiles['hr'] = 'Tętno';} if ( ! empty( array_filter( $gpx_data['profiles']['cadence'] ) ) ) { $available_profiles['cadence'] = 'Kadencja';} $has_time_data = ! empty( array_filter( $gpx_data['profiles']['time'], fn( $t ) => ! is_null( $t ) ) ); $chart_js = ' const track_points = ' . json_encode( $gpx_data['points'] ) . '; const profiles = ' . json_encode( $gpx_data['profiles'] ) . '; let activeChart = null; if (typeof L !== "undefined" && track_points.length > 0) { const map = L.map("statpress-activity-map"); L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { attribution: \'© OpenStreetMap\' }).addTo(map); const polyline = L.polyline(track_points, {color: "' . esc_js( $activity->color ) . '"}).addTo(map); map.fitBounds(polyline.getBounds().pad(0.1)); L.marker(track_points[0]).addTo(map).bindPopup("Start"); L.marker(track_points[track_points.length - 1]).addTo(map).bindPopup("Koniec"); } const chartConfigs = { elevation: { label: "Wysokość", unit: "m n.p.m.", color: "#8e44ad" }, speed: { label: "Prędkość", unit: "km/h", color: "#2980b9" }, hr: { label: "Tętno", unit: "bpm", color: "#c0392b" }, cadence: { label: "Kadencja", unit: "rpm", color: "#27ae60" } }; const xAxisConfigs = { distance: { label: "Dystans (km)", data: profiles.distance }, time: { label: "Czas", data: profiles.time, formatter: (s) => s === null ? "" : new Date(s * 1000).toISOString().substr(11, 8) } }; function renderChart() { if (activeChart) activeChart.destroy(); const chartType = document.querySelector(".statpress-chart-tabs .nav-tab-active").getAttribute("href").substring(1); const xAxisType = document.querySelector(\'input[name="statpress_xaxis"]:checked\').value; const yData = profiles[chartType], xData = xAxisConfigs[xAxisType].data; const filteredY = [], filteredX = []; if(yData) { for(let i=0; i v, maxRotation: 0, autoSkip: true, maxTicksLimit: 10 } }, y: { title: { display: true, text: chartConfigs[chartType].unit } } }, plugins: { legend: { display: false } }, interaction: { intersect: false, mode: "index" }, } }); } document.querySelectorAll(".statpress-chart-tabs .nav-tab").forEach(t => t.addEventListener("click", e => { e.preventDefault(); document.querySelector(".statpress-chart-tabs .nav-tab-active").classList.remove("nav-tab-active"); e.target.classList.add("nav-tab-active"); renderChart(); })); document.querySelectorAll(\'input[name="statpress_xaxis"]\').forEach(r => r.addEventListener("change", renderChart)); if (document.querySelector(".statpress-chart-tabs .nav-tab")) renderChart(); '; wp_add_inline_script( 'statpress-details-loader', 'document.addEventListener("DOMContentLoaded", function() {' . $chart_js . '});' ); } ?>

Szczegóły treningu: title ); ?> Edytuj

← Powrót do listy aktywności

Podsumowanie

Główne dane

category_name ); ?> date ); ?> distance, 2, ',', ' ' ), 'km' ); ?> duration ); ?> calories, 'kcal' ); ?> event_type_name ); ?> equipment_name ); ?>

Dane szczegółowe

avg_speed, 1, ',', ' ' ), 'km/h' ); ?> max_speed, 1, ',', ' ' ), 'km/h' ); ?> avg_heart_rate, 'bpm' ); ?> max_heart_rate, 'bpm' ); ?> avg_cadence, 'rpm' ); ?> max_cadence, 'rpm' ); ?> total_elevation_gain, 'm' ); ?> total_elevation_loss, 'm' ); ?> min_altitude, 'm n.p.m.' ); ?> max_altitude, 'm n.p.m.' ); ?>

Notatki i linki

comment ) ); ?> strava_url ) ) : ?> gpx_url ) ) : ?>
StravaZobacz aktywność na Strava
Plik GPXPobierz plik GPX

Mapa Trasy

Wykresy

Oś X:   
gpx_url ) ) : ?>

Nie udało się wczytać danych z pliku GPX lub plik jest uszkodzony/pusty. Brak danych do wyświetlenia mapy i wykresów.