register_post_type(); } self::ensure_defaults(); update_option( 'streamsera_version', STREAMSERA_VERSION ); flush_rewrite_rules(); // The listen page and station page rules are added on `init`, which has already run in the // activation request: flush once more on the next page load, after they are registered. update_option( 'streamsera_flush_rewrite', 1, false ); } /** * Default settings. * * @return array */ public static function defaults() { return array( 'listen_enabled' => false, 'listen_slug' => 'listen', 'listen_player' => 0, 'station_pages_enabled' => false, 'station_pages_slug' => 'stations', 'station_pages_player' => 0, 'station_pages_theme' => 'dark', // station_pages_sections: unset = every available section (core's and add-ons'), until the owner picks. 'cache_ttl' => 15, 'default_volume' => 80, 'keyboard_shortcuts' => true, 'autosave' => true, 'show_branding' => false, 'delete_data' => false, 'setup_completed' => false, 'dismissed_tips' => array(), 'background_poll' => true, 'admin_dark' => 'auto', ); } /** * Merge defaults into stored settings without clobbering user values. */ public static function ensure_defaults() { $current = get_option( 'streamsera_settings', array() ); update_option( 'streamsera_settings', array_merge( self::defaults(), is_array( $current ) ? $current : array() ) ); } /** * Run version-to-version upgrades on plugins_loaded. */ public static function maybe_upgrade() { $stored = get_option( 'streamsera_version', '0' ); if ( version_compare( $stored, STREAMSERA_VERSION, '>' ) ) { // Rolled back (or a development build recorded a higher number): remember the running version // so the next real upgrade still fires. update_option( 'streamsera_version', STREAMSERA_VERSION ); return; } if ( version_compare( $stored, STREAMSERA_VERSION, '=' ) ) { return; } self::ensure_defaults(); /** * Fires when the plugin version changed. * * @param string $from Previous version. * @param string $to New version. */ do_action( 'streamsera_upgraded', $stored, STREAMSERA_VERSION ); update_option( 'streamsera_version', STREAMSERA_VERSION ); } /** * Run on deactivation. */ public static function deactivate() { foreach ( array( Jobs\Metadata_Poll::HOOK ) as $hook ) { Jobs\Scheduler::cancel( $hook ); // Action Scheduler (our group) + WP-Cron. wp_clear_scheduled_hook( $hook ); } // Schedule-check flags, so jobs are re-created right after reactivation. delete_transient( Jobs\Metadata_Poll::SCHEDULE_CHECK ); // Anything else queued under our group (one-off jobs). if ( function_exists( 'as_unschedule_all_actions' ) ) { as_unschedule_all_actions( '', array(), Jobs\Scheduler::GROUP ); } flush_rewrite_rules(); } }