add_help_tab( array( 'id' => 'wp360-pt-help-basics', 'title' => __( 'What does Privacy Toolkit do?', '360-orbit-privacy-toolkit' ), 'content' => '

' . __( 'It anonymizes the IP address of every new comment as it arrives (the last part is removed before storage), can generate a suggested privacy-policy text block based on which 360 plugins are active, and (Pro) offers a configurable auto-delete for old spam/trash comments plus a consolidated view of WordPress\' own data export/erasure requests.', '360-orbit-privacy-toolkit' ) . '

', ) ); $screen->add_help_tab( array( 'id' => 'wp360-pt-help-existing', 'title' => __( 'What about comments that already exist?', '360-orbit-privacy-toolkit' ), 'content' => '

' . __( 'New comments are anonymized immediately. Comments stored before this plugin was active are migrated in the background (a daily background task processes them in batches), or immediately via the "Anonymize now" button on the Status tab.', '360-orbit-privacy-toolkit' ) . '

', ) ); $screen->add_help_tab( array( 'id' => 'wp360-pt-help-policy', 'title' => __( 'Is the generated privacy-policy text legally binding?', '360-orbit-privacy-toolkit' ), 'content' => '

' . __( 'No. It is a starting point based on what is technically active on this site, not legal advice. Always have your privacy policy reviewed by a qualified professional.', '360-orbit-privacy-toolkit' ) . '

', ) ); } /** * Deaktivierungs-Rückfrage (README "Suite-übergreifend"): kein Formular, * nur ein kurzer Hinweis vor dem eigentlichen Deaktivieren in der * Plugin-Liste, was dabei aufhoert und was erhalten bleibt. */ public static function enqueue_deactivation_notice_script( $hook ) { if ( 'plugins.php' !== $hook || ! defined( 'WP360_PT_FILE' ) ) { return; } $basename = plugin_basename( WP360_PT_FILE ); $message = __( 'Deactivate Privacy Toolkit? New comments will no longer have their IP address anonymized automatically, and (Pro) automatic deletion of old spam/trash comments stops. Already-anonymized data and settings stay saved.', '360-orbit-privacy-toolkit' ); // Kein eigenes Script-Tag im Markup (WordPress.org-Richtlinie): ein Handle // ohne Datei, an das der Code per wp_add_inline_script() haengt. wp_register_script( 'wp360-pt-deactivate', false, array(), WP360_PT_VERSION, true ); wp_enqueue_script( 'wp360-pt-deactivate' ); wp_add_inline_script( 'wp360-pt-deactivate', sprintf( '( function () { var row = document.querySelector( %s ); var link = row ? row.querySelector( \'a[href*="action=deactivate"]\' ) : null; if ( ! link ) { return; } link.addEventListener( \'click\', function ( event ) { if ( ! window.confirm( %s ) ) { event.preventDefault(); } } ); } )();', wp_json_encode( 'tr[data-plugin="' . $basename . '"]' ), wp_json_encode( $message ) ) ); } /** * Gesundheitscheck (README "Suite-übergreifend"): traegt zur * gemeinsamen "360 WP Orbit"-Uebersicht bei -- rein lesend, nichts * wird hier ausgeloest. Bewusst am gemeinsamen, nicht praefigierten * Filter 'wp360_orbit_health' registriert (siehe class-orbit-menu.php). */ public static function health_lines( array $lines, $slug ) { if ( '360-orbit-privacy-toolkit' !== $slug ) { return $lines; } $pending = Wp360_Privacy_Toolkit_Comment_Privacy::pending_count(); if ( $pending > 0 ) { $lines[] = sprintf( /* translators: %s: number of comments with a not-yet-anonymized IP address, already formatted */ __( '%s comment(s) with un-anonymized IP.', '360-orbit-privacy-toolkit' ), number_format_i18n( $pending ) ); } return $lines; } private static function current_tab() { $valid = array( 'status', 'policy', 'settings', 'pro' ); if ( isset( $_GET['tab'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended $tab = sanitize_key( wp_unslash( $_GET['tab'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended if ( in_array( $tab, $valid, true ) ) { return $tab; } } return 'status'; } private static function render_tabs( $current_tab ) { $tabs = array( 'status' => __( 'Status', '360-orbit-privacy-toolkit' ), 'policy' => __( 'Policy Text', '360-orbit-privacy-toolkit' ), 'settings' => __( 'Settings', '360-orbit-privacy-toolkit' ), ); // FREE: ein einziger Pro-Tab statt gesperrter Attrappen-Tabs // (WordPress.org-Richtlinie 11: Upgrade-Hinweise sparsam und nur auf // der eigenen Einstellungsseite). Im PRO-Build zeigen die Tabs // "Antraege" und "Export/Import" bei fehlender Lizenz selbst ihren // Upsell-Hinweis, dort entfaellt der Pro-Tab. $show_pro_tab = true; if ( $show_pro_tab ) { $tabs['pro'] = __( 'Privacy Toolkit Pro', '360-orbit-privacy-toolkit' ); } ?> admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'wp360_pt_nonce' ), 'strings' => array( 'anonymizing' => __( 'Anonymizing …', '360-orbit-privacy-toolkit' ), 'anonymizeError' => __( 'Error while anonymizing.', '360-orbit-privacy-toolkit' ), /* translators: 1: number of comments changed in this batch, 2: number still pending */ 'anonymizeDone' => __( 'Done: %1$d changed in this batch, %2$d still pending.', '360-orbit-privacy-toolkit' ), 'saved' => __( 'Saved.', '360-orbit-privacy-toolkit' ), 'saveError' => __( 'Error while saving.', '360-orbit-privacy-toolkit' ), 'copied' => __( 'Copied to clipboard.', '360-orbit-privacy-toolkit' ), ), ) ); } public static function render_page() { if ( ! current_user_can( self::CAPABILITY ) ) { return; } // README "Suite-übergreifend", Punkt 1: eine abgelaufene/ungueltige // PRO-Lizenz schaltet nicht mehr die ganze Seite ab -- Free-Tabs // (Status, Policy-Text, Settings mit den Free-Einstellungen) bleiben // immer erreichbar, PRO-Tabs zeigen stattdessen ihren Upsell-Hinweis. $edition = 'Free'; $current_tab = self::current_tab(); ?>

360 Orbit ()

-- das steckt hier im Flex-Branding-Block, die Meldung erschiene also neben der Ueberschrift statt darunter. ?>

✓ ' . esc_html__( 'Anonymized automatically', '360-orbit-privacy-toolkit' ) : '✕ ' . esc_html__( 'Not anonymized', '360-orbit-privacy-toolkit' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
0 ) { ?> ✕ ✓