HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux sci 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: tpdc (1002)
PHP: 7.4.3-4ubuntu2.29
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/nsci/wp-content/themes/soledad/inc/data-imex/penci-imex.php
<?php
$upload_dir              = wp_upload_dir();
$penci_imex_temp         = $upload_dir['basedir'] . '/penci-data-imex-temp/';
$penci_imex_temp_uploads = $penci_imex_temp . '/uploads/';

define( 'PENCI_IMEX_TEMP', $penci_imex_temp );
define( 'PENCI_IMEX_TEMP_UPLOADS', $penci_imex_temp_uploads );

class Penci_Export_Init {

	protected $demo_lists = array();

	public function __construct() {
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
		add_action( 'wp_ajax_penci_export_content', [ $this, 'export_content' ] );
		add_action( 'wp_ajax_penci_import_content', [ $this, 'import_content' ] );
		add_action( 'wp_ajax_penci_upload_import', [ $this, 'upload_import' ] );
		add_filter( 'post_row_actions', [ $this, 'add_export_link' ], 10, 2 );
		add_action( 'edit_form_advanced', [ $this, 'init_demo_import' ] );
		add_filter( 'advanced_import_demo_lists', [ $this, 'penci_demo_import_lists' ] );
		add_action( 'edit_form_after_title', [ $this, 'import_button' ], 10 );
		add_action( 'edit_form_after_title', [ $this, 'video_tutorial_button' ], 10 );
		add_action( 'in_admin_footer', [ $this, 'footer_upload' ] );
	}

	function footer_upload() {
		global $pagenow, $post;
		if ( isset( $post->post_type ) && 'penci_builder' == $post->post_type ) {
			add_thickbox();
			?>
            <div class="hidden" id="penci-imex-custom-upload">
				<?php $this->demo_import_form(); ?>
            </div>
			<?php
		}
	}

	public function demo_import_form( $total_demo = 0 ) {
		global $post;
		?>
        <div class="penci-imex-form <?php echo $total_demo > 0 ? 'hidden' : ''; ?>">
            <div id="penci-imex-upload-zip">
                <h3><?php esc_attr_e( 'Import Header Builder', 'soledad' ); ?></h3>
				<p><?php _e( "This is a feature to help you can export settings from a header you've made and import it to another header. It helps in case you want to move all settings from an existing header to another header or move a header from a website to another website.<br>Please check <a href='https://imgresources.s3.amazonaws.com/export-header.png' target='_blank'>this image</a> to know how to export settings for a header.", 'soledad' ); ?></p>
                <form id="penci_upload_form" enctype="multipart/form-data" novalidate>
                    <div class="input-file">
                        <input id="userupload" type="file" name="file" accept="application/json"/>
                        <p class="notes"><?php esc_attr_e( 'Only accept .json export file of Penci Builder.', 'soledad' ); ?></p>
                    </div>
                    <input type="hidden" name="id" value="<?php echo esc_attr( $post->ID ); ?>">
                    <input class="button button-primary button-large" type="submit" value="Import Header Builder"/>
                </form>
                <p class="penci-import-result"></p>
            </div>
        </div>
		<?php
	}

	/**
	 * Register the JavaScript for the admin area.
	 *
	 * @since    1.0.0
	 */
	public function enqueue_scripts() {

		wp_enqueue_style( 'penci-imex-export-style', get_template_directory_uri() . '/inc/data-imex/assets/css/penci-imex-admin.css', array(
			'wp-admin',
			'dashicons'
		), '1.0' );
		wp_enqueue_script( 'penci-imex-export', get_template_directory_uri() . '/inc/data-imex/assets/js/advanced-export-admin.js', array( 'jquery' ), '1.0', false );
		wp_localize_script(
			'penci-imex-export',
			'penci_imex_export_object',
			array(
				'ajaxurl' => admin_url( 'admin-ajax.php' ),
				'nonce'   => wp_create_nonce( 'penci-imex-export' ),
			)
		);
		wp_enqueue_media();
	}

