File: /home/creaqbdc/public_html/wp-content/plugins/elementskit/import/import-screen.php
<?php
namespace ElementsKit\Import;
use ElementsKit\Traits\Singleton;
class Import_Screen {
use Singleton;
public function init() {
add_action('admin_init', [$this, 'process_imported_json']);
add_action('admin_head-edit.php', [$this, 'button_insert_into_cpt_list_page']);
add_action('admin_notices', function() {
if(!empty($_REQUEST['import-from-json'])) {
printf('<div id="message" class="updated notice is-dismissable"><p> %1$d %2$s</p></div>',
intval($_REQUEST['import-from-json']),
esc_html__('posts imported successfully.' , 'elementskit'),
);
}
});
}
public function process_imported_json() {
$args = array($_GET);
if(isset($_GET['handler']) && $_GET['handler'] = 'ekit_wb_import') {
if(wp_verify_nonce($_GET['nonce'], 'ekit_wb_import_nnc')) {
$fl = get_attached_file($_GET['media_id']);
if(!empty($fl)) {
if(substr($fl, -5) !='.json') {
wp_die('Only json file is supporter for import.');
}
$cont = $this->read_json_file($fl);
$cont = json_decode($cont);
foreach($cont as $item) {
$wb_data = unserialize($item->elementskit_custom_widget_data);
$p_title = $wb_data->title;
$wd_id = $this->create_new_widget($p_title);
$wb_data->push_id = $wd_id;
update_post_meta($wd_id, '_elementor_edit_mode', $item->_elementor_edit_mode);
update_post_meta($wd_id, '_wp_page_template', $item->_wp_page_template);
update_post_meta($wd_id, 'elementskit_custom_widget_data', $wb_data);
\ElementsKit_Lite\Modules\Widget_Builder\Widget_File::instance()->create($wb_data, $wd_id);
}
$args['import-from-json'] = count($cont);
$redir = admin_url('edit.php');
$redir = add_query_arg($args, $redir);
$redir = remove_query_arg(['handler', 'nonce', 'media_id', 'post_status'], $redir);
wp_redirect($redir);
exit();
}
}
}
}
public function button_insert_into_cpt_list_page() {
if(!is_user_logged_in() || !current_user_can('manage_options')) {
return [
'success' => false,
'message' => [
esc_html__("Not enough permission.", 'elementskit'),
],
];
}
global $current_screen, $wp;
if('elementskit_widget' == $current_screen->post_type) {
$args = array($_GET);
$args['handler'] = 'ekit_wb_import';
$args['nonce'] = wp_create_nonce('ekit_wb_import_nnc');
$redir = home_url(add_query_arg($args, $wp->request));
wp_enqueue_media();
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
$($(".wrap .page-title-action")[0]).after('<a id="ekit_import_btn" href="#" class="page-title-action">Import</a>');
$(document).on('click', '#ekit_import_btn', function (ev) {
ev.preventDefault();
var button = $(this),
aw_uploader = wp.media({
title: 'Widget Import',
library: {
uploadedTo: wp.media.view.settings.post.id,
type: 'file'
},
button: {
text: 'Use this file'
},
multiple: false
}).on('select', function () {
var attachment = aw_uploader.state().get('selection').first().toJSON();
import_wb_widgets(attachment, '<?php echo $redir //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>');
}).open();
});
});
function import_wb_widgets($importer_file, $url) {
var append = '&media_id=' + $importer_file.id;
window.location = $url + append;
}
</script>
<?php
}
}
private function read_json_file($file_path) {
ob_start();
include $file_path;
$contents = ob_get_clean();
return $contents;
}
private function create_new_widget($title) {
$widget_data = [
'post_title' => $title,
'post_status' => 'publish',
'post_type' => 'elementskit_widget',
];
$id = wp_insert_post($widget_data);
return $id;
}
}