Dodaj Nowy Trening

'; // Obsługa zapisu formularza (musi być przed renderowaniem, aby wyświetlić komunikat) mystat_handle_activity_form_submission(); // Formularz dodawania mystat_render_add_form(); echo ''; } function mystat_edit_activity_page() { global $wpdb; $activity_id = isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0; if ( $activity_id === 0 ) { echo '

Błąd

Nie podano ID aktywności do edycji.

'; return; } // Handle form submission for update mystat_handle_activity_form_submission(); $table_activities = $wpdb->prefix . 'mystat_activities'; $activity = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table_activities WHERE id = %d", $activity_id ) ); if ( ! $activity ) { echo '

Błąd

Nie znaleziono aktywności o podanym ID.

'; return; } echo '

Edytuj Trening

'; mystat_render_add_form( $activity ); echo '
'; } /** * Obsługa zapisu nowego lub edytowanego wpisu do bazy danych */ function mystat_handle_activity_form_submission() { global $wpdb; // Sprawdź czy formularz został wysłany if ( ! isset( $_POST['mystat_submit_activity'] ) ) { return; } $activity_id = isset( $_POST['activity_id'] ) ? intval( $_POST['activity_id'] ) : 0; $nonce_action = $activity_id > 0 ? 'mystat_edit_entry_' . $activity_id : 'mystat_add_entry'; // Weryfikacja bezpieczeństwa (Nonce) if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], $nonce_action ) ) { echo '

Błąd weryfikacji bezpieczeństwa formularza.

'; return; } $table_activities = $wpdb->prefix . 'mystat_activities'; // Przygotowanie danych (zamiana przecinka na kropkę w dystansie) $distance = isset( $_POST['distance'] ) ? floatval( str_replace( ',', '.', $_POST['distance'] ) ) : 0; // Funkcja pomocnicza do zamiany pustych wartości na NULL, aby poprawnie zapisać je w bazie $null_if_empty = function( $value ) { return $value !== '' ? $value : null; }; $data = array( 'category_id' => intval( $_POST['category_id'] ), 'date' => sanitize_text_field( $_POST['date'] ), 'title' => sanitize_text_field( $_POST['title'] ), 'distance' => $distance, 'duration' => sanitize_text_field( $_POST['duration'] ), 'calories' => intval( $_POST['calories'] ), 'comment' => sanitize_textarea_field( $_POST['comment'] ), 'strava_url' => $null_if_empty( esc_url_raw( $_POST['strava_url'] ) ), 'avg_heart_rate' => $null_if_empty( intval( $_POST['avg_heart_rate'] ) ), 'max_heart_rate' => $null_if_empty( intval( $_POST['max_heart_rate'] ) ), 'avg_speed' => $null_if_empty( floatval( str_replace( ',', '.', $_POST['avg_speed'] ) ) ), 'max_speed' => $null_if_empty( floatval( str_replace( ',', '.', $_POST['max_speed'] ) ) ), 'avg_cadence' => $null_if_empty( intval( $_POST['avg_cadence'] ) ), 'max_cadence' => $null_if_empty( intval( $_POST['max_cadence'] ) ), 'total_elevation_gain' => $null_if_empty( intval( $_POST['total_elevation_gain'] ) ), 'total_elevation_loss' => $null_if_empty( intval( $_POST['total_elevation_loss'] ) ), 'min_altitude' => $null_if_empty( intval( $_POST['min_altitude'] ) ), 'max_altitude' => $null_if_empty( intval( $_POST['max_altitude'] ) ), 'equipment_id' => $null_if_empty( intval( $_POST['equipment_id'] ) ), 'gpx_url' => $null_if_empty( esc_url_raw( $_POST['gpx_url'] ) ), 'event_type_id' => $null_if_empty( intval( $_POST['event_type_id'] ) ), ); // Format danych dla $wpdb->insert $format = array( '%d', '%s', '%s', '%f', '%s', '%d', '%s', // Pola podstawowe '%s', '%d', '%d', '%f', '%f', '%d', '%d', // Tętno, prędkość, kadencja '%d', '%d', '%d', '%d', '%d', '%s', '%d', // Wysokość, sprzęt, linki, typ wydarzenia ); if ( $activity_id > 0 ) { // UPDATE $result = $wpdb->update( $table_activities, $data, array( 'id' => $activity_id ), $format, array( '%d' ) ); $message = 'Trening zaktualizowany pomyślnie!'; } else { // INSERT $result = $wpdb->insert( $table_activities, $data, $format ); $message = 'Trening dodany pomyślnie!'; } if ( false !== $result ) { echo '

' . esc_html( $message ) . '

'; } else { echo '

Wystąpił błąd podczas zapisu do bazy.

'; } } /** * Renderowanie formularza HTML */ function mystat_render_add_form( $activity = null ) { // Enqueue media scripts for the uploader wp_enqueue_media(); global $wpdb; $table_categories = $wpdb->prefix . 'mystat_categories'; $table_event_types = $wpdb->prefix . 'mystat_event_types'; $table_equipment = $wpdb->prefix . 'mystat_equipment'; $categories = $wpdb->get_results( "SELECT * FROM $table_categories ORDER BY name ASC" ); $event_types = $wpdb->get_results( "SELECT * FROM $table_event_types ORDER BY name ASC" ); $equipment_list = $wpdb->get_results( "SELECT * FROM $table_equipment ORDER BY name ASC" ); $is_edit_mode = ! is_null( $activity ); $nonce_action = $is_edit_mode ? 'mystat_edit_entry_' . $activity->id : 'mystat_add_entry'; $form_title = $is_edit_mode ? 'Edytuj Aktywność' : 'Dodaj Nową Aktywność'; $button_text = $is_edit_mode ? 'Zaktualizuj Trening' : 'Zapisz Trening'; ?>


Dane szczegółowe (opcjonalne)


Linki zewnętrzne (opcjonalne)