$candidate Candidate metadata. * @return bool */ function ipscmi_corekit_register_loader_candidate_v1( array $candidate ) { $required_keys = array( 'id', 'version', 'main_file', 'path', 'url', 'template_path', 'provides' ); foreach ( $required_keys as $required_key ) { if ( ! array_key_exists( $required_key, $candidate ) ) { return false; } } $id = trim( (string) $candidate['id'] ); $version = trim( (string) $candidate['version'] ); $main_file = wp_normalize_path( (string) $candidate['main_file'] ); $path = untrailingslashit( wp_normalize_path( (string) $candidate['path'] ) ); $url = untrailingslashit( (string) $candidate['url'] ); $template_path = untrailingslashit( wp_normalize_path( (string) $candidate['template_path'] ) ); if ( '' === $id || 1 !== preg_match( '/^[a-z0-9][a-z0-9._-]*$/', $id ) || '' === $version || '' === $main_file || ! is_readable( $main_file ) || $path !== untrailingslashit( wp_normalize_path( dirname( $main_file ) ) ) || '' === $url || '' === $template_path || ! is_array( $candidate['provides'] ) ) { return false; } $provides = array(); foreach ( $candidate['provides'] as $capability => $enabled ) { if ( is_int( $capability ) ) { $capability = $enabled; $enabled = true; } $capability = trim( (string) $capability ); if ( true !== $enabled || 1 !== preg_match( '/^[a-z0-9][a-z0-9._-]*$/', $capability ) ) { continue; } $provides[ $capability ] = true; } ksort( $provides ); if ( empty( $provides ) ) { return false; } $normalized = array( 'id' => $id, 'version' => $version, 'main_file' => $main_file, 'path' => $path, 'url' => $url, 'template_path' => $template_path, 'provides' => $provides, ); global $ipscmi_corekit_loader_candidates_v1; if ( ! isset( $ipscmi_corekit_loader_candidates_v1 ) || ! is_array( $ipscmi_corekit_loader_candidates_v1 ) ) { $ipscmi_corekit_loader_candidates_v1 = array(); } if ( isset( $ipscmi_corekit_loader_candidates_v1[ $main_file ] ) ) { return $normalized === $ipscmi_corekit_loader_candidates_v1[ $main_file ]; } $ipscmi_corekit_loader_candidates_v1[ $main_file ] = $normalized; return true; } } if ( ! function_exists( 'ipscmi_corekit_require_loader_capability_v1' ) ) { /** * Add one capability required by an active CoreKit consumer. * * @param string $capability Capability identifier. * @return bool */ function ipscmi_corekit_require_loader_capability_v1( $capability ) { $capability = trim( (string) $capability ); if ( 1 !== preg_match( '/^[a-z0-9][a-z0-9._-]*$/', $capability ) ) { return false; } global $ipscmi_corekit_loader_requirements_v1; if ( ! isset( $ipscmi_corekit_loader_requirements_v1 ) || ! is_array( $ipscmi_corekit_loader_requirements_v1 ) ) { $ipscmi_corekit_loader_requirements_v1 = array(); } $ipscmi_corekit_loader_requirements_v1[ $capability ] = true; return true; } } if ( ! function_exists( 'ipscmi_corekit_select_loader_candidate_v1' ) ) { /** * Select the strongest candidate that satisfies every active requirement. * * @param array> $candidates Candidate pool. * @param array $requirements Required capabilities. * @return array|null */ function ipscmi_corekit_select_loader_candidate_v1( array $candidates, array $requirements ) { $required_capabilities = array(); foreach ( $requirements as $capability => $enabled ) { if ( is_int( $capability ) ) { $capability = $enabled; $enabled = true; } $capability = trim( (string) $capability ); if ( true === $enabled && 1 === preg_match( '/^[a-z0-9][a-z0-9._-]*$/', $capability ) ) { $required_capabilities[ $capability ] = true; } } $eligible = array(); foreach ( $candidates as $pool_key => $candidate ) { if ( ! is_array( $candidate ) ) { continue; } $id = isset( $candidate['id'] ) ? trim( (string) $candidate['id'] ) : ''; $version = isset( $candidate['version'] ) ? trim( (string) $candidate['version'] ) : ''; $main_file = isset( $candidate['main_file'] ) ? wp_normalize_path( (string) $candidate['main_file'] ) : ''; $provides = isset( $candidate['provides'] ) && is_array( $candidate['provides'] ) ? $candidate['provides'] : array(); if ( '' === $id || '' === $version || '' === $main_file || $main_file !== wp_normalize_path( (string) $pool_key ) || ! is_readable( $main_file ) ) { continue; } foreach ( $required_capabilities as $capability => $required ) { if ( true === $required && ( ! isset( $provides[ $capability ] ) || true !== $provides[ $capability ] ) ) { continue 2; } } $eligible[] = $candidate; } if ( empty( $eligible ) ) { return null; } $priorities = apply_filters( 'ipscmi_corekit_loader_priorities', array() ); $priorities = is_array( $priorities ) ? $priorities : array(); $get_priority = static function( array $candidate ) use ( $priorities ): int { $id = (string) $candidate['id']; if ( array_key_exists( $id, $priorities ) ) { return (int) $priorities[ $id ]; } $matches = array(); $path = wp_normalize_path( (string) $candidate['main_file'] ); if ( preg_match( '#/plugins/([^/]+)/#', $path, $matches ) && ! empty( $matches[1] ) && array_key_exists( $matches[1], $priorities ) ) { return (int) $priorities[ $matches[1] ]; } return 0; }; usort( $eligible, static function( array $left, array $right ) use ( $get_priority ): int { $version_order = version_compare( (string) $right['version'], (string) $left['version'] ); if ( 0 !== $version_order ) { return $version_order; } $left_priority = $get_priority( $left ); $right_priority = $get_priority( $right ); if ( $left_priority !== $right_priority ) { return $left_priority > $right_priority ? -1 : 1; } return strcmp( (string) $left['main_file'], (string) $right['main_file'] ); } ); return reset( $eligible ); } } if ( ! function_exists( 'ipscmi_corekit_boot_loader_election_v1' ) ) { /** * Materialize exactly one canonical CoreKit winner. * * @return void */ function ipscmi_corekit_boot_loader_election_v1() { if ( defined( 'IPSCMI_COREKIT_PLUGIN' ) ) { return; } global $ipscmi_corekit_loader_candidates_v1, $ipscmi_corekit_loader_requirements_v1, $ipscmi_corekit_selected_candidate_v1; $candidates = is_array( $ipscmi_corekit_loader_candidates_v1 ?? null ) ? $ipscmi_corekit_loader_candidates_v1 : array(); $requirements = is_array( $ipscmi_corekit_loader_requirements_v1 ?? null ) ? $ipscmi_corekit_loader_requirements_v1 : array(); $selected = ipscmi_corekit_select_loader_candidate_v1( $candidates, $requirements ); if ( ! is_array( $selected ) ) { unset( $ipscmi_corekit_selected_candidate_v1 ); return; } if ( defined( 'IPSCMI_COREKIT_SELECTED_CANDIDATE_ID' ) && (string) IPSCMI_COREKIT_SELECTED_CANDIDATE_ID !== (string) $selected['id'] ) { return; } $ipscmi_corekit_selected_candidate_v1 = $selected; if ( ! defined( 'IPSCMI_COREKIT_SELECTED_CANDIDATE_ID' ) ) { define( 'IPSCMI_COREKIT_SELECTED_CANDIDATE_ID', (string) $selected['id'] ); } require_once $selected['main_file']; if ( ! defined( 'IPSCMI_COREKIT_PLUGIN' ) ) { unset( $ipscmi_corekit_selected_candidate_v1 ); } } } ( static function() { global $ipscmi_corekit_loader_candidates; $default_headers = array( 'Name' => 'Framework Name', 'Version' => 'Version', 'Author' => 'Author', 'TextDomain' => 'Text Domain', 'DomainPath' => 'Domain Path', ); $fw_init_file = __FILE__; $fw_folder = trailingslashit( dirname( $fw_init_file ) ); $fw_data = get_file_data( $fw_init_file, $default_headers ); $fw_version = isset( $fw_data['Version'] ) ? (string) $fw_data['Version'] : ''; $fw_main_file = wp_normalize_path( $fw_folder . 'plugin.php' ); $fw_candidate = array( 'id' => 'ipscmi-order-cart', 'version' => $fw_version, 'main_file' => $fw_main_file, 'path' => wp_normalize_path( IPSCMI_ORDER_CART_COREKIT_PLUGIN_PATH ), 'url' => IPSCMI_ORDER_CART_COREKIT_PLUGIN_URL, 'template_path' => wp_normalize_path( IPSCMI_ORDER_CART_COREKIT_PLUGIN_TEMPLATE_PATH ), 'provides' => array( 'shared-system-status-v1' => true, ), ); ipscmi_corekit_register_loader_candidate_v1( $fw_candidate ); ipscmi_corekit_require_loader_capability_v1( 'shared-system-status-v1' ); /* * Keep the prior selected-candidate shape available to older canonical * consumers, but never schedule a second Cart election from this pool. */ $legacy_candidate = array( $fw_version => $fw_main_file ); if ( empty( $ipscmi_corekit_loader_candidates ) || ! is_array( $ipscmi_corekit_loader_candidates ) ) { $ipscmi_corekit_loader_candidates = $legacy_candidate; return; } $current_version = (string) key( $ipscmi_corekit_loader_candidates ); $current_path = (string) reset( $ipscmi_corekit_loader_candidates ); if ( version_compare( $current_version, $fw_version, '<' ) ) { $ipscmi_corekit_loader_candidates = $legacy_candidate; return; } if ( version_compare( $current_version, $fw_version, '>' ) ) { return; } $priorities = apply_filters( 'ipscmi_corekit_loader_priorities', array() ); $current_slug = basename( dirname( wp_normalize_path( $current_path ), 4 ) ); $cart_slug = basename( dirname( $fw_main_file, 4 ) ); $current_priority = is_array( $priorities ) && isset( $priorities[ $current_slug ] ) ? (int) $priorities[ $current_slug ] : 0; $cart_priority = is_array( $priorities ) && isset( $priorities[ $cart_slug ] ) ? (int) $priorities[ $cart_slug ] : 0; if ( $cart_priority > $current_priority || ( $cart_priority === $current_priority && strcmp( $fw_main_file, $current_path ) < 0 ) ) { $ipscmi_corekit_loader_candidates = $legacy_candidate; } } )(); if ( ! defined( 'IPSCMI_COREKIT_ELECTION_V1_REGISTERED' ) ) { define( 'IPSCMI_COREKIT_ELECTION_V1_REGISTERED', true ); add_action( 'plugins_loaded', 'ipscmi_corekit_boot_loader_election_v1', 9 ); }