label */ public static function enforceable() { $keys = array( 'cache_ttl' => __( 'Now-playing cache TTL (seconds)', 'streamsera' ), 'default_volume' => __( 'Default volume', 'streamsera' ), 'keyboard_shortcuts' => __( 'Keyboard shortcuts', 'streamsera' ), 'background_poll' => __( 'Background metadata polling', 'streamsera' ), 'delete_data' => __( 'Delete data on uninstall', 'streamsera' ), ); /** * Filter the settings a network admin can enforce across sites. * * @param array $keys key => label. */ return (array) apply_filters( 'streamsera_network_enforceable_settings', $keys ); } /** * Hook in (multisite only). */ public function register() { if ( ! is_multisite() ) { return; } add_filter( 'option_streamsera_settings', array( $this, 'merge' ) ); add_filter( 'default_option_streamsera_settings', array( $this, 'merge' ) ); add_action( 'network_admin_menu', array( $this, 'menu' ) ); add_action( 'network_admin_edit_' . self::SLUG, array( $this, 'save' ) ); add_filter( 'streamsera_admin_data', array( $this, 'admin_data' ) ); } /** * Stored network settings. * * @return array { values: array, enforced: string[] } */ public static function get() { $stored = get_site_option( self::OPTION, array() ); return array( 'values' => isset( $stored['values'] ) && is_array( $stored['values'] ) ? $stored['values'] : array(), 'enforced' => isset( $stored['enforced'] ) && is_array( $stored['enforced'] ) ? array_values( $stored['enforced'] ) : array(), ); } /** * Overlay enforced network values on the site option. * * @param mixed $value Site settings. * @return array */ public function merge( $value ) { $network = self::get(); if ( empty( $network['enforced'] ) ) { return $value; } $value = is_array( $value ) ? $value : array(); foreach ( $network['enforced'] as $key ) { if ( array_key_exists( $key, $network['values'] ) ) { $value[ $key ] = $network['values'][ $key ]; } } return $value; } /** * Tell the site admin app which keys are locked. * * @param array $data Data. * @return array */ public function admin_data( $data ) { $data['networkLocked'] = self::get()['enforced']; return $data; } /** * Network settings page. */ public function menu() { add_submenu_page( 'settings.php', __( 'StreamSera', 'streamsera' ), __( 'StreamSera', 'streamsera' ), 'manage_network_options', self::SLUG, array( $this, 'render' ) ); } /** * Render the (plain PHP) network form. */ public function render() { $network = self::get(); $defaults = \StreamSera\Installation::defaults(); $updated = isset( $_GET['updated'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended ?>