Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-inclu...
File: class-wp-customize-manager.php
break;
[2000] Fix | Delete
}
[2001] Fix | Delete
}
[2002] Fix | Delete
[2003] Fix | Delete
if ( $is_allowed ) {
[2004] Fix | Delete
$query_params = array(
[2005] Fix | Delete
'customize_changeset_uuid' => $this->changeset_uuid(),
[2006] Fix | Delete
);
[2007] Fix | Delete
if ( ! $this->is_theme_active() ) {
[2008] Fix | Delete
$query_params['customize_theme'] = $this->get_stylesheet();
[2009] Fix | Delete
}
[2010] Fix | Delete
if ( $this->messenger_channel ) {
[2011] Fix | Delete
$query_params['customize_messenger_channel'] = $this->messenger_channel;
[2012] Fix | Delete
}
[2013] Fix | Delete
$url = add_query_arg( $query_params, $url );
[2014] Fix | Delete
}
[2015] Fix | Delete
[2016] Fix | Delete
return $url;
[2017] Fix | Delete
}
[2018] Fix | Delete
[2019] Fix | Delete
/**
[2020] Fix | Delete
* Prevents sending a 404 status when returning the response for the customize
[2021] Fix | Delete
* preview, since it causes the jQuery Ajax to fail. Send 200 instead.
[2022] Fix | Delete
*
[2023] Fix | Delete
* @since 4.0.0
[2024] Fix | Delete
* @deprecated 4.7.0
[2025] Fix | Delete
*/
[2026] Fix | Delete
public function customize_preview_override_404_status() {
[2027] Fix | Delete
_deprecated_function( __METHOD__, '4.7.0' );
[2028] Fix | Delete
}
[2029] Fix | Delete
[2030] Fix | Delete
/**
[2031] Fix | Delete
* Prints base element for preview frame.
[2032] Fix | Delete
*
[2033] Fix | Delete
* @since 3.4.0
[2034] Fix | Delete
* @deprecated 4.7.0
[2035] Fix | Delete
*/
[2036] Fix | Delete
public function customize_preview_base() {
[2037] Fix | Delete
_deprecated_function( __METHOD__, '4.7.0' );
[2038] Fix | Delete
}
[2039] Fix | Delete
[2040] Fix | Delete
/**
[2041] Fix | Delete
* Prints a workaround to handle HTML5 tags in IE < 9.
[2042] Fix | Delete
*
[2043] Fix | Delete
* @since 3.4.0
[2044] Fix | Delete
* @deprecated 4.7.0 Customizer no longer supports IE8, so all supported browsers recognize HTML5.
[2045] Fix | Delete
*/
[2046] Fix | Delete
public function customize_preview_html5() {
[2047] Fix | Delete
_deprecated_function( __FUNCTION__, '4.7.0' );
[2048] Fix | Delete
}
[2049] Fix | Delete
[2050] Fix | Delete
/**
[2051] Fix | Delete
* Prints CSS for loading indicators for the Customizer preview.
[2052] Fix | Delete
*
[2053] Fix | Delete
* @since 4.2.0
[2054] Fix | Delete
*/
[2055] Fix | Delete
public function customize_preview_loading_style() {
[2056] Fix | Delete
?>
[2057] Fix | Delete
<style>
[2058] Fix | Delete
body.wp-customizer-unloading {
[2059] Fix | Delete
opacity: 0.25;
[2060] Fix | Delete
cursor: progress !important;
[2061] Fix | Delete
-webkit-transition: opacity 0.5s;
[2062] Fix | Delete
transition: opacity 0.5s;
[2063] Fix | Delete
}
[2064] Fix | Delete
body.wp-customizer-unloading * {
[2065] Fix | Delete
pointer-events: none !important;
[2066] Fix | Delete
}
[2067] Fix | Delete
form.customize-unpreviewable,
[2068] Fix | Delete
form.customize-unpreviewable input,
[2069] Fix | Delete
form.customize-unpreviewable select,
[2070] Fix | Delete
form.customize-unpreviewable button,
[2071] Fix | Delete
a.customize-unpreviewable,
[2072] Fix | Delete
area.customize-unpreviewable {
[2073] Fix | Delete
cursor: not-allowed !important;
[2074] Fix | Delete
}
[2075] Fix | Delete
</style>
[2076] Fix | Delete
<?php
[2077] Fix | Delete
}
[2078] Fix | Delete
[2079] Fix | Delete
/**
[2080] Fix | Delete
* Removes customize_messenger_channel query parameter from the preview window when it is not in an iframe.
[2081] Fix | Delete
*
[2082] Fix | Delete
* This ensures that the admin bar will be shown. It also ensures that link navigation will
[2083] Fix | Delete
* work as expected since the parent frame is not being sent the URL to navigate to.
[2084] Fix | Delete
*
[2085] Fix | Delete
* @since 4.7.0
[2086] Fix | Delete
*/
[2087] Fix | Delete
public function remove_frameless_preview_messenger_channel() {
[2088] Fix | Delete
if ( ! $this->messenger_channel ) {
[2089] Fix | Delete
return;
[2090] Fix | Delete
}
[2091] Fix | Delete
ob_start();
[2092] Fix | Delete
?>
[2093] Fix | Delete
<script>
[2094] Fix | Delete
( function() {
[2095] Fix | Delete
if ( parent !== window ) {
[2096] Fix | Delete
return;
[2097] Fix | Delete
}
[2098] Fix | Delete
const url = new URL( location.href );
[2099] Fix | Delete
if ( url.searchParams.has( 'customize_messenger_channel' ) ) {
[2100] Fix | Delete
url.searchParams.delete( 'customize_messenger_channel' );
[2101] Fix | Delete
location.replace( url );
[2102] Fix | Delete
}
[2103] Fix | Delete
} )();
[2104] Fix | Delete
</script>
[2105] Fix | Delete
<?php
[2106] Fix | Delete
wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) );
[2107] Fix | Delete
}
[2108] Fix | Delete
[2109] Fix | Delete
/**
[2110] Fix | Delete
* Prints JavaScript settings for preview frame.
[2111] Fix | Delete
*
[2112] Fix | Delete
* @since 3.4.0
[2113] Fix | Delete
*/
[2114] Fix | Delete
public function customize_preview_settings() {
[2115] Fix | Delete
$post_values = $this->unsanitized_post_values( array( 'exclude_changeset' => true ) );
[2116] Fix | Delete
$setting_validities = $this->validate_setting_values( $post_values );
[2117] Fix | Delete
$exported_setting_validities = array_map( array( $this, 'prepare_setting_validity_for_js' ), $setting_validities );
[2118] Fix | Delete
[2119] Fix | Delete
// Note that the REQUEST_URI is not passed into home_url() since this breaks subdirectory installations.
[2120] Fix | Delete
$self_url = empty( $_SERVER['REQUEST_URI'] ) ? home_url( '/' ) : sanitize_url( wp_unslash( $_SERVER['REQUEST_URI'] ) );
[2121] Fix | Delete
$state_query_params = array(
[2122] Fix | Delete
'customize_theme',
[2123] Fix | Delete
'customize_changeset_uuid',
[2124] Fix | Delete
'customize_messenger_channel',
[2125] Fix | Delete
);
[2126] Fix | Delete
$self_url = remove_query_arg( $state_query_params, $self_url );
[2127] Fix | Delete
[2128] Fix | Delete
$allowed_urls = $this->get_allowed_urls();
[2129] Fix | Delete
$allowed_hosts = array();
[2130] Fix | Delete
foreach ( $allowed_urls as $allowed_url ) {
[2131] Fix | Delete
$parsed = wp_parse_url( $allowed_url );
[2132] Fix | Delete
if ( empty( $parsed['host'] ) ) {
[2133] Fix | Delete
continue;
[2134] Fix | Delete
}
[2135] Fix | Delete
$host = $parsed['host'];
[2136] Fix | Delete
if ( ! empty( $parsed['port'] ) ) {
[2137] Fix | Delete
$host .= ':' . $parsed['port'];
[2138] Fix | Delete
}
[2139] Fix | Delete
$allowed_hosts[] = $host;
[2140] Fix | Delete
}
[2141] Fix | Delete
[2142] Fix | Delete
$switched_locale = switch_to_user_locale( get_current_user_id() );
[2143] Fix | Delete
$l10n = array(
[2144] Fix | Delete
'shiftClickToEdit' => __( 'Shift-click to edit this element.' ),
[2145] Fix | Delete
'linkUnpreviewable' => __( 'This link is not live-previewable.' ),
[2146] Fix | Delete
'formUnpreviewable' => __( 'This form is not live-previewable.' ),
[2147] Fix | Delete
);
[2148] Fix | Delete
if ( $switched_locale ) {
[2149] Fix | Delete
restore_previous_locale();
[2150] Fix | Delete
}
[2151] Fix | Delete
[2152] Fix | Delete
$settings = array(
[2153] Fix | Delete
'changeset' => array(
[2154] Fix | Delete
'uuid' => $this->changeset_uuid(),
[2155] Fix | Delete
'autosaved' => $this->autosaved(),
[2156] Fix | Delete
),
[2157] Fix | Delete
'timeouts' => array(
[2158] Fix | Delete
'selectiveRefresh' => 250,
[2159] Fix | Delete
'keepAliveSend' => 1000,
[2160] Fix | Delete
),
[2161] Fix | Delete
'theme' => array(
[2162] Fix | Delete
'stylesheet' => $this->get_stylesheet(),
[2163] Fix | Delete
'active' => $this->is_theme_active(),
[2164] Fix | Delete
),
[2165] Fix | Delete
'url' => array(
[2166] Fix | Delete
'self' => $self_url,
[2167] Fix | Delete
'allowed' => array_map( 'sanitize_url', $this->get_allowed_urls() ),
[2168] Fix | Delete
'allowedHosts' => array_unique( $allowed_hosts ),
[2169] Fix | Delete
'isCrossDomain' => $this->is_cross_domain(),
[2170] Fix | Delete
),
[2171] Fix | Delete
'channel' => $this->messenger_channel,
[2172] Fix | Delete
'activePanels' => array(),
[2173] Fix | Delete
'activeSections' => array(),
[2174] Fix | Delete
'activeControls' => array(),
[2175] Fix | Delete
'settingValidities' => $exported_setting_validities,
[2176] Fix | Delete
'nonce' => current_user_can( 'customize' ) ? $this->get_nonces() : array(),
[2177] Fix | Delete
'l10n' => $l10n,
[2178] Fix | Delete
'_dirty' => array_keys( $post_values ),
[2179] Fix | Delete
);
[2180] Fix | Delete
[2181] Fix | Delete
foreach ( $this->panels as $panel_id => $panel ) {
[2182] Fix | Delete
if ( $panel->check_capabilities() ) {
[2183] Fix | Delete
$settings['activePanels'][ $panel_id ] = $panel->active();
[2184] Fix | Delete
foreach ( $panel->sections as $section_id => $section ) {
[2185] Fix | Delete
if ( $section->check_capabilities() ) {
[2186] Fix | Delete
$settings['activeSections'][ $section_id ] = $section->active();
[2187] Fix | Delete
}
[2188] Fix | Delete
}
[2189] Fix | Delete
}
[2190] Fix | Delete
}
[2191] Fix | Delete
foreach ( $this->sections as $id => $section ) {
[2192] Fix | Delete
if ( $section->check_capabilities() ) {
[2193] Fix | Delete
$settings['activeSections'][ $id ] = $section->active();
[2194] Fix | Delete
}
[2195] Fix | Delete
}
[2196] Fix | Delete
foreach ( $this->controls as $id => $control ) {
[2197] Fix | Delete
if ( $control->check_capabilities() ) {
[2198] Fix | Delete
$settings['activeControls'][ $id ] = $control->active();
[2199] Fix | Delete
}
[2200] Fix | Delete
}
[2201] Fix | Delete
[2202] Fix | Delete
ob_start();
[2203] Fix | Delete
?>
[2204] Fix | Delete
<script>
[2205] Fix | Delete
var _wpCustomizeSettings = <?php echo wp_json_encode( $settings ); ?>;
[2206] Fix | Delete
_wpCustomizeSettings.values = {};
[2207] Fix | Delete
(function( v ) {
[2208] Fix | Delete
<?php
[2209] Fix | Delete
/*
[2210] Fix | Delete
* Serialize settings separately from the initial _wpCustomizeSettings
[2211] Fix | Delete
* serialization in order to avoid a peak memory usage spike.
[2212] Fix | Delete
* @todo We may not even need to export the values at all since the pane syncs them anyway.
[2213] Fix | Delete
*/
[2214] Fix | Delete
foreach ( $this->settings as $id => $setting ) {
[2215] Fix | Delete
if ( $setting->check_capabilities() ) {
[2216] Fix | Delete
printf(
[2217] Fix | Delete
"v[%s] = %s;\n",
[2218] Fix | Delete
wp_json_encode( $id ),
[2219] Fix | Delete
wp_json_encode( $setting->js_value() )
[2220] Fix | Delete
);
[2221] Fix | Delete
}
[2222] Fix | Delete
}
[2223] Fix | Delete
?>
[2224] Fix | Delete
})( _wpCustomizeSettings.values );
[2225] Fix | Delete
</script>
[2226] Fix | Delete
<?php
[2227] Fix | Delete
wp_print_inline_script_tag( wp_remove_surrounding_empty_script_tags( ob_get_clean() ) );
[2228] Fix | Delete
}
[2229] Fix | Delete
[2230] Fix | Delete
/**
[2231] Fix | Delete
* Prints a signature so we can ensure the Customizer was properly executed.
[2232] Fix | Delete
*
[2233] Fix | Delete
* @since 3.4.0
[2234] Fix | Delete
* @deprecated 4.7.0
[2235] Fix | Delete
*/
[2236] Fix | Delete
public function customize_preview_signature() {
[2237] Fix | Delete
_deprecated_function( __METHOD__, '4.7.0' );
[2238] Fix | Delete
}
[2239] Fix | Delete
[2240] Fix | Delete
/**
[2241] Fix | Delete
* Removes the signature in case we experience a case where the Customizer was not properly executed.
[2242] Fix | Delete
*
[2243] Fix | Delete
* @since 3.4.0
[2244] Fix | Delete
* @deprecated 4.7.0
[2245] Fix | Delete
*
[2246] Fix | Delete
* @param callable|null $callback Optional. Value passed through for {@see 'wp_die_handler'} filter.
[2247] Fix | Delete
* Default null.
[2248] Fix | Delete
* @return callable|null Value passed through for {@see 'wp_die_handler'} filter.
[2249] Fix | Delete
*/
[2250] Fix | Delete
public function remove_preview_signature( $callback = null ) {
[2251] Fix | Delete
_deprecated_function( __METHOD__, '4.7.0' );
[2252] Fix | Delete
[2253] Fix | Delete
return $callback;
[2254] Fix | Delete
}
[2255] Fix | Delete
[2256] Fix | Delete
/**
[2257] Fix | Delete
* Determines whether it is a theme preview or not.
[2258] Fix | Delete
*
[2259] Fix | Delete
* @since 3.4.0
[2260] Fix | Delete
*
[2261] Fix | Delete
* @return bool True if it's a preview, false if not.
[2262] Fix | Delete
*/
[2263] Fix | Delete
public function is_preview() {
[2264] Fix | Delete
return (bool) $this->previewing;
[2265] Fix | Delete
}
[2266] Fix | Delete
[2267] Fix | Delete
/**
[2268] Fix | Delete
* Retrieves the template name of the previewed theme.
[2269] Fix | Delete
*
[2270] Fix | Delete
* @since 3.4.0
[2271] Fix | Delete
*
[2272] Fix | Delete
* @return string Template name.
[2273] Fix | Delete
*/
[2274] Fix | Delete
public function get_template() {
[2275] Fix | Delete
return $this->theme()->get_template();
[2276] Fix | Delete
}
[2277] Fix | Delete
[2278] Fix | Delete
/**
[2279] Fix | Delete
* Retrieves the stylesheet name of the previewed theme.
[2280] Fix | Delete
*
[2281] Fix | Delete
* @since 3.4.0
[2282] Fix | Delete
*
[2283] Fix | Delete
* @return string Stylesheet name.
[2284] Fix | Delete
*/
[2285] Fix | Delete
public function get_stylesheet() {
[2286] Fix | Delete
return $this->theme()->get_stylesheet();
[2287] Fix | Delete
}
[2288] Fix | Delete
[2289] Fix | Delete
/**
[2290] Fix | Delete
* Retrieves the template root of the previewed theme.
[2291] Fix | Delete
*
[2292] Fix | Delete
* @since 3.4.0
[2293] Fix | Delete
*
[2294] Fix | Delete
* @return string Theme root.
[2295] Fix | Delete
*/
[2296] Fix | Delete
public function get_template_root() {
[2297] Fix | Delete
return get_raw_theme_root( $this->get_template(), true );
[2298] Fix | Delete
}
[2299] Fix | Delete
[2300] Fix | Delete
/**
[2301] Fix | Delete
* Retrieves the stylesheet root of the previewed theme.
[2302] Fix | Delete
*
[2303] Fix | Delete
* @since 3.4.0
[2304] Fix | Delete
*
[2305] Fix | Delete
* @return string Theme root.
[2306] Fix | Delete
*/
[2307] Fix | Delete
public function get_stylesheet_root() {
[2308] Fix | Delete
return get_raw_theme_root( $this->get_stylesheet(), true );
[2309] Fix | Delete
}
[2310] Fix | Delete
[2311] Fix | Delete
/**
[2312] Fix | Delete
* Filters the active theme and return the name of the previewed theme.
[2313] Fix | Delete
*
[2314] Fix | Delete
* @since 3.4.0
[2315] Fix | Delete
*
[2316] Fix | Delete
* @param mixed $current_theme {@internal Parameter is not used}
[2317] Fix | Delete
* @return string Theme name.
[2318] Fix | Delete
*/
[2319] Fix | Delete
public function current_theme( $current_theme ) {
[2320] Fix | Delete
return $this->theme()->display( 'Name' );
[2321] Fix | Delete
}
[2322] Fix | Delete
[2323] Fix | Delete
/**
[2324] Fix | Delete
* Validates setting values.
[2325] Fix | Delete
*
[2326] Fix | Delete
* Validation is skipped for unregistered settings or for values that are
[2327] Fix | Delete
* already null since they will be skipped anyway. Sanitization is applied
[2328] Fix | Delete
* to values that pass validation, and values that become null or `WP_Error`
[2329] Fix | Delete
* after sanitizing are marked invalid.
[2330] Fix | Delete
*
[2331] Fix | Delete
* @since 4.6.0
[2332] Fix | Delete
*
[2333] Fix | Delete
* @see WP_REST_Request::has_valid_params()
[2334] Fix | Delete
* @see WP_Customize_Setting::validate()
[2335] Fix | Delete
*
[2336] Fix | Delete
* @param array $setting_values Mapping of setting IDs to values to validate and sanitize.
[2337] Fix | Delete
* @param array $options {
[2338] Fix | Delete
* Options.
[2339] Fix | Delete
*
[2340] Fix | Delete
* @type bool $validate_existence Whether a setting's existence will be checked.
[2341] Fix | Delete
* @type bool $validate_capability Whether the setting capability will be checked.
[2342] Fix | Delete
* }
[2343] Fix | Delete
* @return array Mapping of setting IDs to return value of validate method calls, either `true` or `WP_Error`.
[2344] Fix | Delete
*/
[2345] Fix | Delete
public function validate_setting_values( $setting_values, $options = array() ) {
[2346] Fix | Delete
$options = wp_parse_args(
[2347] Fix | Delete
$options,
[2348] Fix | Delete
array(
[2349] Fix | Delete
'validate_capability' => false,
[2350] Fix | Delete
'validate_existence' => false,
[2351] Fix | Delete
)
[2352] Fix | Delete
);
[2353] Fix | Delete
[2354] Fix | Delete
$validities = array();
[2355] Fix | Delete
foreach ( $setting_values as $setting_id => $unsanitized_value ) {
[2356] Fix | Delete
$setting = $this->get_setting( $setting_id );
[2357] Fix | Delete
if ( ! $setting ) {
[2358] Fix | Delete
if ( $options['validate_existence'] ) {
[2359] Fix | Delete
$validities[ $setting_id ] = new WP_Error( 'unrecognized', __( 'Setting does not exist or is unrecognized.' ) );
[2360] Fix | Delete
}
[2361] Fix | Delete
continue;
[2362] Fix | Delete
}
[2363] Fix | Delete
if ( $options['validate_capability'] && ! current_user_can( $setting->capability ) ) {
[2364] Fix | Delete
$validity = new WP_Error( 'unauthorized', __( 'Unauthorized to modify setting due to capability.' ) );
[2365] Fix | Delete
} else {
[2366] Fix | Delete
if ( is_null( $unsanitized_value ) ) {
[2367] Fix | Delete
continue;
[2368] Fix | Delete
}
[2369] Fix | Delete
$validity = $setting->validate( $unsanitized_value );
[2370] Fix | Delete
}
[2371] Fix | Delete
if ( ! is_wp_error( $validity ) ) {
[2372] Fix | Delete
/** This filter is documented in wp-includes/class-wp-customize-setting.php */
[2373] Fix | Delete
$late_validity = apply_filters( "customize_validate_{$setting->id}", new WP_Error(), $unsanitized_value, $setting );
[2374] Fix | Delete
if ( is_wp_error( $late_validity ) && $late_validity->has_errors() ) {
[2375] Fix | Delete
$validity = $late_validity;
[2376] Fix | Delete
}
[2377] Fix | Delete
}
[2378] Fix | Delete
if ( ! is_wp_error( $validity ) ) {
[2379] Fix | Delete
$value = $setting->sanitize( $unsanitized_value );
[2380] Fix | Delete
if ( is_null( $value ) ) {
[2381] Fix | Delete
$validity = false;
[2382] Fix | Delete
} elseif ( is_wp_error( $value ) ) {
[2383] Fix | Delete
$validity = $value;
[2384] Fix | Delete
}
[2385] Fix | Delete
}
[2386] Fix | Delete
if ( false === $validity ) {
[2387] Fix | Delete
$validity = new WP_Error( 'invalid_value', __( 'Invalid value.' ) );
[2388] Fix | Delete
}
[2389] Fix | Delete
$validities[ $setting_id ] = $validity;
[2390] Fix | Delete
}
[2391] Fix | Delete
return $validities;
[2392] Fix | Delete
}
[2393] Fix | Delete
[2394] Fix | Delete
/**
[2395] Fix | Delete
* Prepares setting validity for exporting to the client (JS).
[2396] Fix | Delete
*
[2397] Fix | Delete
* Converts `WP_Error` instance into array suitable for passing into the
[2398] Fix | Delete
* `wp.customize.Notification` JS model.
[2399] Fix | Delete
*
[2400] Fix | Delete
* @since 4.6.0
[2401] Fix | Delete
*
[2402] Fix | Delete
* @param true|WP_Error $validity Setting validity.
[2403] Fix | Delete
* @return true|array If `$validity` was a WP_Error, the error codes will be array-mapped
[2404] Fix | Delete
* to their respective `message` and `data` to pass into the
[2405] Fix | Delete
* `wp.customize.Notification` JS model.
[2406] Fix | Delete
*/
[2407] Fix | Delete
public function prepare_setting_validity_for_js( $validity ) {
[2408] Fix | Delete
if ( is_wp_error( $validity ) ) {
[2409] Fix | Delete
$notification = array();
[2410] Fix | Delete
foreach ( $validity->errors as $error_code => $error_messages ) {
[2411] Fix | Delete
$notification[ $error_code ] = array(
[2412] Fix | Delete
'message' => implode( ' ', $error_messages ),
[2413] Fix | Delete
'data' => $validity->get_error_data( $error_code ),
[2414] Fix | Delete
);
[2415] Fix | Delete
}
[2416] Fix | Delete
return $notification;
[2417] Fix | Delete
} else {
[2418] Fix | Delete
return true;
[2419] Fix | Delete
}
[2420] Fix | Delete
}
[2421] Fix | Delete
[2422] Fix | Delete
/**
[2423] Fix | Delete
* Handles customize_save WP Ajax request to save/update a changeset.
[2424] Fix | Delete
*
[2425] Fix | Delete
* @since 3.4.0
[2426] Fix | Delete
* @since 4.7.0 The semantics of this method have changed to update a changeset, optionally to also change the status and other attributes.
[2427] Fix | Delete
*/
[2428] Fix | Delete
public function save() {
[2429] Fix | Delete
if ( ! is_user_logged_in() ) {
[2430] Fix | Delete
wp_send_json_error( 'unauthenticated' );
[2431] Fix | Delete
}
[2432] Fix | Delete
[2433] Fix | Delete
if ( ! $this->is_preview() ) {
[2434] Fix | Delete
wp_send_json_error( 'not_preview' );
[2435] Fix | Delete
}
[2436] Fix | Delete
[2437] Fix | Delete
$action = 'save-customize_' . $this->get_stylesheet();
[2438] Fix | Delete
if ( ! check_ajax_referer( $action, 'nonce', false ) ) {
[2439] Fix | Delete
wp_send_json_error( 'invalid_nonce' );
[2440] Fix | Delete
}
[2441] Fix | Delete
[2442] Fix | Delete
$changeset_post_id = $this->changeset_post_id();
[2443] Fix | Delete
$is_new_changeset = empty( $changeset_post_id );
[2444] Fix | Delete
if ( $is_new_changeset ) {
[2445] Fix | Delete
if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->create_posts ) ) {
[2446] Fix | Delete
wp_send_json_error( 'cannot_create_changeset_post' );
[2447] Fix | Delete
}
[2448] Fix | Delete
} else {
[2449] Fix | Delete
if ( ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $changeset_post_id ) ) {
[2450] Fix | Delete
wp_send_json_error( 'cannot_edit_changeset_post' );
[2451] Fix | Delete
}
[2452] Fix | Delete
}
[2453] Fix | Delete
[2454] Fix | Delete
if ( ! empty( $_POST['customize_changeset_data'] ) ) {
[2455] Fix | Delete
$input_changeset_data = json_decode( wp_unslash( $_POST['customize_changeset_data'] ), true );
[2456] Fix | Delete
if ( ! is_array( $input_changeset_data ) ) {
[2457] Fix | Delete
wp_send_json_error( 'invalid_customize_changeset_data' );
[2458] Fix | Delete
}
[2459] Fix | Delete
} else {
[2460] Fix | Delete
$input_changeset_data = array();
[2461] Fix | Delete
}
[2462] Fix | Delete
[2463] Fix | Delete
// Validate title.
[2464] Fix | Delete
$changeset_title = null;
[2465] Fix | Delete
if ( isset( $_POST['customize_changeset_title'] ) ) {
[2466] Fix | Delete
$changeset_title = sanitize_text_field( wp_unslash( $_POST['customize_changeset_title'] ) );
[2467] Fix | Delete
}
[2468] Fix | Delete
[2469] Fix | Delete
// Validate changeset status param.
[2470] Fix | Delete
$is_publish = null;
[2471] Fix | Delete
$changeset_status = null;
[2472] Fix | Delete
if ( isset( $_POST['customize_changeset_status'] ) ) {
[2473] Fix | Delete
$changeset_status = wp_unslash( $_POST['customize_changeset_status'] );
[2474] Fix | Delete
if ( ! get_post_status_object( $changeset_status ) || ! in_array( $changeset_status, array( 'draft', 'pending', 'publish', 'future' ), true ) ) {
[2475] Fix | Delete
wp_send_json_error( 'bad_customize_changeset_status', 400 );
[2476] Fix | Delete
}
[2477] Fix | Delete
$is_publish = ( 'publish' === $changeset_status || 'future' === $changeset_status );
[2478] Fix | Delete
if ( $is_publish && ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->publish_posts ) ) {
[2479] Fix | Delete
wp_send_json_error( 'changeset_publish_unauthorized', 403 );
[2480] Fix | Delete
}
[2481] Fix | Delete
}
[2482] Fix | Delete
[2483] Fix | Delete
/*
[2484] Fix | Delete
* Validate changeset date param. Date is assumed to be in local time for
[2485] Fix | Delete
* the WP if in MySQL format (YYYY-MM-DD HH:MM:SS). Otherwise, the date
[2486] Fix | Delete
* is parsed with strtotime() so that ISO date format may be supplied
[2487] Fix | Delete
* or a string like "+10 minutes".
[2488] Fix | Delete
*/
[2489] Fix | Delete
$changeset_date_gmt = null;
[2490] Fix | Delete
if ( isset( $_POST['customize_changeset_date'] ) ) {
[2491] Fix | Delete
$changeset_date = wp_unslash( $_POST['customize_changeset_date'] );
[2492] Fix | Delete
if ( preg_match( '/^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d$/', $changeset_date ) ) {
[2493] Fix | Delete
$mm = substr( $changeset_date, 5, 2 );
[2494] Fix | Delete
$jj = substr( $changeset_date, 8, 2 );
[2495] Fix | Delete
$aa = substr( $changeset_date, 0, 4 );
[2496] Fix | Delete
$valid_date = wp_checkdate( $mm, $jj, $aa, $changeset_date );
[2497] Fix | Delete
if ( ! $valid_date ) {
[2498] Fix | Delete
wp_send_json_error( 'bad_customize_changeset_date', 400 );
[2499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function