PATH:
home
/
lab2454c
/
sothebankuab.com
/
wp-includes
<?php /** * WP_Theme_JSON_Resolver class * * @package WordPress * @subpackage Theme * @since 5.8.0 */ /** * Class that abstracts the processing of the different data sources * for site-level config and offers an API to work with them. * * @access private */ class WP_Theme_JSON_Resolver { /** * Container for data coming from core. * * @since 5.8.0 * @var WP_Theme_JSON */ private static $core = null; /** * Container for data coming from the theme. * * @since 5.8.0 * @var WP_Theme_JSON */ private static $theme = null; /** * Whether or not the theme supports theme.json. * * @since 5.8.0 * @var bool */ private static $theme_has_support = null; /** * Structure to hold i18n metadata. * * @since 5.8.0 * @var array */ private static $theme_json_i18n = null; /** * Processes a file that adheres to the theme.json schema * and returns an array with its contents, or a void array if none found. * * @since 5.8.0 * * @param string $file_path Path to file. Empty if no file. * @return array Contents that adhere to the theme.json schema. */ private static function read_json_file( $file_path ) { $config = array(); if ( $file_path ) { $decoded_file = json_decode( file_get_contents( $file_path ), true ); $json_decoding_error = json_last_error(); if ( JSON_ERROR_NONE !== $json_decoding_error ) { trigger_error( "Error when decoding a theme.json schema at path $file_path " . json_last_error_msg() ); return $config; } if ( is_array( $decoded_file ) ) { $config = $decoded_file; } } return $config; } /** * Converts a tree as in i18n-theme.json into a linear array * containing metadata to translate a theme.json file. * * For example, given this input: * * { * "settings": { * "*": { * "typography": { * "fontSizes": [ { "name": "Font size name" } ], * "fontStyles": [ { "name": "Font size name" } ] * } * } * } * } * * will return this output: * * [ * 0 => [ * 'path' => [ 'settings', '*', 'typography', 'fontSizes' ], * 'key' => 'name', * 'context' => 'Font size name' * ], * 1 => [ * 'path' => [ 'settings', '*', 'typography', 'fontStyles' ], * 'key' => 'name', * 'context' => 'Font style name' * ] * ] * * @since 5.8.0 * * @param array $i18n_partial A tree that follows the format of i18n-theme.json. * @param array $current_path Optional. Keeps track of the path as we walk down the given tree. * Default empty array. * @return array A linear array containing the paths to translate. */ private static function extract_paths_to_translate( $i18n_partial, $current_path = array() ) { $result = array(); foreach ( $i18n_partial as $property => $partial_child ) { if ( is_numeric( $property ) ) { foreach ( $partial_child as $key => $context ) { $result[] = array( 'path' => $current_path, 'key' => $key, 'context' => $context, ); } return $result; } $result = array_merge( $result, self::extract_paths_to_translate( $partial_child, array_merge( $current_path, array( $property ) ) ) ); } return $result; } /** * Returns a data structure used in theme.json translation. * * @since 5.8.0 * * @return array An array of theme.json fields that are translatable and the keys that are translatable. */ public static function get_fields_to_translate() { if ( null === self::$theme_json_i18n ) { $file_structure = self::read_json_file( __DIR__ . '/theme-i18n.json' ); self::$theme_json_i18n = self::extract_paths_to_translate( $file_structure ); } return self::$theme_json_i18n; } /** * Translates a chunk of the loaded theme.json structure. * * @since 5.8.0 * * @param array $array_to_translate The chunk of theme.json to translate. * @param string $key The key of the field that contains the string to translate. * @param string $context The context to apply in the translation call. * @param string $domain Text domain. Unique identifier for retrieving translated strings. * @return array Returns the modified $theme_json chunk. */ private static function translate_theme_json_chunk( array $array_to_translate, $key, $context, $domain ) { foreach ( $array_to_translate as $item_key => $item_to_translate ) { if ( empty( $item_to_translate[ $key ] ) ) { continue; } // phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText,WordPress.WP.I18n.NonSingularStringLiteralContext,WordPress.WP.I18n.NonSingularStringLiteralDomain $array_to_translate[ $item_key ][ $key ] = translate_with_gettext_context( $array_to_translate[ $item_key ][ $key ], $context, $domain ); } return $array_to_translate; } /** * Given a theme.json structure modifies it in place to update certain values * by its translated strings according to the language set by the user. * * @since 5.8.0 * * @param array $theme_json The theme.json to translate. * @param string $domain Optional. Text domain. Unique identifier for retrieving translated strings. * Default 'default'. * @return array Returns the modified $theme_json_structure. */ private static function translate( $theme_json, $domain = 'default' ) { $fields = self::get_fields_to_translate(); foreach ( $fields as $field ) { $path = $field['path']; $key = $field['key']; $context = $field['context']; /* * We need to process the paths that include '*' separately. * One example of such a path would be: * [ 'settings', 'blocks', '*', 'color', 'palette' ] */ $nodes_to_iterate = array_keys( $path, '*', true ); if ( ! empty( $nodes_to_iterate ) ) { /* * At the moment, we only need to support one '*' in the path, so take it directly. * - base will be [ 'settings', 'blocks' ] * - data will be [ 'color', 'palette' ] */ $base_path = array_slice( $path, 0, $nodes_to_iterate[0] ); $data_path = array_slice( $path, $nodes_to_iterate[0] + 1 ); $base_tree = _wp_array_get( $theme_json, $base_path, array() ); foreach ( $base_tree as $node_name => $node_data ) { $array_to_translate = _wp_array_get( $node_data, $data_path, null ); if ( is_null( $array_to_translate ) ) { continue; } // Whole path will be [ 'settings', 'blocks', 'core/paragraph', 'color', 'palette' ]. $whole_path = array_merge( $base_path, array( $node_name ), $data_path ); $translated_array = self::translate_theme_json_chunk( $array_to_translate, $key, $context, $domain ); _wp_array_set( $theme_json, $whole_path, $translated_array ); } } else { $array_to_translate = _wp_array_get( $theme_json, $path, null ); if ( is_null( $array_to_translate ) ) { continue; } $translated_array = self::translate_theme_json_chunk( $array_to_translate, $key, $context, $domain ); _wp_array_set( $theme_json, $path, $translated_array ); } } return $theme_json; } /** * Return core's origin config. * * @since 5.8.0 * * @return WP_Theme_JSON Entity that holds core data. */ public static function get_core_data() { if ( null !== self::$core ) { return self::$core; } $config = self::read_json_file( __DIR__ . '/theme.json' ); $config = self::translate( $config ); self::$core = new WP_Theme_JSON( $config, 'core' ); return self::$core; } /** * Returns the theme's data. * * Data from theme.json can be augmented via the $theme_support_data variable. * This is useful, for example, to backfill the gaps in theme.json that a theme * has declared via add_theme_supports. * * Note that if the same data is present in theme.json and in $theme_support_data, * the theme.json's is not overwritten. * * @since 5.8.0 * * @param array $theme_support_data Optional. Theme support data in theme.json format. * Default empty array. * @return WP_Theme_JSON Entity that holds theme data. */ public static function get_theme_data( $theme_support_data = array() ) { if ( null === self::$theme ) { $theme_json_data = self::read_json_file( self::get_file_path_from_theme( 'theme.json' ) ); $theme_json_data = self::translate( $theme_json_data, wp_get_theme()->get( 'TextDomain' ) ); self::$theme = new WP_Theme_JSON( $theme_json_data ); } if ( empty( $theme_support_data ) ) { return self::$theme; } /* * We want the presets and settings declared in theme.json * to override the ones declared via add_theme_support. */ $with_theme_supports = new WP_Theme_JSON( $theme_support_data ); $with_theme_supports->merge( self::$theme ); return $with_theme_supports; } /** * There are different sources of data for a site: core and theme. * * While the getters {@link get_core_data}, {@link get_theme_data} return the raw data * from the respective origins, this method merges them all together. * * If the same piece of data is declared in different origins (core and theme), * the last origin overrides the previous. For example, if core disables custom colors * but a theme enables them, the theme config wins. * * @since 5.8.0 * * @param array $settings Optional. Existing block editor settings. Default empty array. * @return WP_Theme_JSON */ public static function get_merged_data( $settings = array() ) { $theme_support_data = WP_Theme_JSON::get_from_editor_settings( $settings ); $result = new WP_Theme_JSON(); $result->merge( self::get_core_data() ); $result->merge( self::get_theme_data( $theme_support_data ) ); return $result; } /** * Whether the current theme has a theme.json file. * * @since 5.8.0 * * @return bool */ public static function theme_has_support() { if ( ! isset( self::$theme_has_support ) ) { self::$theme_has_support = (bool) self::get_file_path_from_theme( 'theme.json' ); } return self::$theme_has_support; } /** * Builds the path to the given file and checks that it is readable. * * If it isn't, returns an empty string, otherwise returns the whole file path. * * @since 5.8.0 * * @param string $file_name Name of the file. * @return string The whole file path or empty if the file doesn't exist. */ private static function get_file_path_from_theme( $file_name ) { /* * This used to be a locate_template call. However, that method proved problematic * due to its use of constants (STYLESHEETPATH) that threw errors in some scenarios. * * When the theme.json merge algorithm properly supports child themes, * this should also fall back to the template path, as locate_template did. */ $located = ''; $candidate = get_stylesheet_directory() . '/' . $file_name; if ( is_readable( $candidate ) ) { $located = $candidate; } return $located; } /** * Cleans the cached data so it can be recalculated. * * @since 5.8.0 */ public static function clean_cached_data() { self::$core = null; self::$theme = null; self::$theme_has_support = null; self::$theme_json_i18n = null; } }
[+]
..
[-] class-wp-block-pattern-categories-registry.php
[edit]
[-] session.php
[edit]
[-] category.php
[edit]
[-] http.php
[edit]
[-] class-wp-editor.php
[edit]
[-] atomlib.php
[edit]
[+]
js
[-] https-migration.php
[edit]
[-] class-phpmailer.php
[edit]
[-] theme.php
[edit]
[-] class-wp-user-request.php
[edit]
[-] feed-rdf.php
[edit]
[-] functions.wp-scripts.php
[edit]
[-] registration.php
[edit]
[-] block-template.php
[edit]
[-] shortcodes.php
[edit]
[-] class-wp-oembed-controller.php
[edit]
[-] class-wp-dependency.php
[edit]
[+]
block-supports
[+]
widgets
[-] class-wp-comment-query.php
[edit]
[-] class-wp-hook.php
[edit]
[-] ms-site.php
[edit]
[+]
random_compat
[-] deprecated.php
[edit]
[-] class-wp-application-passwords.php
[edit]
[-] class-wp-term-query.php
[edit]
[-] feed-atom.php
[edit]
[-] class-wp.php
[edit]
[+]
sodium_compat
[+]
IXR
[-] ms-default-filters.php
[edit]
[-] class-wp-locale.php
[edit]
[+]
sitemaps
[-] class-wp-user-query.php
[edit]
[-] formatting.php
[edit]
[+]
pomo
[-] feed.php
[edit]
[-] wp-blog-header.php
[edit]
[-] theme-i18n.json
[edit]
[-] default-constants.php
[edit]
[-] class-wp-image-editor-imagick.php
[edit]
[-] comment.php
[edit]
[-] class-wp-ajax-response.php
[edit]
[-] option.php
[edit]
[-] block-editor.php
[edit]
[-] class-wp-post.php
[edit]
[-] class-http.php
[edit]
[-] class-wp-list-util.php
[edit]
[-] class-IXR.php
[edit]
[-] class-wp-rewrite.php
[edit]
[-] class-wp-http-proxy.php
[edit]
[-] template.php
[edit]
[-] block-patterns.php
[edit]
[-] class-walker-comment.php
[edit]
[-] locale.php
[edit]
[-] class-wp-post-type.php
[edit]
[-] class-wp-block-parser.php
[edit]
[+]
Requests
[-] wp-db.php
[edit]
[-] spl-autoload-compat.php
[edit]
[-] class-wp-http-requests-hooks.php
[edit]
[-] capabilities.php
[edit]
[-] pluggable.php
[edit]
[-] widgets.php
[edit]
[-] vars.php
[edit]
[-] post.php
[edit]
[-] feed-rss2-comments.php
[edit]
[-] class-wp-block-patterns-registry.php
[edit]
[-] plugin.php
[edit]
[-] functions.wp-styles.php
[edit]
[-] pluggable-deprecated.php
[edit]
[-] class-wp-image-editor.php
[edit]
[+]
certificates
[-] class-wp-recovery-mode-cookie-service.php
[edit]
[-] rss.php
[edit]
[-] class-wp-fatal-error-handler.php
[edit]
[-] default-filters.php
[edit]
[-] comment-template.php
[edit]
[-] class-wp-error.php
[edit]
[-] class-wp-term.php
[edit]
[-] class-wp-block-list.php
[edit]
[-] cron.php
[edit]
[-] class-wp-block-type.php
[edit]
[-] update.php
[edit]
[-] class-wp-paused-extensions-storage.php
[edit]
[-] link-template.php
[edit]
[-] class-wp-customize-control.php
[edit]
[-] class-wp-feed-cache.php
[edit]
[-] category-template.php
[edit]
[-] class-wp-theme.php
[edit]
[-] media-template.php
[edit]
[-] class-wp-block-supports.php
[edit]
[-] template-loader.php
[edit]
[-] revision.php
[edit]
[+]
theme-compat
[-] class-wp-widget.php
[edit]
[-] class-wp-session-tokens.php
[edit]
[-] ms-settings.php
[edit]
[-] class-wp-site-query.php
[edit]
[-] class-wp-simplepie-file.php
[edit]
[-] class-wp-customize-nav-menus.php
[edit]
[-] sitemaps.php
[edit]
[-] post-thumbnail-template.php
[edit]
[-] class-wp-taxonomy.php
[edit]
[-] class-smtp.php
[edit]
[-] class-wp-matchesmapregex.php
[edit]
[-] class-phpass.php
[edit]
[-] class-wp-tax-query.php
[edit]
[-] embed-template.php
[edit]
[-] class-wp-theme-json.php
[edit]
[-] compat.php
[edit]
[-] rest-api.php
[edit]
[-] bookmark-template.php
[edit]
[-] class-pop3.php
[edit]
[-] class-wp-recovery-mode-link-service.php
[edit]
[-] bookmark.php
[edit]
[-] media.php
[edit]
[-] class-wp-text-diff-renderer-inline.php
[edit]
[-] author-template.php
[edit]
[-] class-wp-block-type-registry.php
[edit]
[-] embed.php
[edit]
[-] class-wp-recovery-mode-key-service.php
[edit]
[+]
blocks
[-] cache.php
[edit]
[-] admin-bar.php
[edit]
[+]
css
[-] ms-network.php
[edit]
[-] class-wp-customize-panel.php
[edit]
[-] rss-functions.php
[edit]
[-] class-walker-page-dropdown.php
[edit]
[-] class-wp-network-query.php
[edit]
[-] nav-menu.php
[edit]
[-] nav-menu-template.php
[edit]
[-] error-protection.php
[edit]
[-] query.php
[edit]
[+]
rest-api
[-] default-widgets.php
[edit]
[-] feed-rss.php
[edit]
[-] feed-atom-comments.php
[edit]
[-] class-wp-block-styles-registry.php
[edit]
[-] registration-functions.php
[edit]
[+]
Text
[+]
assets
[-] class-wp-customize-setting.php
[edit]
[-] class-wp-block-template.php
[edit]
[-] version.php
[edit]
[-] class-wp-customize-section.php
[edit]
[-] general-template.php
[edit]
[-] wp-diff.php
[edit]
[-] canonical.php
[edit]
[-] class-wp-walker.php
[edit]
[-] class-wp-role.php
[edit]
[-] taxonomy.php
[edit]
[-] class.wp-scripts.php
[edit]
[-] class-wp-roles.php
[edit]
[-] class-wp-feed-cache-transient.php
[edit]
[-] class-wp-http-response.php
[edit]
[-] class-wp-user-meta-session-tokens.php
[edit]
[-] .htaccess
[edit]
[-] class-walker-page.php
[edit]
[-] kses.php
[edit]
[+]
fonts
[+]
block-patterns
[-] ms-load.php
[edit]
[-] meta.php
[edit]
[-] theme-templates.php
[edit]
[-] class.wp-dependencies.php
[edit]
[-] post-formats.php
[edit]
[-] l10n.php
[edit]
[-] class-wp-customize-manager.php
[edit]
[-] ms-blogs.php
[edit]
[-] class-walker-category-dropdown.php
[edit]
[-] class-wp-user.php
[edit]
[+]
PHPMailer
[-] ms-files.php
[edit]
[-] rewrite.php
[edit]
[-] script-loader.php
[edit]
[-] class-wp-comment.php
[edit]
[+]
customize
[-] functions.php
[edit]
[-] load.php
[edit]
[+]
images
[-] class-wp-metadata-lazyloader.php
[edit]
[-] class-wp-admin-bar.php
[edit]
[+]
ID3
[-] wlwmanifest.xml
[edit]
[-] class-wp-recovery-mode.php
[edit]
[-] class-wp-simplepie-sanitize-kses.php
[edit]
[-] class-wp-embed.php
[edit]
[-] user.php
[edit]
[-] blocks.php
[edit]
[-] class.wp-styles.php
[edit]
[-] class-oembed.php
[edit]
[-] class-snoopy.php
[edit]
[-] class-wp-block.php
[edit]
[-] post-template.php
[edit]
[-] class-wp-text-diff-renderer-table.php
[edit]
[-] class-requests.php
[edit]
[+]
SimplePie
[-] ms-functions.php
[edit]
[-] class-wp-http-streams.php
[edit]
[-] cache-compat.php
[edit]
[-] ms-deprecated.php
[edit]
[-] about.php
[edit]
[-] class-walker-category.php
[edit]
[-] class-wp-http-requests-response.php
[edit]
[-] class-wp-http-ixr-client.php
[edit]
[-] class-wp-object-cache.php
[edit]
[-] class-wp-http-curl.php
[edit]
[-] date.php
[edit]
[-] theme.json
[edit]
[-] class-wp-http-cookie.php
[edit]
[-] feed-rss2.php
[edit]
[-] class-wp-widget-factory.php
[edit]
[-] class-wp-meta-query.php
[edit]
[-] class-wp-oembed.php
[edit]
[-] error_log
[edit]
[-] class-wp-customize-widgets.php
[edit]
[-] class-wp-locale-switcher.php
[edit]
[-] ms-default-constants.php
[edit]
[-] robots-template.php
[edit]
[-] wp-cron.php
[edit]
[-] template-canvas.php
[edit]
[-] class-wp-block-editor-context.php
[edit]
[-] class-wp-http-encoding.php
[edit]
[-] class-simplepie.php
[edit]
[-] class-wp-network.php
[edit]
[-] block-template-utils.php
[edit]
[-] class-wp-image-editor-gd.php
[edit]
[-] class-feed.php
[edit]
[-] class-json.php
[edit]
[-] class-walker-nav-menu.php
[edit]
[-] class-wp-site.php
[edit]
[-] class-wp-theme-json-resolver.php
[edit]
[-] class-wp-query.php
[edit]
[-] class-wp-date-query.php
[edit]
[-] class-wp-recovery-mode-email-service.php
[edit]
[-] https-detection.php
[edit]
[-] class-wp-xmlrpc-server.php
[edit]