l, $cache ); } return $models; } /** * Build the editor payload for one registered model (no database inspect). * * @param string $name Model slug. * @param object|null $model Factory model instance. * @param array|null $cache mbb_models option. * @return array */ public static function format_model( string $name, $model = null, ?array $cache = null ): array { if ( ! class_exists( Factory::class ) ) { return []; } if ( null === $model ) { $model = Factory::get( $name ); } if ( ! $model ) { return []; } if ( ! is_array( $cache ) ) { $cache = get_option( Register::CACHE_OPTION, [] ); $cache = is_array( $cache ) ? $cache : []; } $cached = $cache[ $name ] ?? []; $post_id = isset( $cached['post_id'] ) ? (int) $cached['post_id'] : 0; $columns = isset( $cached['columns'] ) && is_array( $cached['columns'] ) ? $cached['columns'] : []; $keys = isset( $cached['keys'] ) && is_array( $cached['keys'] ) ? $cached['keys'] : []; if ( $post_id <= 0 && empty( $columns ) && isset( $model->columns ) && is_array( $model->columns ) ) { $columns = $model->columns; } return [ 'name' => $name, 'label' => $model->labels['singular_name'] ?? $model->labels['name'] ?? $name, 'table' => $model->table, 'columns' => $columns, 'db_columns' => [], 'keys' => $keys, 'post_id' => $post_id, ]; } public static function is_extension_active( $extension ) { $functions = [ 'mb-admin-columns' => 'mb_admin_columns_load', 'mb-blocks' => 'mb_blocks_load', 'mb-comment-meta' => 'mb_comment_meta_load', 'mb-custom-table' => 'mb_custom_table_load', 'mb-frontend-submission' => 'mb_frontend_submission_load', 'mb-rest-api' => 'mb_rest_api_load', 'mb-settings-page' => 'mb_settings_page_load', 'mb-term-meta' => 'mb_term_meta_load', 'mb-user-meta' => 'mb_user_meta_load', 'meta-box-columns' => 'mb_columns_add_markup', 'meta-box-conditional-logic' => 'mb_conditional_logic_load', 'mb-revision' => 'mb_revision_init', 'mb-views' => 'mb_views_load', ]; $classes = [ 'mb-relationships' => 'MBR_Loader', 'meta-box-group' => 'RWMB_Group', 'meta-box-include-exclude' => 'MB_Include_Exclude', 'meta-box-show-hide' => 'MB_Show_Hide', 'meta-box-tabs' => 'MB_Tabs', 'meta-box-tooltip' => 'MB_Tooltip', 'meta-box-text-limiter' => 'MB_Text_Limiter', ]; if ( isset( $functions[ $extension ] ) ) { return function_exists( $functions[ $extension ] ); } if ( isset( $classes[ $extension ] ) ) { return class_exists( $classes[ $extension ] ); } return false; } public static function tooltip( $content ) { return ''; } public static function get_field_categories(): array { return [ [ 'slug' => 'basic', 'title' => __( 'Basic', 'meta-box-builder' ), ], [ 'slug' => 'advanced', 'title' => __( 'Advanced', 'meta-box-builder' ), ], [ 'slug' => 'html5', 'title' => __( 'HTML5', 'meta-box-builder' ), ], [ 'slug' => 'wordpress', 'title' => __( 'WordPress', 'meta-box-builder' ), ], [ 'slug' => 'upload', 'title' => __( 'Upload', 'meta-box-builder' ), ], [ 'slug' => 'layout', 'title' => __( 'Layout', 'meta-box-builder' ), ], ]; } public static function get_blocks(): array { $registry = WP_Block_Type_Registry::get_instance(); $blocks = $registry->get_all_registered(); $options = []; foreach ( $blocks as $name => $block ) { $title = empty( $block->title ) ? $name : $block->title; $options[] = [ 'value' => $name, 'label' => sprintf( '%s (%s)', $title, $name ), ]; } usort( $options, static function ( $a, $b ) { return strcmp( strtolower( $a['label'] ), strtolower( $b['label'] ) ); } ); return $options; } }