diff options
Diffstat (limited to 'plugins/jetpack/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php')
-rw-r--r-- | plugins/jetpack/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/plugins/jetpack/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php b/plugins/jetpack/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php new file mode 100644 index 00000000..7256a51f --- /dev/null +++ b/plugins/jetpack/jetpack_vendor/automattic/jetpack-status/src/class-cookiestate.php @@ -0,0 +1,103 @@ +<?php +/** + * Pass state to subsequent requests via cookies. + * + * @package automattic/jetpack-status + */ + +namespace Automattic\Jetpack; + +/** + * Class Automattic\Jetpack\Status + * + * Used to retrieve information about the current status of Jetpack and the site overall. + */ +class CookieState { + + /** + * State is passed via cookies from one request to the next, but never to subsequent requests. + * SET: state( $key, $value ); + * GET: $value = state( $key ); + * + * @param string $key State key. + * @param string $value Value. + * @param bool $restate Reset the cookie (private). + */ + public function state( $key = null, $value = null, $restate = false ) { + static $state = array(); + static $path, $domain; + if ( ! isset( $path ) ) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + $admin_url = ( new Paths() )->admin_url(); + $bits = wp_parse_url( $admin_url ); + + if ( is_array( $bits ) ) { + $path = ( isset( $bits['path'] ) ) ? dirname( $bits['path'] ) : null; + $domain = ( isset( $bits['host'] ) ) ? $bits['host'] : null; + } else { + $path = null; + $domain = null; + } + } + + // Extract state from cookies and delete cookies. + if ( isset( $_COOKIE['jetpackState'] ) && is_array( $_COOKIE['jetpackState'] ) ) { + // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- User should sanitize if necessary. + $yum = wp_unslash( $_COOKIE['jetpackState'] ); + unset( $_COOKIE['jetpackState'] ); + foreach ( $yum as $k => $v ) { + if ( strlen( $v ) ) { + $state[ $k ] = $v; + } + setcookie( "jetpackState[$k]", false, 0, $path, $domain, is_ssl(), true ); + } + } + + if ( $restate ) { + foreach ( $state as $k => $v ) { + setcookie( "jetpackState[$k]", $v, 0, $path, $domain, is_ssl(), true ); + } + return; + } + + // Get a state variable. + if ( isset( $key ) && ! isset( $value ) ) { + if ( array_key_exists( $key, $state ) ) { + return $state[ $key ]; + } + return null; + } + + // Set a state variable. + if ( isset( $key ) && isset( $value ) ) { + if ( is_array( $value ) && isset( $value[0] ) ) { + $value = $value[0]; + } + $state[ $key ] = $value; + if ( ! headers_sent() ) { + if ( $this->should_set_cookie( $key ) ) { + setcookie( "jetpackState[$key]", $value, 0, $path, $domain, is_ssl(), true ); + } + } + } + } + + /** + * Determines whether the jetpackState[$key] value should be added to the + * cookie. + * + * @param string $key The state key. + * + * @return boolean Whether the value should be added to the cookie. + */ + public function should_set_cookie( $key ) { + global $current_screen; + $page = isset( $current_screen->base ) ? $current_screen->base : null; + + if ( 'toplevel_page_jetpack' === $page && 'display_update_modal' === $key ) { + return false; + } + + return true; + } +} |