	/**
	 * Export Content
	 *
	 * @since    1.0.0
	 */
	public function export_content() {
		if ( empty( $_REQUEST['type'] ) || empty( $_REQUEST['id'] ) ) {
			return;
		}

		$content = get_post_meta( $_REQUEST['id'], 'settings_content', true );
		echo json_encode( $content );
		die();
	}

	public function import_content() {
		$demo_file = $_REQUEST['content'];
		$postID    = $_REQUEST['id'];
		$slug      = $_REQUEST['slug'];
		if ( $demo_file ) {
			$file = wp_remote_get( $demo_file );
			$data = json_decode( $file['body'], true );
			if ( isset( $data['penci_builder'][0]['meta']['settings_content'] ) ) {
				$data = $data['penci_builder'][0]['meta']['settings_content'];
			}

			$progress = wp_update_post( [
				'ID'          => $postID,
				'post_status' => 'publish',
				'meta_input'  => [
					'settings_content' => $data,
					'settings_demo'    => $slug,
				]
			] );
			wp_send_json_success( $progress );
		}
		wp_die();
	}

	public function add_export_link( $actions, $post ) {

		$export_posttype = [
			'penci_builder',
		];

		if ( in_array( $post->post_type, $export_posttype ) ) {
			$actions['penci-export'] = '<a rel="download" data-id="' . esc_attr( $post->ID ) . '" data-type="' . esc_attr( $post->post_type ) . '" class="penci-content-export" href="#">' . __( 'Export' ) . '</a>';
		}

		return $actions;
	}

	public function init_demo_import( $post ) {
		$total_demo = 0;
		if ( 'penci_builder' == $post->post_type ) {
			$this->demo_lists  = apply_filters( 'advanced_import_demo_lists', array() );
			$demo_lists_define = $this->demo_lists;

			$total_demo = count( $demo_lists_define );
			if ( $total_demo >= 1 ) {
				$this->demo_list( $demo_lists_define, $total_demo );
			}
			$this->demo_import_form( $total_demo );
		}
	}

	public function demo_list( $demo_lists, $total_demo ) {
		?>
        <div class="penci-imex-filter-content-heading">
            <h3><?php echo esc_attr( 'Import from Pre-built Headers' ); ?></h3>
            <p><?php echo 'Note that: Import a Pre-Built Header Will Replace All Settings You\'ve Setup for This Header.<br>After Importing A Header, You Need to Edit It with Penci Header Builder and Select The Menus You Want to Show on This Header.'; ?></p>
        </div>
        <div class="penci-imex-filter-content" id="penci-imex-filter-content">
            <div class="penci-imex-filter-content-wrapper">
				<?php
				global $post;
				foreach ( $demo_lists as $key => $demo_list ) {

					/*Check for required fields*/
					if ( ! isset( $demo_list['title'] ) || ! isset( $demo_list['screenshot_url'] ) || ! isset( $demo_list['demo_url'] ) ) {
						continue;
					}

					$data_template = '';
					$template_url  = isset( $demo_list['template_url'] ) && ! empty( $demo_list['template_url'] ) ? $demo_list['template_url'] : '';
					if ( $template_url ) {
						$data_template = 'data-template_url="' . esc_attr( $template_url ) . '"';
					}
					$item_slug = sanitize_title_with_dashes( $demo_list['title'] );
					$demo      = get_post_meta( $post->ID, 'settings_demo', true );
					$class     = $demo == $item_slug ? 'imported' : 'featured-import';
					?>
                    <div <?php echo $data_template; ?>
                            data-slug="<?php echo esc_attr( $item_slug ); ?>"
                            data-id="<?php echo esc_attr( $post->ID ); ?>"
                            aria-label="<?php echo esc_attr( $demo_list['title'] ); ?>"
                            class="penci-imex-item <?php echo esc_attr( $class ); ?>">
						 <div class="penci-imex-item-footer">
                            <div class="penci-imex-item-footer_meta">
                                <h3 class="theme-name"><?php echo esc_html( $demo_list['title'] ); ?></h3>
                                <div class="penci-imex-item-footer-actions">
									<?php if ( ! empty( $demo_list['demo_url'] ) ): ?>
                                        <a class="button penci-imex-item-demo-link"
                                           href="<?php echo esc_url( $demo_list['demo_url'] ); ?>" target="_blank">
                                            <span class="dashicons dashicons-visibility"></span><?php esc_html_e( 'Preview', 'soledad' ); ?>
                                        </a>
									<?php
									endif;
									?>
                                    <a class="button penci-import-button is-button is-default is-primary is-large button-primary"
                                       href="#"
                                       aria-label="<?php esc_attr_e( 'Import', 'soledad' ); ?>">
                                        <span class="dashicons dashicons-download"></span><?php esc_html_e( 'Import', 'soledad' ); ?>
                                    </a>
                                </div>
                            </div>
                        </div>
                        <div class="penci-imex-item-preview">
                            <div class="penci-imex-item-screenshot">
                                <img alt="" src="<?php echo esc_url( $demo_list['screenshot_url'] ); ?>">
                            </div>
                        </div>
                    </div>
					<?php
				}
				?>
            </div>
        </div>
		<?php
	}

