get_error_message()), 'Apeari', ['response' => 403]); } $ref = 'page:' . get_queried_object_id(); if (!is_page() || $ref !== $data['lastPage']) { wp_die(esc_html__('Podgląd dotyczy wyłącznie wybranej strony.', 'apeari'), 'Apeari', [ 'response' => 403, ]); } $this->data = $data; nocache_headers(); header('Cache-Control: private, no-store, max-age=0'); header('Referrer-Policy: no-referrer'); header('X-Robots-Tag: noindex, nofollow'); header("Content-Security-Policy: frame-ancestors 'self'"); add_filter('show_admin_bar', '__return_false'); add_filter('the_content', [$this, 'content'], 8); add_filter('render_block', [$this, 'mark'], 99, 2); add_action('wp_enqueue_scripts', static function () use ($ref) { wp_enqueue_script( 'apeari-bridge', APEARI_URL . 'assets/js/preview/bridge.js', ['wp-i18n'], APEARI_VERSION . '.' . filemtime(APEARI_PATH . 'assets/js/preview/bridge.js'), true, ); wp_add_inline_script( 'apeari-bridge', 'window.APEARI_BRIDGE=' . wp_json_encode([ 'pageRef' => $ref, 'parentOrigin' => wp_parse_url(admin_url(), PHP_URL_SCHEME) . '://' . wp_parse_url(admin_url(), PHP_URL_HOST) . (wp_parse_url(admin_url(), PHP_URL_PORT) ? ':' . wp_parse_url(admin_url(), PHP_URL_PORT) : ''), 'blocks' => APEARI_Block_Policy::BLOCKS, ]) . ';', 'before', ); wp_set_script_translations('apeari-bridge', 'apeari', APEARI_PATH . 'languages'); }); } public function content(string $content): string { $post = get_post(); if (!$post || 'page:' . $post->ID !== $this->data['lastPage']) { return $content; } if (empty($_GET['apeari_original'])) { $content = $this->data['drafts'][$this->data['lastPage']]['content'] ?? $content; } return APEARI_Documents::mark($content, $this->data['lastPage']); } public function mark(string $html, array $block): string { if ( empty($block['attrs']['apeariRef']) || !in_array($block['blockName'], APEARI_Block_Policy::BLOCKS, true) ) { return $html; } $tag = new WP_HTML_Tag_Processor($html); if ($tag->next_tag() && !$tag->get_attribute('data-apeari-ref')) { $tag->set_attribute('data-apeari-ref', $block['attrs']['apeariRef']); $tag->set_attribute('data-apeari-name', $block['blockName']); $tag->set_attribute('data-apeari-version', $block['attrs']['apeariVersion']); } return $tag->get_updated_html(); } }