# shopbuilder/1.1.1/app/Controllers/Admin/Ajax/ModalTemplate.php

ShopBuilder – WooCommerce Builder For Elementor, version 1.1.1. 286 lines.

- Page: https://pluginprobe.com/plugins/shopbuilder/1.1.1/code/app/Controllers/Admin/Ajax/ModalTemplate.php
- Raw: https://pluginprobe.com/plugins/shopbuilder/1.1.1/raw/app/Controllers/Admin/Ajax/ModalTemplate.php
- Modified: 2023-05-25T10:51:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/shopbuilder/1.1.1/code/app/Controllers/Admin/Ajax/ModalTemplate.php#L10-L20`.

```php
<?php

namespace RadiusTheme\SB\Controllers\Admin\Ajax;

use RadiusTheme\SB\Helpers\BuilderFns;
use RadiusTheme\SB\Helpers\Fns;
use RadiusTheme\SB\Traits\SingletonTrait;

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
	exit( 'This script cannot be accessed directly.' );
}

/**
 * Template Create Modal.
 */
class ModalTemplate {
	/**
	 * Singleton Trait.
	 */
	use SingletonTrait;

	/**
	 * Construct function
	 */
	private function __construct() {
		add_action( 'wp_ajax_rtsb_builder_modal_template', [ $this, 'response' ] );
		add_action( 'wp_ajax_rtsb_modal_product_search', [ $this, 'product_search' ] );
	}

	/**
	 * Popups For Create Template
	 *
	 * @return void
	 */
	public function response() {
		$title = '<h2>' . esc_html__( 'Template Settings', 'shopbuilder' ) . '</h2>';
		if ( ! Fns::verify_nonce() ) {
			$return = [
				'success' => false,
				'title'   => $title,
				'content' => esc_html__( 'Session Expired...', 'shopbuilder' ),
			];
			wp_send_json( $return );
		}
		$post_id = isset( $_POST['post_id'] ) ? absint( $_POST['post_id'] ) : null;

		$template_type    = null;
		$template_default = null;
		$url              = null;
		$tmp_title        = '';
		$edit_by          = did_action( 'elementor/loaded' ) ? 'elementor' : 'elementor';
		if ( $post_id ) {
			$tmp_title        = get_the_title( $post_id );
			$type             = get_post_meta( $post_id, BuilderFns::template_type_meta_key() );
			$template_type    = isset( $type[0] ) ? $type[0] : '';
			$template_default = absint( BuilderFns::builder_page_id_by_type( $template_type ) );
			$edit_by          = Fns::page_edit_with( $post_id );
			$action           = 'edit';

			// TODO:: This Condition Will remove after relase Gutenberg Addons.
			if ( 'gutenberg' == $edit_by ) {
				$action  = 'elementor';
				$edit_by = 'elementor';
			}

			if ( 'elementor' == $edit_by ) {
				$action = 'elementor';
			}

			$url = add_query_arg(
				[
					'post'   => $post_id,
					'action' => $action,
				],
				admin_url( 'post.php' )
			);
		}
		ob_start();

		?>
		<form action="<?php echo esc_url( admin_url( 'edit.php?post_type=rtsb_builder' ) ); ?>" autocomplete="off">
			<div class="rtsb-tb-modal-wrapper ">
				<div class="rtsb-template-name rtsb-tb-field-wraper">
					<label for="rtsb_tb_template_name"> <?php esc_html_e( 'Template Name', 'shopbuilder' ); ?></label>
					<input
							required
							class="rtsb-field"
							type="text"
							id="rtsb_tb_template_name"
							name="rtsb_tb_template_name"
							placeholder="<?php esc_attr_e( 'Enter Template Name', 'shopbuilder' ); ?>"
							value="<?php echo esc_attr( $tmp_title ); ?>"
							autocomplete="off"
					>
					<span class="message"
						  style="display: none; color:red"><?php esc_html_e( 'This field is required', 'shopbuilder' ); ?></span>
				</div>
				<div class="rtsb-template-type rtsb-tb-field-wraper">
					<label for="rtsb_tb_template_type"><?php esc_html_e( 'Select Template Type', 'shopbuilder' ); ?></label>
					<select class="rtsb-field" id="rtsb_tb_template_type" name="rtsb_tb_template_type">
						<?php
						$builder_page_types = BuilderFns::builder_page_types();
						foreach ( $builder_page_types as $key => $value ) {
							?>
							<option <?php echo $key === $template_type ? 'selected="selected"' : ''; ?>  value="<?php echo esc_attr( $key ); ?>"> <?php echo esc_html( $value ); ?> </option>
						<?php } ?>
					</select>
				</div>

				<div class="rtsb-product-page-preview rtsb-tb-field-wraper" style="display:none;">
					<?php
						$default_items = '';
						$product_id    = get_post_meta( $post_id, BuilderFns::$product_template_meta, true );
					if ( $product_id ) {
						$default_items = '<option selected="selected" value="' . $product_id . '">' . get_the_title( $product_id ) . '</option>';
					}
					?>
					<label for="rtsb_product_page_preview"><?php esc_html_e( 'Select Product For Preview', 'shopbuilder' ); ?></label>
					<select class="rtsb-field" id="rtsb_product_page_preview" name="rtsb_product_page_preview">
						<?php echo $default_items; ?>
					</select>
					<p style="margin:0;"> This Product is only used for preview. </p>
				</div>

				<div class="rtsb-template-edit-with rtsb-tb-field-wraper">
					<label for="rtsb_tb_template_edit_with"><?php esc_html_e( 'Select Editor Type', 'shopbuilder' ); ?></label>
					<select class="rtsb-field" id="rtsb_tb_template_edit_with" name="rtsb_tb_template_edit_with"
							required>
						<option value="elementor" <?php echo 'elementor' === $edit_by ? 'selected="selected"' : ''; ?> ><?php esc_html_e( 'Elementor', 'shopbuilder' ); ?></option>
						<option disabled
								value="gutenberg" <?php // echo 'gutenberg' === $edit_by ? 'selected="selected"' : ''; ?> ><?php esc_html_e( 'Gutenberg (Coming Soon)', 'shopbuilder' ); ?></option>
					</select>
				</div>
				<div class="rtsb-template-setdefaults rtsb-tb-field-wraper">
					<label for="default_template"> <?php esc_html_e( 'Set as Active Template', 'shopbuilder' ); ?></label>
					<span class="rtsb-switch-wrapper"
					      title="<?php esc_html_e( 'Only publish post can set default ', 'shopbuilder' ); ?>">
						<label class="rtsb-switch">
							<input class="rtsb_set_default rtsb-field"
							       type="checkbox"
							       id="default_template"
							       class="rtsb-field"
							       name="default_template"
							       value="default_template"
						<?php echo ( $post_id && absint( $post_id ) === absint( $template_default ) ) ? 'checked' : ''; ?>
						>
							<span class="rtsb-slider rtsb-round ">
								<span class="rtsb-loader"></span>
							</span>
						</label>
					</span>
				</div>
				<?php if ( ! $post_id ) { ?>
					<div class="set-default-layout-wrapper rtsb-tb-field-wraper">
						<label><?php esc_html_e( 'Sample Designs', 'shopbuilder' ); ?></label>
						<div class="set-default-layout">
							<?php
							foreach ( BuilderFns::default_layout() as $key => $layouts ) {
								foreach ( $layouts as $value ) {
									$is_checked = '';
									if ( 'default' == $key && empty( $value['import_file'] ) && ! $is_checked ) {
										$is_checked = 'checked';
									}
									?>
									<label class="layout-container type-<?php echo esc_attr( $key ); ?>"
										   data-layout-type='<?php echo esc_attr( $key ); ?>'>
										<input
											<?php echo esc_attr( $is_checked ); ?>
												class="rtsb-field"
												type="radio"
												value="<?php echo ! empty( $value['import_file'] ) ? esc_attr( $value['import_file'] ) : ''; ?>"
												name="import_default_layout">
										<span class="checkmark dashicons"></span>
										<div class="image-wrapper">
											<?php if ( ! empty( $value['image'] ) ) { ?>
												<img src="<?php echo esc_url( $value['image'] ); ?>" alt="">
											<?php } ?>
										</div>
										<?php if ( ! empty( $value['text_label'] ) ) { ?>
											<div class="image-label">
												<span class="label-text"><?php echo esc_html( $value['text_label'] ); ?></span>
												<?php if ( ! empty( $value['live_preview'] ) ) { ?>
													<a target="_blank" class="btn-live-preview"
													   href="<?php echo esc_url( $value['live_preview'] ); ?>"> <span
																class="dashicons dashicons-visibility"></span> <?php esc_html_e( 'Live Preview', 'shopbuilder' ); ?>
													</a>
												<?php } ?>
											</div>
										<?php } ?>

									</label>
									<?php
								}
							}
							?>
						</div>
					</div>
				<?php } ?>
				<input type="hidden" id="page_id" name="page_id" value="<?php echo esc_attr( $post_id ); ?>">
			</div>
		</form>
		<?php
		$content = ob_get_clean();
		ob_start();
		?>
		<div class="rtsb-template-footer">
			<div class="rtsb-tb-button-wrapper save-button">
				<button <?php echo $post_id ? esc_attr( 'disabled' ) : ''; ?>
						type="submit"
						id="rtsb_tb_button">
					<?php esc_html_e( 'Save', 'shopbuilder' ); ?>
				</button>
			</div>
			<div class="rtsb-tb-button-wrapper rtsb-tb-edit-button-wrapper">
				<a href="<?php echo esc_url( $url ); ?>"
				   class="btn"> <?php esc_html_e( sprintf( 'Edit with %s', $edit_by ), 'shopbuilder' ); ?> </a>
			</div>
		</div>
		<?php
		$footer = ob_get_clean();
		$return = [
			'success' => true,
			'title'   => $title,
			'content' => $content,
			'footer'  => $footer,
		];
		wp_send_json( $return );
		wp_die();
	}

	/**
	 * Popups For Create Template
	 *
	 * @return void
	 */
	public function product_search() {
		if ( ! Fns::verify_nonce() ) {
			$return = [
				'success' => false,
				'content' => esc_html__( 'Session Expired...', 'shopbuilder' ),
			];
			wp_send_json( $return );
		}
		global $wpdb;
		$search = isset( $_REQUEST['search'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['search'] ) ) : null; // phpcs:ignore WordPress.Security.NonceVerification.Missing
		if ( empty( $search ) ) {
			$return = [
				'success' => false,
				'content' => esc_html__( 'Empty string Not allowed...', 'shopbuilder' ),
			];
			wp_send_json( $return );
		}
		$query = $wpdb->prepare(
			"SELECT ID, post_title 
                    FROM $wpdb->posts 
                    WHERE post_type = 'product' 
                    AND post_status = 'publish' 
                    AND post_title LIKE %s 
                    LIMIT %d",
			'%' . $search . '%',
			10
		);

		$_product = wp_cache_get( md5( $query ), 'rtsb-product-query' );
		if ( false === $_product ) {
			$_product = $wpdb->get_results( $query );
			wp_cache_set( md5( $query ), $_product, 'rtsb-product-query' );
		}

		$product_list = [];
		foreach ( $_product as $product ) {
			$product_list['items'][] = [
				'id'   => $product->ID,
				'text' => $product->post_title,
			];
		}

		wp_send_json_success( $product_list );
		wp_die();

	}


}

```
