Server IP : 85.214.239.14 / Your IP : 3.15.10.104 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /var/www/wordpress/wp-content/plugins/cookie-notice/includes/modules/amp/ |
Upload File : |
<?php // exit if accessed directly if ( ! defined( 'ABSPATH' ) ) exit; /** * Cookie Notice Modules AMP class. * * Compatibility since: 2.0.0 * * @class Cookie_Notice_Modules_AMP */ class Cookie_Notice_Modules_AMP { private $nonce = ''; /** * Constructor. * * @return void */ public function __construct() { $this->nonce = wp_create_nonce( 'cookie-compliance-amp-consent' ); add_action( 'init', [ $this, 'handle_iframe' ] ); add_action( 'wp_head', [ $this, 'load_amp_consent' ] ); } /** * Load AMP consent module. * * @return void */ public function load_amp_consent() { // is banner allowed to display? if ( ! Cookie_Notice()->frontend->maybe_display_banner( [ 'skip_amp' => true ] ) ) return; if ( function_exists( 'amp_is_request' ) && amp_is_request() ) { // load styles echo ' <style amp-custom> #cnConsentContainer { background: none; border: none; box-shadow: none; border-radius: 0; height: 100vh; width: 100%; } #cnConsentContainer amp-iframe { height: 100vh; width: 100%; } #cnConsentWidget { height: 100vh; width: 100%; } </style>'; // load scripts echo ' <script async custom-element="amp-script" src="https://cdn.ampproject.org/v0/amp-script-0.1.js"></script> <script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-0.1.js"></script> <script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>'; // get iframe url $url = apply_filters( 'cn_cookie_compliance_amp_iframe_url', $this->add_subdomain_to_url( get_site_url(), 'www' ) ); // load consent iframe echo ' <amp-consent id="cnConsentContainer" layout="nodisplay"> <script type="application/json"> { "consentInstanceId": "cnConsent", "consentRequired": true, "purposeConsentRequired": [ "basic_operations", "content_personalization", "site_optimization", "ad_personalization" ], "promptUI": "cnConsentWidget" } </script> <div id="cnConsentWidget"> <amp-iframe layout="fill" sandbox="allow-scripts allow-same-origin" src="' . esc_url( $url . '/?cn-amp-consent-iframe=' . $this->nonce ) . '"> <div placeholder></div> </amp-iframe> </div> </amp-consent>'; } } /** * Add subdomain to url. * * @param string $url * @param string $subdomain * @return string */ public function add_subdomain_to_url( $url, $subdomain ) { // parse url $parts = parse_url( $url ); // subdomain does not exist? if ( substr( $parts['host'], 0, strlen( $subdomain ) + 1 ) !== $subdomain . '.' ) { // find host $pos = strpos( $url, $parts['host'] ); // update url and add subdomain $url = substr_replace( $url, $subdomain . '.' . $parts['host'], $pos, strlen( $parts['host'] ) ); } return $url; } /** * Generate consent iframe. * * @return void */ public function handle_iframe() { if ( isset( $_GET['cn-amp-consent-iframe'] ) && $_GET['cn-amp-consent-iframe'] === $this->nonce ) { wp_ob_end_flush_all(); // display iframe echo $this->generate_iframe_html(); exit; } } /** * Generate consent iframe. * * @return string */ public function generate_iframe_html() { // get main instance $cn = Cookie_Notice(); // get options $options = $cn->frontend->get_cc_options(); // get output $cc_output = $cn->frontend->get_cc_output( $options ); // get allowed html for cookie compliance html output $allowed_html = array_merge( wp_kses_allowed_html( 'post' ), [ 'script' => [ 'type' => true, 'src' => true ] ] ); $html = ' <!DOCTYPE html> <html ' . get_language_attributes( 'html' ) . '> <head> <meta charset="' . esc_attr( get_bloginfo( 'charset', 'display' ) ) . '"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="robots" content="noindex"> <title>' . esc_html__( 'Cookie Compliance AMP Consent', 'cookie-notice' ) . '</title> ' . wp_kses( $cc_output, $allowed_html ) . ' <script type="text/javascript" src="' . esc_url( COOKIE_NOTICE_URL . '/includes/modules/amp/iframe.js' ) . '"></script> </head> <body></body> </html>'; return $html; } } new Cookie_Notice_Modules_AMP();