kollapsminoriteten/wp-content/plugins/blocksy-companion/framework/features/demo-install/install-finish.php

494 lines
10 KiB
PHP
Raw Normal View History

2025-08-27 08:44:30 +02:00
<?php
namespace Blocksy;
class DemoInstallFinalActions {
protected $is_ajax_request = true;
public function __construct($args = []) {
$args = wp_parse_args($args, [
'is_ajax_request' => true,
]);
$this->is_ajax_request = $args['is_ajax_request'];
}
public function import() {
if (
! current_user_can('edit_theme_options')
&&
$this->is_ajax_request
) {
wp_send_json_error([
'message' => __("Sorry, you don't have permission to finish the installation.", 'blocksy-companion')
]);
}
delete_option('blocksy_ext_demos_currently_installing_demo');
$wpforms_settings = get_option('wpforms_settings', []);
$wpforms_settings['disable-css'] = '2';
update_option('wpforms_settings', $wpforms_settings);
$this->replace_urls();
if (class_exists('\FluentForm\App\Hooks\Handlers\ActivationHandler')) {
$fluentFormActivation = new \FluentForm\App\Hooks\Handlers\ActivationHandler();
$fluentFormActivation->migrate();
}
if (class_exists('WC_REST_System_Status_Tools_V2_Controller')) {
if (! defined('WP_CLI')) {
define('WP_CLI', true);
}
$s = new \WC_REST_System_Status_Tools_V2_Controller();
$s->execute_tool('clear_transients');
if (function_exists('wc_update_product_lookup_tables')) {
wc_update_product_lookup_tables();
}
$s->execute_tool('clear_transients');
}
$this->handle_brizy_posts();
global $wp_rewrite;
$wp_rewrite->flush_rules();
if (get_option('qubely_global_options')) {
$maybe_presets = json_decode(
get_option('qubely_global_options'),
true
);
if (
$maybe_presets
&&
isset($maybe_presets['activePreset'])
&&
$maybe_presets['activePreset'] !== 'theme'
) {
$maybe_presets['activePreset'] = 'theme';
update_option(
'qubely_global_options',
json_encode($maybe_presets)
);
}
}
$this->maybe_activate_elementor_experimental_container();
$this->update_counts_for_all_terms();
$this->patch_attachment_ids_in_mods();
do_action('customize_save_after');
do_action('blocksy:dynamic-css:refresh-caches');
do_action('blocksy:cache-manager:purge-all');
do_action('blocksy:demo-install:finish');
if ($this->is_ajax_request) {
wp_send_json_success();
}
}
/**
* Replace elementor URLs
*/
public function replace_urls() {
$current_demo = Plugin::instance()->demo->get_current_demo();
if (! $current_demo) {
return;
}
if (! isset($current_demo['demo'])) {
return;
}
$demo_name = explode(':', $current_demo['demo']);
if (! isset($demo_name[1])) {
$demo_name[1] = '';
}
$demo = $demo_name[0];
$builder = $demo_name[1];
$demo_content = Plugin::instance()->demo->fetch_single_demo([
'demo' => $demo,
'builder' => $builder
]);
if (! $demo_content) {
return;
}
if (! isset($demo_content['url'])) {
return;
}
$from = $demo_content['url'];
$to = get_site_url();
$wp_uploads = wp_upload_dir();
if (isset($wp_uploads['baseurl'])) {
$from .= '/wp-content/uploads';
$to = $wp_uploads['baseurl'];
}
$from = trim($from);
$to = trim($to);
if (
! filter_var($from, FILTER_VALIDATE_URL)
||
! filter_var($to, FILTER_VALIDATE_URL)
) {
return;
}
global $wpdb;
// @codingStandardsIgnoreStart cannot use `$wpdb->prepare` because it remove's the backslashes
$wpdb->query(
"UPDATE {$wpdb->postmeta} " .
"SET `meta_value` = REPLACE(`meta_value`, '" . str_replace( '/', '\\\/', $from ) . "', '" . str_replace( '/', '\\\/', $to ) . "') " .
"WHERE `meta_key` = '_elementor_data' AND `meta_value` LIKE '[%' ;"
); // meta_value LIKE '[%' are json formatted
// @codingStandardsIgnoreEnd
$option_keys = $wpdb->get_results(
$wpdb->prepare(
"SELECT option_name from {$wpdb->options} WHERE `option_value` LIKE %s;",
'%%' . $from . '%%'
)
);
foreach ($option_keys as $single_key) {
update_option($single_key->option_name, json_decode(str_replace(
str_replace('/', '\\/', $from),
str_replace('/', '\\/', $to),
json_encode(get_option($single_key->option_name))
), true));
}
}
private function handle_brizy_posts() {
if (! is_callable('Brizy_Editor_Storage_Common::instance')) {
return;
}
$post_types = \Brizy_Editor_Storage_Common::instance()->get('post-types');
if (empty($post_types) && ! is_array($post_types)) {
return;
}
$post_ids = $this->get_pages($post_types);
if (empty($post_ids) && ! is_array($post_ids)) {
return;
}
foreach ($post_ids as $post_id) {
$this->import_single_post($post_id);
}
}
public function import_single_post($post_id = 0) {
$is_brizy_post = get_post_meta($post_id, 'brizy_post_uid', true);
if (! $is_brizy_post) {
return;
}
update_post_meta($post_id, 'brizy_enabled', true);
$post = \Brizy_Editor_Post::get((int) $post_id);
$editor_data = $post->get_editor_data();
$post->set_editor_data( $editor_data );
$post->set_editor_version(BRIZY_EDITOR_VERSION);
$post->set_needs_compile(true);
$post->saveStorage();
}
private function get_pages($post_types = array()) {
if (! $post_types) {
return null;
}
$args = array(
'post_type' => $post_types,
// Query performance optimization.
'fields' => 'ids',
'no_found_rows' => true,
'post_status' => 'publish',
'posts_per_page' => -1,
);
$query = new \WP_Query($args);
if (! $query->have_posts()) {
return null;
}
return $query->posts;
}
public function maybe_activate_elementor_experimental_container() {
if (! defined('ELEMENTOR_VERSION')) {
return;
}
$current_demo = Plugin::instance()->demo->get_current_demo();
if (! $current_demo) {
return;
}
if (! isset($current_demo['demo'])) {
return;
}
$demo_name = explode(':', $current_demo['demo']);
if (! isset($demo_name[1])) {
$demo_name[1] = '';
}
$demo = $demo_name[0];
$builder = $demo_name[1];
$demo_content = Plugin::instance()->demo->fetch_single_demo([
'demo' => $demo,
'builder' => $builder
]);
if (! $demo_content) {
return;
}
if ($demo_content['builder'] !== 'elementor') {
return;
}
if (! isset($demo_content['elementor_experiment_container'])) {
return;
}
update_option('elementor_experiment-container', 'active');
}
public function update_counts_for_all_terms() {
if (! blc_theme_functions()->blocksy_manager()) {
return;
}
$taxonomies = array_reduce(
blc_theme_functions()->blocksy_manager()->post_types->get_supported_post_types(),
function ($result, $item) {
return array_unique(array_merge(
$result,
array_values(array_diff(
get_object_taxonomies($item),
['post_format']
))
));
},
[]
);
foreach ($taxonomies as $taxonomy) {
if (! taxonomy_exists($taxonomy)) {
continue;
}
$terms = get_terms($taxonomy, ['hide_empty' => false]);
$term_taxonomy_ids = wp_list_pluck($terms, 'term_taxonomy_id');
wp_update_term_count($term_taxonomy_ids, $taxonomy);
}
}
public function patch_attachment_ids_in_mods() {
$body = json_decode(file_get_contents('php://input'), true);
if (! $body) {
return;
}
$requestsPayload = [];
if (isset($body['requestsPayload'])) {
$requestsPayload = $body['requestsPayload'];
}
if (! isset($requestsPayload['processed_posts'])) {
return;
}
$all_mods = get_theme_mods();
foreach ($all_mods as $key => $val) {
if ($key === 'header_placements') {
$new_val = $val;
foreach ($val['sections'] as $section_index => $section) {
foreach ($section['items'] as $item_index => $item) {
$new_val['sections'][$section_index][
'items'
][$item_index]['values'] = $this->patch_attachment_ids_in_array(
$item['values'],
$requestsPayload
);
}
}
set_theme_mod($key, $new_val);
}
if (
$key === 'custom_logo'
&&
is_array($val)
&&
isset($val['desktop'])
) {
$new_val = $val;
$desktop_val = intval($val['desktop']);
if (isset($requestsPayload['processed_posts'][$desktop_val])) {
$new_val['desktop'] = intval($requestsPayload['processed_posts'][$desktop_val]);
}
$tablet_val = intval($val['tablet']);
if (isset($requestsPayload['processed_posts'][$tablet_val])) {
$new_val['tablet'] = intval($requestsPayload['processed_posts'][$tablet_val]);
}
$mobile_val = intval($val['mobile']);
if (isset($requestsPayload['processed_posts'][$mobile_val])) {
$new_val['mobile'] = intval($requestsPayload['processed_posts'][$mobile_val]);
}
set_theme_mod($key, $new_val);
}
if (
$key === 'custom_logo'
&&
is_numeric($val)
&&
isset($requestsPayload['processed_posts'][intval($val)])
) {
set_theme_mod(
$key,
intval($requestsPayload['processed_posts'][intval($val)])
);
}
if (
is_array($val)
&&
isset($val['attachment_id'])
&&
$val['attachment_id']
&&
isset(
$requestsPayload['processed_posts'][
intval($val['attachment_id'])
]
)
) {
$new_val = $val;
$new_val['attachment_id'] = intval($requestsPayload['processed_posts'][
intval($val['attachment_id'])
]);
set_theme_mod($key, $new_val);
}
}
}
public function patch_attachment_ids_in_array($array, $requestsPayload) {
foreach ($array as $key => $val) {
if (
$key === 'custom_logo'
&&
is_array($val)
&&
isset($val['desktop'])
) {
$new_val = $val;
$desktop_val = intval($val['desktop']);
if (isset($requestsPayload['processed_posts'][$desktop_val])) {
$new_val['desktop'] = intval($requestsPayload['processed_posts'][$desktop_val]);
}
$tablet_val = intval($val['tablet']);
if (isset($requestsPayload['processed_posts'][$tablet_val])) {
$new_val['tablet'] = intval($requestsPayload['processed_posts'][$tablet_val]);
}
$mobile_val = intval($val['mobile']);
if (isset($requestsPayload['processed_posts'][$mobile_val])) {
$new_val['mobile'] = intval($requestsPayload['processed_posts'][$mobile_val]);
}
$array[$key] = $new_val;
}
if (
$key === 'custom_logo'
&&
is_numeric($val)
&&
isset($requestsPayload['processed_posts'][intval($val)])
) {
$array[$key] = intval($requestsPayload['processed_posts'][intval($val)]);
}
if (
is_array($val)
&&
isset($val['attachment_id'])
&&
$val['attachment_id']
&&
isset(
$requestsPayload['processed_posts'][
intval($val['attachment_id'])
]
)
) {
$new_val = $val;
$new_val['attachment_id'] = intval($requestsPayload['processed_posts'][
intval($val['attachment_id'])
]);
$array[$key] = $new_val;
}
}
return $array;
}
}