Current File : /home/mdkeenpw/www/wp-content/plugins/logistik-core/inc/builder/builder.php
<?php
    /**
     * Class For Builder
     */
    class LogistikBuilder{

        function __construct(){
            // register admin menus
        	add_action( 'admin_menu', [$this, 'register_settings_menus'] );

            // Custom Footer Builder With Post Type
			add_action( 'init',[ $this,'post_type' ],0 );

 		    add_action( 'elementor/frontend/after_enqueue_scripts', [ $this,'widget_scripts'] );

			add_filter( 'single_template', [ $this, 'load_canvas_template' ] );

            add_action( 'elementor/element/wp-page/document_settings/after_section_end', [ $this,'logistik_add_elementor_page_settings_controls' ],10,2 );

		}

		public function widget_scripts( ) {
			wp_enqueue_script( 'logistik-core',LOGISTIK_PLUGDIRURI.'assets/js/logistik-core.js',array( 'jquery' ),'1.0',true );
		}


        public function logistik_add_elementor_page_settings_controls( \Elementor\Core\DocumentTypes\Page $page ){

			$page->start_controls_section(
                'logistik_header_option',
                [
                    'label'     => __( 'Header Option', 'logistik' ),
                    'tab'       => \Elementor\Controls_Manager::TAB_SETTINGS,
                ]
            );


            $page->add_control(
                'logistik_header_style',
                [
                    'label'     => __( 'Header Option', 'logistik' ),
                    'type'      => \Elementor\Controls_Manager::SELECT,
                    'options'   => [
    					'prebuilt'             => __( 'Pre Built', 'logistik' ),
    					'header_builder'       => __( 'Header Builder', 'logistik' ),
    				],
                    'default'   => 'prebuilt',
                ]
			);

            $page->add_control(
                'logistik_header_builder_option',
                [
                    'label'     => __( 'Header Name', 'logistik' ),
                    'type'      => \Elementor\Controls_Manager::SELECT,
                    'options'   => $this->logistik_header_choose_option(),
                    'condition' => [ 'logistik_header_style' => 'header_builder'],
                    'default'	=> ''
                ]
            );

            $page->end_controls_section();

            $page->start_controls_section(
                'logistik_footer_option',
                [
                    'label'     => __( 'Footer Option', 'logistik' ),
                    'tab'       => \Elementor\Controls_Manager::TAB_SETTINGS,
                ]
            );
            $page->add_control(
    			'logistik_footer_choice',
    			[
    				'label'         => __( 'Enable Footer?', 'logistik' ),
    				'type'          => \Elementor\Controls_Manager::SWITCHER,
    				'label_on'      => __( 'Yes', 'logistik' ),
    				'label_off'     => __( 'No', 'logistik' ),
    				'return_value'  => 'yes',
    				'default'       => 'yes',
    			]
    		);
            $page->add_control(
                'logistik_footer_style',
                [
                    'label'     => __( 'Footer Style', 'logistik' ),
                    'type'      => \Elementor\Controls_Manager::SELECT,
                    'options'   => [
    					'prebuilt'             => __( 'Pre Built', 'logistik' ),
    					'footer_builder'       => __( 'Footer Builder', 'logistik' ),
    				],
                    'default'   => 'prebuilt',
                    'condition' => [ 'logistik_footer_choice' => 'yes' ],
                ]
            );
            $page->add_control(
                'logistik_footer_builder_option',
                [
                    'label'     => __( 'Footer Name', 'logistik' ),
                    'type'      => \Elementor\Controls_Manager::SELECT,
                    'options'   => $this->logistik_footer_build_choose_option(),
                    'condition' => [ 'logistik_footer_style' => 'footer_builder','logistik_footer_choice' => 'yes' ],
                    'default'	=> ''
                ]
            );

			$page->end_controls_section();

        }

		public function register_settings_menus(){
			add_menu_page(
				esc_html__( 'Logistik Builder', 'logistik' ),
            	esc_html__( 'Logistik Builder', 'logistik' ),
				'manage_options',
				'logistik',
				[$this,'register_settings_contents__settings'],
				'dashicons-admin-site',
				2
			);

			add_submenu_page('logistik', esc_html__('Footer Builder', 'logistik'), esc_html__('Footer Builder', 'logistik'), 'manage_options', 'edit.php?post_type=logistik_footerbuild');
			add_submenu_page('logistik', esc_html__('Header Builder', 'logistik'), esc_html__('Header Builder', 'logistik'), 'manage_options', 'edit.php?post_type=logistik_header');
			add_submenu_page('logistik', esc_html__('Tab Builder', 'logistik'), esc_html__('Tab Builder', 'logistik'), 'manage_options', 'edit.php?post_type=logistik_tab_builder');
		}

		// Callback Function
		public function register_settings_contents__settings(){
            echo '<h2>';
			    echo esc_html__( 'Welcome To Header And Footer Builder Of This Theme','logistik' );
            echo '</h2>';
		}

		public function post_type() {

			$labels = array(
				'name'               => __( 'Footer', 'logistik' ),
				'singular_name'      => __( 'Footer', 'logistik' ),
				'menu_name'          => __( 'Logistik Footer Builder', 'logistik' ),
				'name_admin_bar'     => __( 'Footer', 'logistik' ),
				'add_new'            => __( 'Add New', 'logistik' ),
				'add_new_item'       => __( 'Add New Footer', 'logistik' ),
				'new_item'           => __( 'New Footer', 'logistik' ),
				'edit_item'          => __( 'Edit Footer', 'logistik' ),
				'view_item'          => __( 'View Footer', 'logistik' ),
				'all_items'          => __( 'All Footer', 'logistik' ),
				'search_items'       => __( 'Search Footer', 'logistik' ),
				'parent_item_colon'  => __( 'Parent Footer:', 'logistik' ),
				'not_found'          => __( 'No Footer found.', 'logistik' ),
				'not_found_in_trash' => __( 'No Footer found in Trash.', 'logistik' ),
			);

			$args = array(
				'labels'              => $labels,
				'public'              => true,
				'rewrite'             => false,
				'show_ui'             => true,
				'show_in_menu'        => false,
				'show_in_nav_menus'   => false,
				'exclude_from_search' => true,
				'capability_type'     => 'post',
				'hierarchical'        => false,
				'supports'            => array( 'title', 'elementor' ),
			);

			register_post_type( 'logistik_footerbuild', $args );

			$labels = array(
				'name'               => __( 'Header', 'logistik' ),
				'singular_name'      => __( 'Header', 'logistik' ),
				'menu_name'          => __( 'Logistik Header Builder', 'logistik' ),
				'name_admin_bar'     => __( 'Header', 'logistik' ),
				'add_new'            => __( 'Add New', 'logistik' ),
				'add_new_item'       => __( 'Add New Header', 'logistik' ),
				'new_item'           => __( 'New Header', 'logistik' ),
				'edit_item'          => __( 'Edit Header', 'logistik' ),
				'view_item'          => __( 'View Header', 'logistik' ),
				'all_items'          => __( 'All Header', 'logistik' ),
				'search_items'       => __( 'Search Header', 'logistik' ),
				'parent_item_colon'  => __( 'Parent Header:', 'logistik' ),
				'not_found'          => __( 'No Header found.', 'logistik' ),
				'not_found_in_trash' => __( 'No Header found in Trash.', 'logistik' ),
			);

			$args = array(
				'labels'              => $labels,
				'public'              => true,
				'rewrite'             => false,
				'show_ui'             => true,
				'show_in_menu'        => false,
				'show_in_nav_menus'   => false,
				'exclude_from_search' => true,
				'capability_type'     => 'post',
				'hierarchical'        => false,
				'supports'            => array( 'title', 'elementor' ),
			);

			register_post_type( 'logistik_header', $args );

			$labels = array(
				'name'               => __( 'Tab Builder', 'logistik' ),
				'singular_name'      => __( 'Tab Builder', 'logistik' ),
				'menu_name'          => __( 'Gesund Tab Builder', 'logistik' ),
				'name_admin_bar'     => __( 'Tab Builder', 'logistik' ),
				'add_new'            => __( 'Add New', 'logistik' ),
				'add_new_item'       => __( 'Add New Tab Builder', 'logistik' ),
				'new_item'           => __( 'New Tab Builder', 'logistik' ),
				'edit_item'          => __( 'Edit Tab Builder', 'logistik' ),
				'view_item'          => __( 'View Tab Builder', 'logistik' ),
				'all_items'          => __( 'All Tab Builder', 'logistik' ),
				'search_items'       => __( 'Search Tab Builder', 'logistik' ),
				'parent_item_colon'  => __( 'Parent Tab Builder:', 'logistik' ),
				'not_found'          => __( 'No Tab Builder found.', 'logistik' ),
				'not_found_in_trash' => __( 'No Tab Builder found in Trash.', 'logistik' ),
			);

			$args = array(
				'labels'              => $labels,
				'public'              => true,
				'rewrite'             => false,
				'show_ui'             => true,
				'show_in_menu'        => false,
				'show_in_nav_menus'   => false,
				'exclude_from_search' => true,
				'capability_type'     => 'post',
				'hierarchical'        => false,
				'supports'            => array( 'title', 'elementor' ),
			);

			register_post_type( 'logistik_tab_builder', $args );
		}

		function load_canvas_template( $single_template ) {

			global $post;

			if ( 'logistik_footerbuild' == $post->post_type || 'logistik_header' == $post->post_type || 'logistik_tab_build' == $post->post_type ) {

				$elementor_2_0_canvas = ELEMENTOR_PATH . '/modules/page-templates/templates/canvas.php';

				if ( file_exists( $elementor_2_0_canvas ) ) {
					return $elementor_2_0_canvas;
				} else {
					return ELEMENTOR_PATH . '/includes/page-templates/canvas.php';
				}
			}

			return $single_template;
		}

        public function logistik_footer_build_choose_option(){

			$logistik_post_query = new WP_Query( array(
				'post_type'			=> 'logistik_footerbuild',
				'posts_per_page'	    => -1,
			) );

			$logistik_builder_post_title = array();
			$logistik_builder_post_title[''] = __('Select a Footer','logistik');

			while( $logistik_post_query->have_posts() ) {
				$logistik_post_query->the_post();
				$logistik_builder_post_title[ get_the_ID() ] =  get_the_title();
			}
			wp_reset_postdata();

			return $logistik_builder_post_title;

		}

		public function logistik_header_choose_option(){

			$logistik_post_query = new WP_Query( array(
				'post_type'			=> 'logistik_header',
				'posts_per_page'	    => -1,
			) );

			$logistik_builder_post_title = array();
			$logistik_builder_post_title[''] = __('Select a Header','logistik');

			while( $logistik_post_query->have_posts() ) {
				$logistik_post_query->the_post();
				$logistik_builder_post_title[ get_the_ID() ] =  get_the_title();
			}
			wp_reset_postdata();

			return $logistik_builder_post_title;

        }

    }

    $builder_execute = new LogistikBuilder();