From 65ad515dafa79c453583d65a27a2a3d2a5b0deba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacek=20Fefli=C5=84ski?= Date: Tue, 27 Jan 2026 12:05:29 +0100 Subject: [PATCH] First commit, plugin works! --- moje-statystyki.php | 172 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 moje-statystyki.php diff --git a/moje-statystyki.php b/moje-statystyki.php new file mode 100644 index 0000000..9a5dbb0 --- /dev/null +++ b/moje-statystyki.php @@ -0,0 +1,172 @@ +get_charset_collate(); + + $table_categories = $wpdb->prefix . 'mystat_categories'; + $table_activities = $wpdb->prefix . 'mystat_activities'; + + // SQL dla Kategorii + $sql_cat = "CREATE TABLE $table_categories ( + id mediumint(9) NOT NULL AUTO_INCREMENT, + name varchar(50) NOT NULL, + icon varchar(50) NOT NULL, + color varchar(20) NOT NULL, + PRIMARY KEY (id) + ) $charset_collate;"; + + // SQL dla Aktywności + $sql_act = "CREATE TABLE $table_activities ( + id bigint(20) NOT NULL AUTO_INCREMENT, + category_id mediumint(9) NOT NULL, + date date NOT NULL, + distance decimal(10,2) DEFAULT 0.00, + duration time DEFAULT '00:00:00', + calories int(11) DEFAULT 0, + comment text, + PRIMARY KEY (id) + ) $charset_collate;"; + + require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); + dbDelta( $sql_cat ); + dbDelta( $sql_act ); + + // Dodanie domyślnych kategorii, jeśli tabela jest pusta + if ( $wpdb->get_var( "SELECT COUNT(*) FROM $table_categories" ) == 0 ) { + $wpdb->insert( $table_categories, array( 'name' => 'Rower', 'icon' => 'dashicons-buddicons-groups', 'color' => '#3498db' ) ); + $wpdb->insert( $table_categories, array( 'name' => 'Bieganie', 'icon' => 'dashicons-businessman', 'color' => '#e74c3c' ) ); + } +} + +// --- 2. MENU ADMINA I DASHBOARD --- +add_action( 'admin_menu', 'mystat_add_admin_menu' ); + +function mystat_add_admin_menu() { + add_menu_page( 'Moje Statystyki', 'Statystyki', 'manage_options', 'moje-statystyki', 'mystat_dashboard_page', 'dashicons-chart-line', 6 ); +} + +function mystat_dashboard_page() { + echo '

Moje Statystyki Sportowe

'; + mystat_render_history_table(); + echo '
'; +} + +function mystat_render_history_table() { + global $wpdb; + + // Definicje nazw tabel (z uwzględnieniem prefixu WP, jeśli był użyty przy tworzeniu) + // Zakładam, że tabele nazywają się dokładnie tak jak w dokumentacji, ale dobrą praktyką jest $wpdb->prefix + // Jeśli tabele są "sztywne" (bez prefixu wp_), usuń $wpdb->prefix. + $table_activities = $wpdb->prefix . 'mystat_activities'; + $table_categories = $wpdb->prefix . 'mystat_categories'; + + // --- 1. OBSŁUGA USUWANIA (DELETE) --- + if ( isset( $_GET['action'], $_GET['id'], $_GET['_wpnonce'] ) && $_GET['action'] === 'mystat_delete' ) { + $activity_id = intval( $_GET['id'] ); + + // Weryfikacja bezpieczeństwa (Nonce) + if ( wp_verify_nonce( $_GET['_wpnonce'], 'mystat_delete_' . $activity_id ) ) { + $result = $wpdb->delete( + $table_activities, + array( 'id' => $activity_id ), + array( '%d' ) + ); + + if ( $result ) { + echo '

Aktywność została usunięta.

'; + } else { + echo '

Wystąpił błąd podczas usuwania.

'; + } + } else { + echo '

Błąd weryfikacji bezpieczeństwa (Nonce).

'; + } + } + + // --- 2. POBIERANIE DANYCH (SELECT) --- + // Pobieramy ostatnie 10 wpisów, łącząc z tabelą kategorii, aby mieć nazwę i ikonę + $sql = " + SELECT a.*, c.name as category_name, c.icon, c.color + FROM $table_activities a + LEFT JOIN $table_categories c ON a.category_id = c.id + ORDER BY a.date DESC, a.id DESC + LIMIT 10 + "; + + $activities = $wpdb->get_results( $sql ); + + // --- 3. WIDOK TABELI (HTML) --- + ?> +
+

Ostatnie Aktywności

+ + + + + + + + + + + + + + + + + + $_REQUEST['page'], // Zachowaj obecną stronę admina + 'action' => 'mystat_delete', + 'id' => $row->id, + '_wpnonce' => wp_create_nonce( 'mystat_delete_' . $row->id ) + ), admin_url( 'admin.php' ) ); + ?> + + + + + + + + + + + + + + + + + +
IkonaDataKategoriaDystans (km)CzasKcalKomentarzAkcja
+ icon ) ) : ?> + + + date ); ?>category_name ); ?>distance, 2, ',', ' ' ); ?>duration ); ?>calories ); ?>comment, 5 ) ); ?> + + Usuń + +
Brak zarejestrowanych aktywności. Dodaj pierwszy trening powyżej!
+
+