File: //proc/self/cwd/wp-content/plugins/elementskit-lite/compatibility/data-migration/settings-db.php
<?php
namespace ElementsKit_Lite\Compatibility\Data_Migration;
defined('ABSPATH') || exit;
class Settings_Db {
public function __construct() {
$widget_list = \ElementsKit_Lite\Config\Widget_List::instance()->get_list();
$this->migrate($widget_list, 'widget');
$module_list = \ElementsKit_Lite\Config\Module_List::instance()->get_list();
$this->migrate($module_list, 'module');
// fix slick to swiper migration
add_action('upgrader_process_complete', [$this, 'slick_to_swiper_migrate'], 10, 2);
// migrate nav menu predefined icon to fontawesome icon
add_action('upgrader_process_complete', [$this, 'nav_menu_icon_upgrader'], 10, 2);
}
private function migrate($list, $type) {
$list_db = \ElementsKit_Lite\Libs\Framework\Attr::instance()->utils->get_option($type . '_list', array());
$list_prepared = array();
if (empty($list_db[0]) || is_array($list_db[0])) {
return;
}
foreach ($list as $slug => $info) {
if (isset($info['package']) && $info['package'] == 'pro-disabled') {
continue;
}
if (isset($info['attributes']) && in_array('new', $info['attributes'])) {
continue;
}
$info['status'] = (in_array($slug, $list_db) ? 'active' : 'inactive');
$list_prepared[$slug] = $info;
}
\ElementsKit_Lite\Libs\Framework\Attr::instance()->utils->save_option($type . '_list', $list_prepared);
}
public function slick_to_swiper_migrate($upgrader_object, $options) {
// Plugins to check for updates
$plugins_to_check = [
'elementskit-lite/elementskit-lite.php',
'elementskit/elementskit.php',
];
// Check if any of the specified plugins are updated
if (!empty($options['action']) && $options['action'] === 'update') {
$updated_plugins = [];
if (!empty($options['plugins']) && is_array($options['plugins'])) {
$updated_plugins = $options['plugins'];
}
if (!empty($options['plugin']) && !is_array($options['plugin'])) {
$updated_plugins[] = $options['plugin'];
}
foreach ($plugins_to_check as $plugin_slug) {
if (in_array($plugin_slug, $updated_plugins)) {
// upgrade for lite version
if (!get_transient('ekit_lite_slick_to_swiper_migrate')) {
set_transient('ekit_lite_slick_to_swiper_migrate', \ElementsKit_Lite::version());
\Elementor\Plugin::$instance->files_manager->clear_cache();
}
// upgrade for pro version
if (
method_exists('ElementsKit', 'version')
&& !get_transient('ekit_slick_to_swiper_migrate')
&& version_compare(\ElementsKit::version(), '3.2.1', '>')
&& version_compare(\ElementsKit_Lite::version(), '2.8.8', '>')
) {
set_transient('ekit_slick_to_swiper_migrate', \ElementsKit::version());
\Elementor\Plugin::$instance->files_manager->clear_cache();
}
}
}
}
}
public function nav_menu_icon_upgrader($upgrader_object, $options) {
// Plugins to check for updates
$plugins_to_check = [
'elementskit-lite/elementskit-lite.php',
];
// return if pro not active
if (\ElementsKit_Lite::license_status() !== 'valid') return;
// Check if any of the specified plugins are updated
if (!empty($options['action']) && $options['action'] === 'update') {
$updated_plugins = [];
if (!empty($options['plugins']) && is_array($options['plugins'])) {
$updated_plugins = $options['plugins'];
}
if (!empty($options['plugin']) && !is_array($options['plugin'])) {
$updated_plugins[] = $options['plugin'];
}
foreach ($plugins_to_check as $plugin_slug) {
if (in_array($plugin_slug, $updated_plugins)) {
// upgrade for lite version
if (!get_transient('ekit_lite_nav_menu_icon_migrate')) {
set_transient('ekit_lite_nav_menu_icon_migrate', \ElementsKit_Lite::version());
$this->nav_menu_icon_migrate();
}
}
}
}
}
public function nav_menu_icon_migrate() {
global $wpdb;
// upgrade `video` widget settings (merge providers).
$post_ids = $wpdb->get_col(
'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND `meta_value` LIKE \'%"widgetType":"ekit-nav-menu"%\';'
);
if (empty($post_ids)) {
return;
};
foreach ($post_ids as $post_id) {
$do_update = false;
$document = \Elementor\Plugin::$instance->documents->get($post_id);
if ($document) {
$data = $document->get_elements_data();
}
if (empty($data)) {
continue;
}
$data = \Elementor\Plugin::$instance->db->iterate_data($data, function ($element) use (&$do_update) {
if (empty($element['widgetType']) || 'ekit-nav-menu' !== $element['widgetType'] || !empty($element['settings']['elementskit_submenu_indicator_icon'])) {
return $element;
}
$replacements = [];
if (!empty($element['settings']['elementskit_style_tab_submenu_item_arrow'])) {
$replacements = [
'elementskit_style_tab_submenu_item_arrow' => 'elementskit_submenu_indicator_icon',
];
}
foreach ($replacements as $old => $new) {
if (!empty($element['settings'][$old])) {
switch ($element['settings'][$old]) {
case 'elementskit_line_arrow':
$element['settings'][$new] = [
'value' => 'icon icon-down-arrow1',
'library' => 'ekiticons',
];
break;
case 'elementskit_plus_icon':
$element['settings'][$new] = [
'value' => 'icon icon-plus',
'library' => 'ekiticons',
];
break;
case 'elementskit_fill_arrow':
$element['settings'][$new] = [
'value' => 'icon icon-arrow-point-to-down',
'library' => 'ekiticons',
];
break;
default:
$element['settings'][$new] = [
'value' => '',
'library' => '',
];
}
// $element['settings'][$new] = $element['settings'][$old];
$do_update = true;
}
}
// cleanup old unused settings.
if (!empty($element['settings']['elementskit_style_tab_submenu_item_arrow'])) {
// unset($element['settings']['elementskit_style_tab_submenu_item_arrow']);
}
return $element;
});
// Only update if needed.
if (!$do_update) {
continue;
}
// We need the `wp_slash` in order to avoid the unslashing during the `update_post_meta`
$json_value = wp_slash(wp_json_encode($data));
update_metadata('post', $post_id, '_elementor_data', $json_value);
// Clear WP cache for next step.
wp_cache_flush();
} // End foreach().
}
}