Your IP : 216.73.216.95


Current Path : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/cloud/
Upload File :
Current File : /var/www/ooareogundevinitiative/wp-content/plugins/brizy/admin/cloud/block-bridge.php

<?php

/**
 * Class Brizy_Admin_Cloud_BlockUploader
 */
class Brizy_Admin_Cloud_BlockBridge extends Brizy_Admin_Cloud_AbstractBridge {

	use Brizy_Editor_Asset_AttachmentAware;

	/**
	 * @param Brizy_Editor_Block $block
	 *
	 * @return mixed|void
	 * @throws Exception
	 */
	public function export( $block ) {

		$media = json_decode( $block->getMedia() );

		if ( ! $media || ! isset( $media->fonts ) ) {
			throw new Exception( 'No fonts property in media object' );
		}

		if ( ! $media || ! isset( $media->images ) ) {
			throw new Exception( 'No images property in media object' );
		}

		$bridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
		foreach ( $media->images as $uid ) {
			try {
				$bridge->export( $uid );
			} catch (Exception $e) {
				Brizy_Logger::instance()->critical( 'Failed to export block media: '.$e->getMessage(),[$e] );
			}
		}

		$bridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
		foreach ( $media->fonts as $fontUid ) {
			try {
				$bridge->export( $fontUid );
			} catch (Exception $e) {
				Brizy_Logger::instance()->critical( 'Failed to export block font: '.$e->getMessage(),[$e] );
			}
		}

		$bridge = new Brizy_Admin_Cloud_ScreenshotBridge( $this->client );
		$bridge->export( $block );

		$cloudBlockObject = $this->client->createOrUpdateBlock( $block );

		if ( $cloudBlockObject ) {
			$block->setSynchronized( $this->getCurrentCloudAccountId(), $cloudBlockObject->uid );
		}

		$block->saveStorage();
	}

	/**
	 * @param $blockId
	 *
	 * @return mixed|void
	 * @throws Exception
	 */
	public function import( $blockId ) {
		global $wpdb;

		$blocks = $this->client->getBlocks( [ 'uid' => $blockId ] );

		if ( ! isset( $blocks[0] ) ) {
			Brizy_Logger::instance()->critical( 'Failed to import: Unable to obtain the block from cloud ' . $blockId );
			return;
		}

		$block = (array) $blocks[0];

		try {

			//  create local block
			$wpdb->query( 'START TRANSACTION ' );
			$name = md5( time() );
			$post = wp_insert_post( array(
				'post_title'  => $name,
				'post_name'   => $name,
				'post_status' => 'publish',
				'post_type'   => Brizy_Admin_Blocks_Main::CP_SAVED
			) );

			if ( $post ) {
				$brizyPost = Brizy_Editor_Block::get( $post, $block['uid'] );
				if ( isset( $block['media'] ) ) {
					$brizyPost->setMedia( $block['media'] );
				}
				if ( isset( $block['meta'] ) ) {
					$brizyPost->setMeta( $block['meta'] );
				}
				$brizyPost->set_editor_data( $block['data'] );
				$brizyPost->set_uses_editor( true );
				$brizyPost->set_needs_compile( true );
				$brizyPost->setDataVersion( 1 );
				$brizyPost->setSynchronized( $this->getCurrentCloudAccountId(), $block['id'] );
				$brizyPost->save();

				// import fonts
				if ( isset( $block['media'] ) ) {
					$blockMedia = json_decode( $block['media'] );

					$fontBridge = new Brizy_Admin_Cloud_FontBridge( $this->client );
					if ( isset( $blockMedia->fonts ) ) {
						foreach ( $blockMedia->fonts as $cloudFontUid ) {
							try {
								$fontBridge->import( $cloudFontUid );
							} catch ( Exception $e ) {
								Brizy_Logger::instance()->critical( 'Failed to import block media: '.$e->getMessage(),[$e] );
							}
						}
					}

					$mediaBridge = new Brizy_Admin_Cloud_MediaBridge( $this->client );
					$mediaBridge->setBlockId( $post );
					if ( isset( $blockMedia->images ) ) {
						foreach ( $blockMedia->images as $mediaUid ) {
							try {
								$mediaBridge->import( $mediaUid );
							} catch ( Exception $e ) {
								Brizy_Logger::instance()->critical( 'Failed to import block media: '.$e->getMessage(),[$e] );
							}
						}
					}
				}
			}

			$wpdb->query( 'COMMIT' );
		} catch ( Exception $e ) {
			$wpdb->query( 'ROLLBACK' );
			Brizy_Logger::instance()->critical( 'Failed to import block ' . $blockId , [ $e ] );
		}
	}

	/**
	 * @param Brizy_Editor_Block $block
	 *
	 * @return mixed|void
	 * @throws Exception
	 */
	public function delete( $block ) {
		if ( $block->getCloudId( $this->getCurrentCloudAccountId() ) ) {
			$this->client->deleteBlock( $block->getCloudId( $this->getCurrentCloudAccountId() ) );
		}
	}
}