FILE: /var/www/html/wp-includes/build/pages/options-connectors/page-wp-admin.php
SIZE: 10290 bytes
MODIFIED: 2026-08-26 05:34:27
CONTENT:
<?php
/**
* Page: options-connectors (wp-admin integrated)
* Auto-generated by build process.
* Do not edit this file manually.
*
* This version integrates with the standard WordPress admin interface,
* keeping the wp-admin sidebar and scripts/styles intact.
*
* @package wp
*/
// Global storage for options-connectors routes and menu items
global $wp_options_connectors_wp_admin_routes, $wp_options_connectors_wp_admin_menu_items;
$wp_options_connectors_wp_admin_routes = array();
$wp_options_connectors_wp_admin_menu_items = array();
/**
* Register a route for the options-connectors-wp-admin page.
*
* @param string $path Route path (e.g., '/types/$type/edit/$id').
* @param string|null $content_module Script module ID for content (stage/inspector).
* @param string|null $route_module Script module ID for route lifecycle hooks.
*/
function wp_register_options_connectors_wp_admin_route( $path, $content_module = null, $route_module = null ) {
global $wp_options_connectors_wp_admin_routes;
$route = array( 'path' => $path );
if ( ! empty( $content_module ) ) {
$route['content_module'] = $content_module;
}
if ( ! empty( $route_module ) ) {
$route['route_module'] = $route_module;
}
$wp_options_connectors_wp_admin_routes[] = $route;
}
/**
* Register a menu item for the options-connectors-wp-admin page.
* Note: Menu items are registered but not displayed in single-page mode.
*
* @param string $id Menu item ID.
* @param string $label Display label.
* @param string $to Route path to navigate to.
* @param string $parent_id Optional. Parent menu item ID.
*/
function wp_register_options_connectors_wp_admin_menu_item( $id, $label, $to, $parent_id = '' ) {
global $wp_options_connectors_wp_admin_menu_items;
$menu_item = array(
'id' => $id,
'label' => $label,
'to' => $to,
);
if ( ! empty( $parent_id ) ) {
$menu_item['parent'] = $parent_id;
}
$wp_options_connectors_wp_admin_menu_items[] = $menu_item;
}
/**
* Get all registered routes for the options-connectors-wp-admin page.
*
* @return array Array of route objects.
*/
function wp_get_options_connectors_wp_admin_routes() {
global $wp_options_connectors_wp_admin_routes;
return $wp_options_connectors_wp_admin_routes ?? array();
}
/**
* Get all registered menu items for the options-connectors-wp-admin page.
*
* @return array Array of menu item objects.
*/
function wp_get_options_connectors_wp_admin_menu_items() {
global $wp_options_connectors_wp_admin_menu_items;
return $wp_options_connectors_wp_admin_menu_items ?? array();
}
/**
* Preload REST API data for the options-connectors-wp-admin page.
* Automatically called during page rendering.
*/
function wp_options_connectors_wp_admin_preload_data() {
// Define paths to preload - same for all pages
// This must exactly match the _fields list in packages/core-data/src/entities.js,
// same fields in the same order, or the preload is never consumed.
$preload_paths = array(
'/?_fields=description,gmt_offset,home,image_max_bit_depth,image_sizes,image_size_threshold,image_strip_meta,name,site_icon,site_icon_url,site_logo,timezone_string,url,page_for_posts,page_on_front,show_on_front',
array( '/wp/v2/settings', 'OPTIONS' ),
);
// Use rest_preload_api_request to gather the preloaded data
$preload_data = array_reduce(
$preload_paths,
'rest_preload_api_request',
array()
);
// Register the preloading middleware with wp-api-fetch
wp_add_inline_script(
'wp-api-fetch',
sprintf(
'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );',
wp_json_encode( $preload_data )
),
'after'
);
}
/**
* Enqueue scripts and styles for the options-connectors-wp-admin page.
* Hooked to admin_enqueue_scripts.
*
* @param string $hook_suffix The current admin page.
*/
function wp_options_connectors_wp_admin_enqueue_scripts( $hook_suffix ) {
// Check all possible ways this page can be accessed:
// 1. Menu page via admin.php?page=options-connectors-wp-admin (plugin)
// 2. Direct file via options-connectors.php (Core) - screen ID will be 'options-connectors'
$current_screen = get_current_screen();
$is_our_page = (
( isset( $_GET['page'] ) && 'options-connectors-wp-admin' === $_GET['page'] ) || // phpcs:ignore WordPress.Security.NonceVerification.Recommended
( $current_screen && 'options-connectors' === $current_screen->id )
);
if ( ! $is_our_page ) {
return;
}
// Load build constants
$build_constants = require __DIR__ . '/../../constants.php';
/**
* Fires when the options-connectors admin page is initialized so extensions can register routes and menu items.
*/
do_action( 'options-connectors-wp-admin_init' );
// Preload REST API data
wp_options_connectors_wp_admin_preload_data();
// Get all registered routes
$routes = wp_get_options_connectors_wp_admin_routes();
// Get boot module asset file for dependencies
$asset_file = ABSPATH . WPINC . '/js/dist/script-modules/boot/index.min.asset.php';
if ( file_exists( $asset_file ) ) {
$asset = require $asset_file;
// This script serves two purposes:
// 1. It ensures all the globals that are made available to the modules are loaded.
// 2. It initializes the boot module as an inline script.
wp_register_script( 'options-connectors-wp-admin-prerequisites', '', $asset['dependencies'], $asset['version'], true );
$init_modules = [];
/*
* Add inline script to initialize the app using initSinglePage (no menuItems).
* The dynamic import is deferred until DOMContentLoaded so that all classic
* script dependencies of @wordpress/boot (wp-private-apis, wp-components,
* wp-theme, etc.) have finished parsing and executing before the boot module
* evaluates. Otherwise, a modulepreloaded @wordpress/boot can win the race
* against the classic-script-printing pass on fast CDN-fronted hosts in
* Chrome, evaluating before wp.theme.privateApis is defined and throwing
* "Cannot unlock an undefined object". See <https://core.trac.wordpress.org/ticket/65103>.
*/
$init_js_function = <<<'JS'
( mountId, routes, initModules ) => {
const run = async () => {
const mod = await import( "@wordpress/boot" );
mod.initSinglePage( { mountId, routes, initModules } );
};
if ( document.readyState === "loading" ) {
document.addEventListener( "DOMContentLoaded", run );
} else {
run();
}
}
JS;
wp_add_inline_script(
'options-connectors-wp-admin-prerequisites',
sprintf(
'( %s )( %s, %s, %s );',
$init_js_function,
wp_json_encode( 'options-connectors-wp-admin-app', JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
wp_json_encode( $routes, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
wp_json_encode( $init_modules, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
)
);
// Register prerequisites style by filtering script dependencies to find registered styles
$style_dependencies = array_filter(
$asset['dependencies'],
function ( $handle ) {
return wp_style_is( $handle, 'registered' );
}
);
wp_register_style( 'options-connectors-wp-admin-prerequisites', false, $style_dependencies, $asset['version'] );
// Build dependencies for options-connectors-wp-admin module
$boot_dependencies = array(
array(
'import' => 'static',
'id' => '@wordpress/boot',
),
);
// Add init modules as static dependencies
// No init modules configured
// Add all registered routes as dependencies
foreach ( $routes as $route ) {
if ( isset( $route['route_module'] ) ) {
$boot_dependencies[] = array(
'import' => 'static',
'id' => $route['route_module'],
);
}
if ( isset( $route['content_module'] ) ) {
$boot_dependencies[] = array(
'import' => 'dynamic',
'id' => $route['content_module'],
);
}
}
/**
* Filters the boot script-module dependencies for the
* options-connectors-wp-admin page.
*
* Surfaces extending this page can append entries to the boot
* dependency list. Each entry is an array with 'import' (string
* 'static' or 'dynamic') and 'id' (script-module handle) keys.
*
* @param array $boot_dependencies Boot dependencies for the page.
*/
$boot_dependencies = apply_filters(
'options-connectors-wp-admin_boot_dependencies',
$boot_dependencies
);
// Dummy script module to ensure dependencies are loaded
wp_register_script_module(
'options-connectors-wp-admin',
$build_constants['build_url'] . 'pages/options-connectors/loader.js',
$boot_dependencies
);
// Enqueue the boot scripts and styles
wp_enqueue_script( 'options-connectors-wp-admin-prerequisites' );
wp_enqueue_script_module( 'options-connectors-wp-admin' );
wp_enqueue_style( 'options-connectors-wp-admin-prerequisites' );
}
}
/**
* Render the options-connectors-wp-admin page.
* Call this function from add_menu_page or add_submenu_page.
* This renders within the normal WordPress admin interface.
*/
function wp_options_connectors_wp_admin_render_page() {
?>
<style>
/* Critical styles to prevent layout shifts - inlined for immediate application */
#wpwrap {
overflow-y: auto;
}
body.js {
background: #fff;
}
/* Reset wp-admin padding */
body.js #wpcontent {
padding-inline-start: 0;
}
body.js #wpbody-content {
padding-bottom: 0;
}
/* Hide legacy admin elements */
body.js #wpbody-content > div:not(.boot-layout-container):not(#screen-meta) {
display: none;
}
body.js #wpfooter {
display: none;
}
/* Accessibility regions */
.a11y-speak-region {
inset-inline-start: -1px;
top: -1px;
}
/* Admin menu indicators */
ul#adminmenu a.wp-has-current-submenu::after,
ul#adminmenu > li.current > a.current::after {
border-inline-end-color: #fff;
}
/* Media frame fix */
.media-frame select.attachment-filters:last-of-type {
width: auto;
max-width: 100%;
}
/* Responsive overflow fix for #wpwrap */
@media (min-width: 782px) {
#wpwrap {
overflow-y: initial;
}
}
</style>
<div id="options-connectors-wp-admin-app" class="boot-layout-container"></div>
<?php
}
// Hook the enqueue function to admin_enqueue_scripts
add_action( 'admin_enqueue_scripts', 'wp_options_connectors_wp_admin_enqueue_scripts' );
"병사들 목숨보다 돈인가?" 러시아 전차 내부에 '이것'넣어 납품했다!
온라인 커뮤니티
러시아군 전차와 장갑차가 우크라이나 전장에서 잇따라 무력화되며 논란이 지속되던 가운데, 그 근본적인 원인이 공식적으로 밝혀졌다. 최근 밝혀진 바에 따르면, 러시아 국영 군사 연구기관인 ‘니 스탈리(NII Stali)’가 방산 납품 과정에서 대규모 비리를 저질러온 사실이 드러난 것이다.
핵심은 전차의 방호를 담당하는 폭발반응장갑 내부를 정해진 고성능 폭발물이 아닌, 저렴하고 효과가 거의 없는 콘크리트로 채워 납품했다는 점이다. 이는 명백한 조작 행위이자, 전투 중 병사들의 생명을 위협하는 중대한 범죄에 해당한다. 이런 배경이 있었기에 러시아의 기갑 전력이 우크라이나군의 비교적 약한 화력에도 속수무책으로 파괴된 상황이 벌어진 셈이다.
온라인 커뮤니티
폭발반응장갑의 원리와 ‘콘크리트 장갑’의 치명적 차이
폭발반응장갑은 적의 탄두가 전차에 명중할 때 발생하는 ‘메탈제트’ 효과를 상쇄하기 위해 설계된 첨단 방호 장치다. 내부에 폭약을 삽입해 적의 포탄이 접촉하는 순간 반응폭발을 일으키고, 이를 통해 침투력을 약화시켜 전차 내부를 보호하는 방식이다. 특히 최신 대전차 미사일이나 기관포에 대한 생존성을 크게 높이는 핵심 기술로 평가받는다.
그런데 이 폭발반응장갑의 내부에 폭약 대신 콘크리트를 넣는 것은, 아예 방호 기능을 포기하는 것과 다름없다. 콘크리트는 밀도가 낮고 반응 능력이 없어 포탄의 관통력을 전혀 흡수하지 못한다. 이런 상황에서 러시아 기갑장비가 M2 브래들리 장갑차의 25mm 기관포에도 쉽게 관통당한 이유는 명백해진다. 방산 비리로 인한 구조적 결함이 전장을 지배하고 있었던 것이다.
밀리돔
돈을 위해 병사들을 판 거래… 러시아 방산의 민낯
니 스탈리가 폭발물 대신 콘크리트를 사용한 이유는 단순하다. 원가 절감과 부당 이득 획득을 위해서다. 고가의 고폭약 대신 저렴한 건축 자재를 사용하면 막대한 차액을 챙길 수 있기 때문이다. 이러한 행위는 단순한 부정부패를 넘어, 군의 신뢰성과 작전 능력을 스스로 붕괴시킨 행위다. 러시아는 기갑 전력을 자국 군사력의 상징처럼 강조해왔지만, 그 실체는 부실한 방호력과 조작된 장비로 드러나며 국제적 조롱의 대상이 되고 있다.
실제로 우크라이나 전장에서 수백 대 이상의 러시아 전차가 격파된 이유가 단순히 전략이나 무기 성능 문제가 아니라, 내부 방호 시스템 자체가 무용지물이었기 때문이라는 분석도 나오고 있다. 이는 단순한 군수 실수나 기술적 오류가 아닌, 체계적인 비리와 기만에 의해 발생한 참사다.
온라인 커뮤니티
기갑 신화의 붕괴, 러시아 군사 이미지에 치명타
이번 사건은 단지 한 기관의 부패를 넘어서, 러시아 군사 체계 전반에 대한 신뢰를 무너뜨리는 계기가 되고 있다. 특히 전차는 러시아군의 전통적인 주력 병기였고, 전 세계 무기 시장에서 주요 수출 품목이기도 했다. 하지만 콘크리트로 채워진 장갑차라는 사실이 드러난 순간, 러시아산 무기 전반에 대한 신뢰도는 급락하게 되었다.
앞으로 러시아 방산업계가 국제 시장에서 회복하는 데는 상당한 시간이 필요할 것으로 보인다. 더불어 내부 고발이나 외부 감시 없이 운영되는 국영 기관의 폐쇄성과 무책임한 납품 관행이 이번 사태를 불러온 근본 원인으로 지목되고 있다. 결국 러시아는 전쟁에서의 피해뿐 아니라, 군사 강국 이미지에 대한 심각한 타격을 입게 된 셈이다.
밀덕 군대 이야기
content@viewus.co.kr
[AI 추천] 랭킹 뉴스
‘낙상 사고’ 허영만, 중환자실 이송…한 달째
람보르기니 무르시엘라고 LP 670-4 SV 수동 경매 단 5대 경매 등장
유럽의 유명 축구 구단들을 쇼핑하듯 사고있는 한국인 억만장자 여성
"동창회 나가지 마세요.." 55살 넘어 동창회 가면 안 되는 이유 3가지
"뒤통수 맞지 않으려면.." 60대 이후로 가져야할 마음가짐 3가지
"현관문 위쪽 나사를 돌려 보세요" 20년차 도어 기사의 '진짜 꿀팁'
공유하기
https://feed.viewus.co.kr/ai/article/130208/
댓글0