defaults = $defaults; } /** * Set the preset bindings. * * @since 1.0.19 * @param array $defaults The preset bindings array. */ public function setPresetBindings( array $bindings ) { $this->presetBindings = $bindings; } public function mergeDefaults( array $settings ): array { $defaults = json_decode( wp_json_encode( $this->defaults ), true ); foreach ( $defaults[ 'options' ] as $key => $values ) { if ( ! isset( $settings[ 'options' ][ $key ] ) ) { $settings[ 'options' ][ $key ] = $defaults[ 'options' ][ $key ]; } } if ( ! isset( $settings[ 'queries' ] ) ) { $settings[ 'queries' ] = $defaults[ 'queries' ]; } if ( false === Core::instance()->isPro() ) { $settings[ 'options' ][ 'queriesMode' ] = 'desktopFirst'; } return $settings; } /** * Get the plugin settings. * * @since 1.0.0 * @return object */ public function get(): object { $settings = \get_option( 'advanced_columns' ); $settings = json_decode( wp_json_encode( $settings ), true ); $settings = $this->mergeDefaults( $settings ); $settings = json_decode( wp_json_encode( $settings ), false ); $settings->queries = Queries::getFromSettings( $settings->queries, $settings ); $settings->context = $this->contextData(); return $settings; } /** * Context data provided to the Editor. * * @since 1.0.16 * @return array */ private function contextData(): array { $settingsContext = new SettingsContext(); $contextData = array( 'version' => ADVANCED_COLUMNS_VERSION, 'url' => ADVANCED_COLUMNS_URL, 'pro' => Core::instance()->isPro(), 'globalStyles' => $settingsContext->getStyles(), 'spacingSizes' => $settingsContext->getSpacingSizes(), 'customData' => $settingsContext->getCustomData(), 'presets' => array(), ); foreach ( $this->presetBindings as $fieldName => $presetHandler ) { $contextData[ 'presets' ][ $fieldName ] = array( 'default' => $presetHandler::$default, 'newQueryDefault' => $presetHandler::$newQueryDefault, ); } return $contextData; } /** * Expose the plugin settings to the Block Editor. * * @since 1.0.0 */ public function provide() { wp_register_script( 'advanced-columns-dummy-header', '' ); wp_enqueue_script( 'advanced-columns-dummy-header' ); wp_localize_script( 'advanced-columns-dummy-header', 'advancedColumnsSettings', (array) $this->get() ); wp_localize_script( 'wp-editor', 'advancedColumnsSettings', (array) $this->get() ); } /** * Handle data migrations. * * @since 1.0.14 */ public function handleMigrations() { $settings = get_option( 'advanced_columns' ); $previousVersion = get_option( 'advanced_columns_version' ); if ( false === $settings || is_string( $settings ) ) { $settings = array(); } elseif ( is_object( $settings ) ) { $settings = json_decode( json_encode( $settings ), true ); } if ( ! $previousVersion ) { $previousVersion = '0.0.1'; } $migrator = ( new SettingsMigrator() )->from( $previousVersion )->to( ADVANCED_COLUMNS_VERSION ); $migrator->setData( $settings ); $migrator->setMigrations( require_once __DIR__ . '/migrations/migrations.php' ); $migrator->migrate(); update_option( 'advanced_columns', $migrator->getData() ); update_option( 'advanced_columns_version', ADVANCED_COLUMNS_VERSION, false ); } }