Files
branddefense.pl/wp-content/plugins/brizy/editor/block-screenshot-api.php
Roman Pyrih c2e100a763 first commit
2023-07-24 08:30:51 +02:00

99 lines
2.7 KiB
PHP

<?php
use Brizy\Utils\UUId;
class Brizy_Editor_BlockScreenshotApi extends Brizy_Admin_AbstractApi {
const nonce = 'brizy-api';
const AJAX_CREATE_BLOCK_SCREENSHOT = '_create_block_screenshot';
const AJAX_UPDATE_BLOCK_SCREENSHOT = '_update_block_screenshot';
/**
* @var Brizy_Editor_Post
*/
private $post;
/**
* @var array
*/
private $blockTypes;
/**
* Brizy_Editor_BlockScreenshotApi constructor.
*
* @param $post
*
* @throws Exception
*/
public function __construct( $post ) {
$this->post = $post;
$this->blockTypes = array(
Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_NORMAL,
Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_GLOBAL,
Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_SAVED,
Brizy_Editor_Screenshot_Manager::BLOCK_TYPE_LAYOUT
);
parent::__construct();
}
protected function getRequestNonce() {
return $this->param( 'hash' );
}
protected function initializeApiActions() {
$pref = 'wp_ajax_' . Brizy_Editor::prefix();
$pref_nopriv = 'wp_ajax_nopriv_' . Brizy_Editor::prefix();
add_action( $pref . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
add_action( $pref . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
add_action( $pref_nopriv . self::AJAX_CREATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
add_action( $pref_nopriv . self::AJAX_UPDATE_BLOCK_SCREENSHOT, array( $this, 'saveBlockScreenShot' ) );
}
public function saveBlockScreenShot() {
$this->verifyNonce( self::nonce );
session_write_close();
if ( empty( $_REQUEST['block_type'] ) || ! in_array( $_REQUEST['block_type'], $this->blockTypes ) || empty( $_REQUEST['ibsf'] ) ) {
$this->error( 400, __( 'Bad request', 'brizy' ) );
}
$brizyPost = isset( $_REQUEST['post'] ) ? $_REQUEST['post'] : null;
$base64 = $_REQUEST['ibsf'];
$imageContent = base64_decode( $base64 );
if ( isset( $_REQUEST['id'] ) ) {
if ( ! preg_match( "/.[-a-zA-Z0-9]+/", $_REQUEST['id'] ) ) {
$this->error( 400, __( 'Invalid uid string', 'brizy' ) );
}
$screenId = $_REQUEST['id'];
} else {
$screenId = UUId::uuid();
}
if ( false === $imageContent ) {
$this->error( 400, __( 'Invalid image content', 'brizy' ) );
}
$manager = new Brizy_Editor_Screenshot_Manager( new Brizy_Editor_UrlBuilder( $brizyPost ) );
try {
$result = $manager->saveScreenshot( $screenId, $_REQUEST['block_type'], $imageContent, $brizyPost );
} catch ( Exception $e ) {
$this->error( 400, $e->getMessage() );
}
if ( $result ) {
$screenPath = $manager->getScreenshot( $screenId, $brizyPost );
wp_send_json_success( array( 'id' => $screenId, 'file_name' => $screenPath ) );
}
}
}