HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: /volume1/web/Marchisa-Toman/wp-content/plugins/meta-box-builder/src/Upgrade/Ver300.php
<?php
namespace MBB\Upgrade;

class Ver300 {
	public function migrate() {
		$query = new \WP_Query( [
			'post_type'              => 'meta-box',
			'post_status'            => 'any',
			'posts_per_page'         => -1,
			'no_found_rows'          => true,
			'update_post_meta_cache' => false,
			'update_post_term_cache' => false,
		] );

		array_walk( $query->posts, [ $this, 'update_object_types' ] );
		array_walk( $query->posts, [ $this, 'update_fields' ] );
		array_walk( $query->posts, [ $this, 'update_post' ] );
	}

	private function update_object_types( &$post ) {
		$excerpt = json_decode( $post->post_excerpt, true );
		$content = unserialize( $post->post_content );

		if ( isset( $excerpt['for'] ) && 'attachments' === $excerpt['for'] ) {
			$excerpt['for']        = 'post_types';
			$excerpt['post_types'] = [ 'attachment' ];
		}

		if ( ! empty( $excerpt['post_types'] ) && is_array( $excerpt['post_types'] ) ) {
			$excerpt['post_types'] = array_map( function ( $post_type ) {
				return isset( $post_type['slug'] ) ? $post_type['slug'] : $post_type;
			}, $excerpt['post_types'] );
		}
		if ( ! empty( $content['post_types'] ) && is_array( $content['post_types'] ) ) {
			$content['post_types'] = array_map( function ( $post_type ) {
				return isset( $post_type['slug'] ) ? $post_type['slug'] : $post_type;
			}, $content['post_types'] );
		}

		if ( ! empty( $excerpt['taxonomies'] ) ) {
			$excerpt['taxonomies'] = array_map( function ( $taxonomy ) {
				return isset( $taxonomy['slug'] ) ? $taxonomy['slug'] : $taxonomy;
			}, $excerpt['taxonomies'] );
		}
		if ( ! empty( $content['taxonomies'] ) ) {
			$content['taxonomies'] = array_map( function ( $taxonomy ) {
				return isset( $taxonomy['slug'] ) ? $taxonomy['slug'] : $taxonomy;
			}, $content['taxonomies'] );
		}

		if ( ! empty( $excerpt['settings_pages'] ) ) {
			$excerpt['settings_pages'] = array_map( function ( $setting_page ) {
				return isset( $setting_page['id'] ) ? $setting_page['id'] : $setting_page;
			}, $excerpt['settings_pages'] );
		}
		if ( ! empty( $content['settings_pages'] ) ) {
			$content['settings_pages'] = array_map( function ( $setting_page ) {
				return isset( $setting_page['id'] ) ? $setting_page['id'] : $setting_page;
			}, $content['settings_pages'] );
		}

		$post->post_excerpt = wp_json_encode( $excerpt );
		$post->post_content = serialize( $content );
	}

	private function update_fields( &$post ) {
		$excerpt = json_decode( $post->post_excerpt, true );
		if ( empty( $excerpt['fields'] ) || ! is_array( $excerpt['fields'] ) ) {
			return;
		}
		array_walk( $excerpt['fields'], [ $this, 'update_field_datalist' ] );
		array_walk( $excerpt['fields'], [ $this, 'update_field_options' ] );
		$post->post_excerpt = wp_json_encode( $excerpt );
	}

	private function update_field_datalist( &$field ) {
		if ( empty( $field['datalist'] ) ) {
			return;
		}
		$field['datalist_choices'] = implode( "\n", $field['datalist']['options'] );
		unset( $field['datalist'] );
	}

	private function update_field_options( &$field ) {
		if ( empty( $field['options'] ) || ! is_array( $field['options'] ) || in_array( $field['type'], [ 'fieldset_text', 'text_list', 'wysiwyg' ] ) ) {
			return;
		}
		$field['options'] = implode( "\n", array_map( function ( $option ) {
			return "{$option['key']}:{$option['value']}";
		}, $field['options'] ) );
	}

	private function update_post( $post ) {
		wp_update_post( [
			'ID'           => $post->ID,
			'post_excerpt' => addslashes( $post->post_excerpt ),
			'post_content' => addslashes( $post->post_content ),
		] );
	}
}