Files
2026-04-22 13:38:38 +02:00

174 lines
6.2 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function statpress_settings_page() {
$active_tab = isset( $_GET['tab'] ) ? sanitize_text_field( $_GET['tab'] ) : 'general';
?>
<div class="wrap">
<h1>Ustawienia Wtyczki Statystyk</h1>
<h2 class="nav-tab-wrapper">
<a href="?page=statpress-settings&tab=general" class="nav-tab <?php echo 'general' === $active_tab ? 'nav-tab-active' : ''; ?>">Ogólne i API</a>
<a href="?page=statpress-settings&tab=event_types" class="nav-tab <?php echo 'event_types' === $active_tab ? 'nav-tab-active' : ''; ?>">Typy wydarzeń</a>
<a href="?page=statpress-settings&tab=equipment" class="nav-tab <?php echo in_array( $active_tab, array( 'equipment', 'equipment_details' ), true ) ? 'nav-tab-active' : ''; ?>">Sprzęt i Dziennik</a>
</h2>
<div class="statpress-tab-content" style="margin-top: 20px;">
<?php
if ( 'general' === $active_tab ) {
statpress_settings_general_tab();
} elseif ( 'event_types' === $active_tab ) {
if ( function_exists( 'statpress_event_types_page' ) ) {
statpress_event_types_page();
} else {
echo '<p>Brak funkcji zarządzania typami wydarzeń.</p>';
}
} elseif ( 'equipment' === $active_tab ) {
statpress_equipment_page();
} elseif ( 'equipment_details' === $active_tab ) {
statpress_equipment_details_page();
}
?>
</div>
</div>
<?php
}
function statpress_settings_general_tab() {
?>
<div class="postbox">
<div class="postbox-header"><h2 class="hndle">Konfiguracja główna</h2></div>
<div class="inside">
<form method="post" action="options.php">
<?php
settings_fields( 'statpress_privacy_settings' );
do_settings_sections( 'statpress-privacy-section' );
settings_fields( 'statpress_api_settings' );
do_settings_sections( 'statpress-api-section' );
?>
<hr>
<?php submit_button( 'Zapisz ustawienia' ); ?>
</form>
</div>
</div>
<?php
}
function statpress_register_settings() {
register_setting(
'statpress_privacy_settings',
'statpress_privacy_options',
'statpress_sanitize_privacy_options'
);
add_settings_section(
'statpress_privacy_zone_section',
'Strefa Prywatności GPX',
'statpress_privacy_section_callback',
'statpress-privacy-section'
);
add_settings_field(
'statpress_privacy_latitude',
'Szerokość geograficzna (Latitude)',
'statpress_render_lat_field',
'statpress-privacy-section',
'statpress_privacy_zone_section'
);
add_settings_field(
'statpress_privacy_longitude',
'Długość geograficzna (Longitude)',
'statpress_render_lon_field',
'statpress-privacy-section',
'statpress_privacy_zone_section'
);
add_settings_field(
'statpress_privacy_radius',
'Promień strefy (w metrach)',
'statpress_render_radius_field',
'statpress-privacy-section',
'statpress_privacy_zone_section'
);
// API Settings
register_setting(
'statpress_api_settings',
'statpress_api_options',
'statpress_sanitize_api_options'
);
add_settings_section(
'statpress_api_section',
'Ustawienia API',
'statpress_api_section_callback',
'statpress-api-section'
);
add_settings_field(
'statpress_enable_api',
'REST API',
'statpress_render_enable_api_field',
'statpress-privacy-section',
'statpress_privacy_zone_section'
);
}
function statpress_privacy_section_callback() {
echo '<p>Zdefiniuj strefę prywatności, aby ukryć początek i koniec swoich tras GPX. Punkty wewnątrz tego okręgu nie będą wyświetlane na mapie.</p>';
echo '<p>Aby znaleźć swoje współrzędne, kliknij prawym przyciskiem myszy na mapie Google w wybranym miejscu - współrzędne pojawią się jako pierwsza pozycja w menu.</p>';
}
function statpress_render_lat_field() {
$options = get_option( 'statpress_privacy_options' );
$latitude = isset( $options['latitude'] ) ? esc_attr( $options['latitude'] ) : '';
echo "<input type='text' name='statpress_privacy_options[latitude]' value='{$latitude}' placeholder='np. 52.2297' class='regular-text' />";
}
function statpress_render_lon_field() {
$options = get_option( 'statpress_privacy_options' );
$longitude = isset( $options['longitude'] ) ? esc_attr( $options['longitude'] ) : '';
echo "<input type='text' name='statpress_privacy_options[longitude]' value='{$longitude}' placeholder='np. 21.0122' class='regular-text' />";
}
function statpress_render_radius_field() {
$options = get_option( 'statpress_privacy_options' );
$radius = isset( $options['radius'] ) ? esc_attr( $options['radius'] ) : '500';
echo "<input type='number' name='statpress_privacy_options[radius]' value='{$radius}' class='small-text' /> metrów";
}
function statpress_sanitize_privacy_options( $input ) {
$sanitized_input = array();
if ( isset( $input['latitude'] ) ) {
$sanitized_input['latitude'] = floatval( str_replace( ',', '.', $input['latitude'] ) );
}
if ( isset( $input['longitude'] ) ) {
$sanitized_input['longitude'] = floatval( str_replace( ',', '.', $input['longitude'] ) );
}
if ( isset( $input['radius'] ) ) {
$sanitized_input['radius'] = abs( intval( $input['radius'] ) );
}
return $sanitized_input;
}
function statpress_api_section_callback() {
echo '<p>Ustawienia związane z integracją wtyczki z zewnętrznymi aplikacjami, np. mobilnymi.</p>';
}
function statpress_render_enable_api_field() {
$options = get_option( 'statpress_api_options' );
$checked = isset( $options['enable_api'] ) && $options['enable_api'] ? 'checked' : '';
echo "<label><input type='checkbox' name='statpress_api_options[enable_api]' value='1' {$checked} /> Włącz REST API</label>";
echo '<p class="description">Umożliwia zewnętrznym aplikacjom (np. na Androida) komunikację z wtyczką w celu dodawania i odczytywania aktywności. Jeśli nie korzystasz z takich integracji, możesz to wyłączyć dla większego bezpieczeństwa.</p>';
}
function statpress_sanitize_api_options( $input ) {
$sanitized_input = array();
// If the checkbox is not checked, it won't be in the $input array.
// So we check for its existence to determine if it's on or off.
$sanitized_input['enable_api'] = isset( $input['enable_api'] ) ? 1 : 0;
return $sanitized_input;
}