145 lines
3.0 KiB
PHP
145 lines
3.0 KiB
PHP
<?php
|
|
|
|
|
|
trait Brizy_Admin_Cloud_SyncAware {
|
|
|
|
/**
|
|
* @var Brizy_Admin_Cloud_Client
|
|
*/
|
|
protected $client;
|
|
|
|
/**
|
|
* @return Brizy_Admin_Cloud_Client
|
|
*/
|
|
public function getClient() {
|
|
return $this->client;
|
|
}
|
|
|
|
/**
|
|
* @param Brizy_Admin_Cloud_Client $client
|
|
*
|
|
* @return Brizy_Admin_Cloud_SyncAware
|
|
*/
|
|
public function setClient( $client ) {
|
|
$this->client = $client;
|
|
|
|
return $this;
|
|
}
|
|
|
|
protected function syncLayouts( $limit = 0, $throwException = false ) {
|
|
$layoutIds = $this->getLayoutsForSync( $limit );
|
|
$synchronized = [];
|
|
foreach ( $layoutIds as $lId ) {
|
|
try {
|
|
if ( $this->syncLayout( $lId->ID ) ) {
|
|
$synchronized[] = $lId->ID;
|
|
}
|
|
} catch ( Exception $e ) {
|
|
Brizy_Logger::instance()->critical( 'Failed to sync layout',
|
|
[
|
|
'blockId' => $lId->ID,
|
|
$e
|
|
] );
|
|
|
|
if ( $throwException ) {
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $synchronized;
|
|
}
|
|
|
|
protected function syncBlocks( $limit = 0, $throwException = false ) {
|
|
$postIds = $this->getBlocksForSync( $limit );
|
|
$synchronized = [];
|
|
foreach ( $postIds as $block ) {
|
|
try {
|
|
if ( $this->syncBlock( $block->ID ) ) {
|
|
$synchronized[] = $block->ID;
|
|
}
|
|
} catch ( Exception $e ) {
|
|
Brizy_Logger::instance()->critical( 'Failed to sync block',
|
|
[
|
|
'blockId' => $block->ID
|
|
] );
|
|
|
|
if ( $throwException ) {
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $synchronized;
|
|
}
|
|
|
|
protected function syncBlock( $blockId ) {
|
|
|
|
$brizyBlock = Brizy_Editor_Block::get( $blockId );
|
|
|
|
$cloud_account_id = $this->getClient()->getBrizyProject()->getCloudAccountId();
|
|
if ( $brizyBlock &&
|
|
$brizyBlock->isSynchronizable( $cloud_account_id ) &&
|
|
!$brizyBlock->isSynchronized( $cloud_account_id ) ) {
|
|
$updater = new Brizy_Admin_Cloud_BlockBridge( $this->client );
|
|
$updater->export( $brizyBlock );
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|
|
|
|
protected function syncLayout( $layoutId ) {
|
|
|
|
$brizyLayout = Brizy_Editor_Layout::get( $layoutId );
|
|
$cloud_account_id = $this->getClient()->getBrizyProject()->getCloudAccountId();
|
|
if ( $brizyLayout &&
|
|
$brizyLayout->isSynchronizable( $cloud_account_id ) &&
|
|
!$brizyLayout->isSynchronized( $cloud_account_id ) ) {
|
|
$updater = new Brizy_Admin_Cloud_LayoutBridge( $this->client );
|
|
$updater->export( $brizyLayout );
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
protected function getLayoutsForSync( $limit = 0 ) {
|
|
global $wpdb;
|
|
|
|
$savedBlockType = Brizy_Admin_Layouts_Main::CP_LAYOUT;
|
|
|
|
$limitQuery = "";
|
|
if ( $limit !== 0 ) {
|
|
$limitQuery = " LIMIT " . ( (int) $limit );
|
|
}
|
|
|
|
$postIds = $wpdb->get_results(
|
|
"SELECT ID FROM {$wpdb->posts} p
|
|
WHERE p.post_type='{$savedBlockType}'
|
|
{$limitQuery}" );
|
|
|
|
return $postIds;
|
|
}
|
|
|
|
|
|
protected function getBlocksForSync( $limit = 0 ) {
|
|
global $wpdb;
|
|
|
|
$savedBlockType = Brizy_Admin_Blocks_Main::CP_SAVED;
|
|
|
|
$limitQuery = "";
|
|
if ( $limit !== 0 ) {
|
|
$limitQuery = " LIMIT " . ( (int) $limit );
|
|
}
|
|
|
|
$postIds = $wpdb->get_results(
|
|
"SELECT ID FROM {$wpdb->posts} p
|
|
WHERE p.post_type='{$savedBlockType}'
|
|
{$limitQuery}
|
|
"
|
|
);
|
|
|
|
return $postIds;
|
|
}
|
|
}
|