	public function penci_demo_import_lists() {
		$return = array();
		for ($index = 1; $index <= 10; $index++) {
			$title = 'header' . $index;
			$args = array(
				'title'          => __( 'Header ', 'soledad' ) . $index,
				'type'           => 'header',
				'author'         => __( 'PenciDesign', 'soledad' ),
				'template_url'   => 'https://imgresources.s3.amazonaws.com/header-builder/header-json/header-'. $index . '.json',
				'screenshot_url' => 'https://imgresources.s3.amazonaws.com/header-builder/header-'. $index .'.jpg',
				'demo_url'       => '',
			);
			if( 9 == $index ){
				$args['title'] = __( 'Header ', 'soledad' ) . $index . __( ' - Overlap Header', 'soledad' );
			}
			$return[ $title ] = $args;
		}
		
		return $return;
	}

	public function import_button( $post ) {
		if ( 'penci_builder' === $post->post_type ) {
			?>
            <div class="penci-use-import-button penci-builder-button">
                <a data-id="<?php echo $post->ID; ?>"
                   href="#TB_inline?&width=600&height=480&inlineId=penci-imex-custom-upload"
                   class="thickbox button"><?php echo esc_attr__( 'Import Header Builder', 'soledad' ); ?></a>
            </div>
			<?php
		}
	}
	
	public function video_tutorial_button( $post ) {
		if ( 'penci_builder' === $post->post_type ) {
			?>
			<div class="penci-video-tutbtn penci-builder-button">
                <a target="_blank" href="https://www.youtube.com/watch?v=kUFqsVYyJig&list=PL1PBMejQ2VTwp9ppl8lTQ9Tq7I3FJTT04&index=4" class="button"><?php echo esc_attr__( 'Watch Video Tutorial', 'soledad' ); ?></a>
            </div>
			<?php
		}
	}

	public function upload_import() {
		$content = '';
		if ( is_uploaded_file( $_FILES['file']['tmp_name'] ) && isset( $_POST['id'] ) ) {
			$id       = $_POST['id'];
			$data_out = '';
			$class    = '';

			$content  = file_get_contents( $_FILES['file']['tmp_name'] );
			$content  = json_decode( $content, true );
			$progress = wp_update_post( [
				'ID'          => $id,
				'post_status' => 'publish',
				'meta_input'  => [
					'settings_content' => $content,
					'settings_demo'    => 'custom_import',
				]
			] );
			if ( is_wp_error( $progress ) ) {
				$errors   = $progress->get_error_messages();
				$data_out .= implode( ',', $errors );
				$class    = 'error';
			} else {
				$data_out = esc_attr__( 'Import Header Builder Data Successfully', 'soledad' );
				$class    = 'success';
			}
		} else {
			$data_out = esc_attr__( 'Please Add Import Data File', 'soledad' );
			$class    = 'error';
		}
		wp_send_json_success( [ 'text' => $data_out, 'class' => $class ], 200 );
	}
}

new Penci_Export_Init();