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/RestApi/Generator.php
<?php
namespace MBB\RestApi;

use MBBParser\Parsers\MetaBox as Parser;
use MBBParser\Encoders\MetaBox as Encoder;
use WP_REST_Server;
use WP_REST_Request;

class Generator {
	public function __construct() {
		add_action( 'rest_api_init', [ $this, 'register_routes' ] );
	}

	public function register_routes(): void {
		register_rest_route( 'mbb', 'generate', [
			'methods'             => WP_REST_Server::CREATABLE,
			'callback'            => [ $this, 'generate' ],
			'permission_callback' => [ $this, 'has_permission' ],
		] );
	}

	public function has_permission(): bool {
		return current_user_can( 'manage_options' );
	}

	/**
	 * Generate PHP code for the field group.
	 * The generated code is the same as post meta's 'meta_box' key.
	 * @see Save::save()
	 *
	 * @param WP_REST_Request $request
	 * @return array|array{message: string, success: bool|string}
	 */
	public function generate( WP_REST_Request $request ) {
		$post_title = sanitize_text_field( $request->get_param( 'post_title' ) );
		$post_name  = sanitize_text_field( $request->get_param( 'post_name' ) );
		$fields     = $request->get_param( 'fields' );
		$settings   = $request->get_param( 'settings' );

		if ( ! $post_title ) {
			return [
				'success' => false,
				'message' => __( 'Invalid data', 'meta-box-builder' ),
			];
		}

		if ( ! $post_name ) {
			$post_name = sanitize_title( $post_title );
		}

		// Save fields, settings and data
		$settings = apply_filters( 'mbb_save_settings', $settings, $request );
		$fields   = apply_filters( 'mbb_save_fields', $fields, $request );

		// Save parsed data for PHP (serialized array)
		$submitted_data = compact( 'fields', 'settings' );

		// Set post title and slug in case they're auto-generated
		$submitted_data['post_title'] = $post_title;
		$submitted_data['post_name']  = $post_name;

		$parser = new Parser( $submitted_data );
		$parser->parse();

		$settings = $parser->get_settings();
		// 'modified' is used only for location JSON, not in PHP code
		unset( $settings['modified'] );
		$encoder = new Encoder( $settings );
		$encoder->encode();

		return $encoder->get_encoded_string();
	}
}