id, 'statpress' ) !== false ) { wp_enqueue_style( 'google-fonts-roboto', 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap', false ); wp_enqueue_style( 'google-material-icons', 'https://fonts.googleapis.com/icon?family=Material+Icons', false ); } } // --- 3. REST API --- $api_options = get_option( 'statpress_api_options' ); if ( ! empty( $api_options['enable_api'] ) ) { require_once STATPRESS_PLUGIN_DIR . 'includes/admin/pages/routes.php'; add_action( 'rest_api_init', 'statpress_register_rest_routes' ); } // --- 4. SHORTCODE DO WYŚWIETLANIA NA FRONCIE --- require_once STATPRESS_PLUGIN_DIR . 'includes/frontend/assets.php'; require_once STATPRESS_PLUGIN_DIR . 'includes/frontend/shortcodes.php'; add_action( 'wp_enqueue_scripts', 'statpress_enqueue_frontend_assets' ); add_action( 'init', 'statpress_register_shortcode' ); add_action( 'wp_enqueue_scripts', 'statpress_enqueue_frontend_material_assets' ); function statpress_enqueue_frontend_material_assets() { wp_enqueue_style( 'google-fonts-roboto', 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap', false ); wp_enqueue_style( 'google-material-icons', 'https://fonts.googleapis.com/icon?family=Material+Icons', false ); } // --- 5. MIGRACJA DANYCH (jednorazowa) --- add_action( 'admin_init', 'statpress_handle_data_migration' ); /** * Handles the one-time data migration from 'mystat_' tables to 'statpress_' tables. */ function statpress_handle_data_migration() { // Check if the migration action is triggered, nonce is valid, and user has permissions. if ( ! isset( $_GET['action'] ) || 'statpress_migrate_data' !== $_GET['action'] ) { return; } if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'statpress_migration_nonce' ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } global $wpdb; // Define table columns to ensure robust migration, even if schemas differ. $table_columns = array( 'activities' => 'id, category_id, date, title, distance, duration, calories, comment, strava_url, avg_heart_rate, max_heart_rate, avg_speed, max_speed, avg_cadence, max_cadence, total_elevation_gain, total_elevation_loss, min_altitude, max_altitude, equipment_id, gpx_url, event_type_id', 'categories' => 'id, name, icon, color', 'equipment' => 'id, name, type, purchase_date, initial_cost, status, notes', 'equipment_log' => 'id, equipment_id, log_date, log_type, description, cost, mileage', 'event_types' => 'id, name', 'goals' => 'id, name, goal_type, target_value, year, month, category_id', ); $results = array(); $all_successful = true; foreach ( $table_columns as $table_suffix => $columns ) { $old_table = $wpdb->prefix . 'mystat_' . $table_suffix; $new_table = $wpdb->prefix . 'statpress_' . $table_suffix; // Check if old table exists and new table is empty if ( $wpdb->get_var( "SHOW TABLES LIKE '{$old_table}'" ) === $old_table ) { // Check if there's anything to migrate $old_table_count = (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$old_table}" ); $new_table_count = (int) $wpdb->get_var( "SELECT COUNT(*) FROM {$new_table}" ); // Only migrate if the new table is empty but the old one has data. if ( $old_table_count > 0 && 0 === $new_table_count ) { // Use explicit column list for a robust query $query = "INSERT INTO {$new_table} ({$columns}) SELECT {$columns} FROM {$old_table}"; $copied_rows = $wpdb->query( $query ); if ( false === $copied_rows ) { $all_successful = false; $results[ $table_suffix ] = array( 'status' => 'failure', 'error' => $wpdb->last_error, ); } else { $results[ $table_suffix ] = array( 'status' => 'success', 'count' => $copied_rows, ); } } else { // If the new table is not empty, skip it. $results[ $table_suffix ] = array( 'status' => 'skipped', 'count' => $new_table_count, ); } } } // Store the results in a transient to display a notice set_transient( 'statpress_migration_results', $results, 60 ); // Mark migration as complete only if everything was successful or skipped. if ( $all_successful ) { update_option( 'statpress_migration_complete', true ); } // Redirect to the main dashboard to show the notice and remove query args wp_safe_redirect( admin_url( 'admin.php?page=statpress-dashboard' ) ); exit; }