<?php
namespace Elementor; // Custom widgets must be defined in the Elementor namespace
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly (security measure)
/**
 * Widget Name: Projects Carousel
 */
class pbmit_JobsCategoryElement extends Widget_Base{
	// The get_name() method is a simple one, you just need to return a widget name that will be used in the code.
	public function get_name() {
		return 'pbmit_jobs_category_element';
	}
	// The get_title() method, which again, is a very simple one, you need to return the widget title that will be displayed as the widget label.
	public function get_title() {
		return esc_attr__( 'Xhyre Jobs Category Element', 'xhyre' );
	}
	// The get_icon() method, is an optional but recommended method, it lets you set the widget icon. you can use any of the eicon or font-awesome icons, simply return the class name as a string.
	public function get_icon() {
		return 'fas fa-toolbox';
	}
	// The get_categories method, lets you set the category of the widget, return the category name as a string.
	public function get_categories() {
		return [ 'xhyre_category' ];
	}
	public function __construct($data = [], $args = null) {
		parent::__construct($data, $args);
		if( !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='carousel' ){
			wp_enqueue_script( 'swiper' );
			wp_enqueue_style( 'swiper' );
		}
	}
	protected function register_controls() {
		// Style
		$this->start_controls_section(
			'style_section',
			[
				'label' => esc_attr__( 'Select Style', 'xhyre' ),
				'tab'	=> Controls_Manager::TAB_CONTENT,
			]
		);
		$this->add_control(
			'style',
			[
				'label'		 => esc_attr__( 'Select Jobs View Style', 'xhyre' ),
				'description'   => esc_attr__( 'Select Jobs View style.', 'xhyre' ),
				'type'		  => 'pbmit_imgselect',
				'label_block'   => true,
				'thumb_width'   => '110px',
				'default'	   => '1',
				'options'	   => pbmit_element_template_list( 'jobs-category', 'elementor' ),
			]
		);
		$this->end_controls_section();
		// Appearance
		$this->start_controls_section(
			'row_column_section',
			[
				'label' => esc_attr__( 'Column and Carousel Options', 'xhyre' ),
			]
		);
		$this->add_control(
			'view-type',
			[
				'label'			=> esc_attr__( 'How you like to view each Post box?', 'xhyre' ),
				'description'	=> esc_attr__( 'Show as carousel view or simple row-column view.', 'xhyre' ),
				'type'			=> 'pbmit_imgselect',
				'label_block'	=> true,
				'thumb_width'	=> '110px',
				'default'		=> 'row-column',
				'options'		=> [
					'row-column'	=> esc_url( get_template_directory_uri() . '/includes/images/row-column.png' ),
					'carousel'		=> esc_url( get_template_directory_uri() . '/includes/images/carousel.png' ),
				]
			]
		);
		// Carousel: Heading
		$this->add_control(
			'carousel_options',
			[
				'label'		=> esc_attr__( 'Carousel Options', 'xhyre' ),
				'type'		=> Controls_Manager::HEADING,
				'separator'	=> 'before',
				'condition'	=> [
					'view-type'	=> 'carousel',
				],
			]
		);
		// Carousel : Autoplay
		$this->add_control(
			'carousel-autoplay',
			[
				'label'			=> esc_attr__( 'Carousel: Autoplay', 'xhyre' ),
				'description'	=> esc_attr__( 'Autoplay of carousel.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> '1',
				'options'		=> [
					'1'				=> esc_attr__( 'Yes', 'xhyre' ),
					'0'				=> esc_attr__( 'No', 'xhyre' ),
				],
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Carousel : delay
		$this->add_control(
			'carousel-delay',
			[
				'label'			=> esc_attr__( 'Carousel: delay', 'xhyre' ),
				'description'	=> esc_attr__( 'Slide hold time (in ms).', 'xhyre' ),
				'type'			=> Controls_Manager::TEXT,
				'default'		=> '4000',
				'condition'		=> [
					'view-type'			=> 'carousel',
					'carousel-autoplay'	=> '1',
				],
			]
		);
		// Carousel : Loop
		$this->add_control(
			'carousel-loop',
			[
				'label'			=> esc_attr__( 'Carousel: Loop', 'xhyre' ),
				'description'	=> esc_attr__( 'Set to YES to enable continuous loop mode. Set NO to enable rewind loop mode.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> '1',
				'options'		=> [
					'1'				=> esc_attr__( 'Yes', 'xhyre' ),
					'0'				=> esc_attr__( 'No', 'xhyre' ),
				],
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Carousel : Center
		$this->add_control(
			'carousel-center',
			[
				'label'			=> esc_attr__( 'Carousel: Center', 'xhyre' ),
				'description'	=> esc_attr__( 'Center item. Works well with even an odd number of items.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> '0',
				'options'		=> [
					'1'				=> esc_attr__( 'Yes', 'xhyre' ),
					'0'				=> esc_attr__( 'No', 'xhyre' ),
				],
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Carousel : Nav
		$this->add_control(
			'carousel-nav',
			[
				'label'			=> esc_attr__( 'Carousel: Nav', 'xhyre' ),
				'description'	=> esc_attr__( 'Show next/prev buttons.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> '0',
				'options'		=> [
					'1'				=> esc_attr__( 'Yes', 'xhyre' ),
					'0'				=> esc_attr__( 'No', 'xhyre' ),
					'above'			=> esc_attr__( 'Yes, near heading area', 'xhyre' ),
				],
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Carousel : Dots
		$this->add_control(
			'carousel-dots',
			[
				'label'			=> esc_attr__( 'Carousel: Dots', 'xhyre' ),
				'description'	=> esc_attr__( 'Show dots navigation.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> '0',
				'options'		=> [
					'1'				=> esc_attr__( 'Yes', 'xhyre' ),
					'0'				=> esc_attr__( 'No', 'xhyre' ),
				],
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Carousel : Speed
		$this->add_control(
			'carousel-speed',
			[
				'label'			=> esc_attr__( 'Carousel:Speed', 'xhyre' ),
				'description'	=> esc_attr__( 'Slider animation time (in ms.)', 'xhyre' ),
				'type'			=> Controls_Manager::TEXT,
				'default'		=> '3000',
				'condition'		=> [
					'view-type'		=> 'carousel',
				],
			]
		);
		// Columns
		$this->add_control(
			'view-column-section-heading',
			[
				'label'			=> esc_attr__( 'Column Settings', 'xhyre' ),
				'type'			=> Controls_Manager::HEADING,
				'separator'		=> 'before',
				'condition'		=> [
				]
			]
		);
		$this->add_control(
			'columns',
			[
				'label'			=> esc_attr__( 'View in Column', 'xhyre' ),
				'description'	=> esc_attr__( 'Select how many column to show.', 'xhyre' ),
				'type'			=> 'pbmit_imgselect',
				'label_block'	=> true,
				'thumb_width'	=> '110px',
				'default'		=> '3',
				'options'		=> [
					'1'				=> esc_url( get_template_directory_uri() . '/includes/images/column-1.png' ),
					'2'				=> esc_url( get_template_directory_uri() . '/includes/images/column-2.png' ),
					'3'				=> esc_url( get_template_directory_uri() . '/includes/images/column-3.png' ),
					'4'				=> esc_url( get_template_directory_uri() . '/includes/images/column-4.png' ),
				],
			]
		);
		$this->end_controls_section();
		// Heading and Subheading
		$this->start_controls_section(
			'heading_section',
			[
				'label' => esc_attr__( 'Heading and Subheading', 'xhyre' ),
			]
		);
		$this->add_control(
			'title',
			[
				'label'		=> esc_attr__( 'Heading', 'xhyre' ),
				'type'		=> Controls_Manager::TEXTAREA,
				'dynamic'	=> [
					'active'	=> true,
				],
				'default'		=> esc_attr__( 'Welcome to our site', 'xhyre' ),
				'placeholder'	=> esc_attr__( 'Enter your heading', 'xhyre' ),
				'label_block'	=> true,
			]
		);
		$this->add_control(
			'title_link',
			[
				'label'			=> esc_attr__( 'Heading Link', 'xhyre' ),
				'type'			=> Controls_Manager::URL,
				'label_block'	=> true,
			]
		);
		$this->add_control(
			'subtitle',
			[
				'label'			=> esc_attr__( 'Subheading', 'xhyre' ),
				'type'			=> Controls_Manager::TEXTAREA,
				'dynamic'		=> [
					'active'		=> true,
				],
				'placeholder'	=> esc_attr__( 'Enter your subtitle', 'xhyre' ),
				'label_block'	=> true,
			]
		);
		$this->add_control(
			'subtitle_link',
			[
				'label'			=> esc_attr__( 'Subheading Link', 'xhyre' ),
				'type'			=> Controls_Manager::URL,
				'label_block'	=> true,
			]
		);
		$this->add_control(
			'desc',
			[
				'label'			=> esc_attr__( 'Description', 'xhyre' ),
				'type'			=> Controls_Manager::TEXTAREA,
				'placeholder'	=> esc_attr__( 'Type your description here', 'xhyre' ),
			]
		);
		$this->add_control(
			'reverse_title',
			[
				'label'			=> esc_attr__( 'Reverse Heading', 'xhyre' ),
				'description'	=> esc_attr__( 'Show Subheading before Heading', 'xhyre' ),
				'type'			=> Controls_Manager::SWITCHER,
				'label_on'		=> esc_attr__( 'Yes', 'xhyre' ),
				'label_off'		=> esc_attr__( 'No', 'xhyre' ),
				'return_value'	=> 'yes',
				'default'		=> '',
			]
		);
		$this->add_responsive_control(
			'text_align',
			[
				'label'			=> esc_attr__( 'Alignment', 'xhyre' ),
				'type'			=> Controls_Manager::CHOOSE,
				'options'		=> [
					'left'			=> [
						'title'			=> esc_attr__( 'Left', 'xhyre' ),
						'icon'			=> 'fa fa-align-left',
					],
					'center'		=> [
						'title'			=> esc_attr__( 'Center', 'xhyre' ),
						'icon'			=> 'fa fa-align-center',
					],
					'right'			=> [
						'title'			=> esc_attr__( 'Right', 'xhyre' ),
						'icon'			=> 'fa fa-align-right',
					],
				],
				'prefix_class'	=> 'pbmit-ele-header-align-',
				'selectors'		=> [
					'{{WRAPPER}} .pbmit-heading-subheading' => 'text-align: {{VALUE}};',
				],
			]
		);
		$this->add_control(
			'btn_title',
			[
				'label'			=> esc_attr__( 'Button Title', 'xhyre' ),
				'type'			=> Controls_Manager::TEXT,
				'dynamic'		=> [
					'active'		=> true,
				],
				'default'		=> esc_attr__( 'Read More', 'xhyre' ),
				'placeholder'	=> esc_attr__( 'Enter button title here', 'xhyre' ),
				'label_block'	=> true,
				'default' 	  => esc_attr__( 'Read More', 'xhyre' ),			
				'condition'		=> [
					'style'			=> ['3'],
				],
			]
		);
		$this->add_control(
			'btn_link',
			[
				'label'			=> esc_attr__( 'Button Link', 'xhyre' ),
				'type'			=> Controls_Manager::URL,
				'label_block'	=> true,
				'default'		=> array (
					'url'				=> '',
					'is_external'		=> '',
					'nofollow'			=> '',
					'custom_attributes'	=> '',
				),
				'condition'		=> [
					'style'			=> ['3'],
				],
			]
		);
		$this->end_controls_section();
		// HTML Tags
		$this->start_controls_section(
			'advanced_section',
			[
				'label'	=> pbmit_esc_kses('<img class="pbmit-tab-small-logo" src="'.get_template_directory_uri() . '/includes/images/pbm-small-logo.png" /> ') . esc_attr__( 'Tag & Gap Settings', 'xhyre' ),
				'tab'	=> Controls_Manager::TAB_ADVANCED,
			]
		);
		$this->add_control(
			'tag_options',
			[
				'label'		=> esc_attr__( 'Tags for SEO', 'xhyre' ),
				'type'		=> Controls_Manager::HEADING,
				'separator'	=> 'before',
			]
		);
		$this->add_control(
			'title_tag',
			[
				'label'		=> esc_attr__( 'Heading Tag', 'xhyre' ),
				'type'		=> Controls_Manager::SELECT,
				'options'	=> [
					'h1'		=> esc_attr( 'H1' ),
					'h2'		=> esc_attr( 'H2' ),
					'h3'		=> esc_attr( 'H3' ),
					'h4'		=> esc_attr( 'H4' ),
					'h5'		=> esc_attr( 'H5' ),
					'h6'		=> esc_attr( 'H6' ),
					'div'		=> esc_attr( 'DIV' ),
				],
				'default'	=> esc_attr( 'h2' ),
			]
		);
		$this->add_control(
			'subtitle_tag',
			[
				'label'		=> esc_attr__( 'Subheading Tag', 'xhyre' ),
				'type'		=> Controls_Manager::SELECT,
				'options'	=> [
					'h1'		=> esc_attr( 'H1' ),
					'h2'		=> esc_attr( 'H2' ),
					'h3'		=> esc_attr( 'H3' ),
					'h4'		=> esc_attr( 'H4' ),
					'h5'		=> esc_attr( 'H5' ),
					'h6'		=> esc_attr( 'H6' ),
					'div'		=> esc_attr( 'DIV' ),
				],
				'default' => esc_attr( 'h4' ),
			]
		);
		$this->add_control(
			'gap_options',
			[
				'label'		=> esc_attr__( 'Gap between Logo boxes', 'xhyre' ),
				'type'		=> Controls_Manager::HEADING,
				'separator'	=> 'before',
			]
		);
		$this->add_control(
			'gap',
			[
				'label'			=> esc_attr__( 'Box Gap', 'xhyre' ),
				'description'	=> esc_attr__( 'Gap between each job box.', 'xhyre' ),
				'type'			=> Controls_Manager::SELECT,
				'default'		=> 'default',
				'options'		=> [
					'default'		=> esc_attr__( 'Default Gap', 'xhyre' ),
					'0px'			=> esc_attr__( 'No Gap (0px)', 'xhyre' ),
					'5px'			=> esc_attr__( '5px', 'xhyre' ),
					'10px'			=> esc_attr__( '10px', 'xhyre' ),
					'15px'			=> esc_attr__( '15px', 'xhyre' ),
					'20px'			=> esc_attr__( '20px', 'xhyre' ),
					'25px'			=> esc_attr__( '25px', 'xhyre' ),
					'30px'			=> esc_attr__( '30px', 'xhyre' ),
					'35px'			=> esc_attr__( '35px', 'xhyre' ),
					'40px'			=> esc_attr__( '40px', 'xhyre' ),
					'45px'			=> esc_attr__( '45px', 'xhyre' ),
					'50px'			=> esc_attr__( '50px', 'xhyre' ),
				],
			]
		);
		$this->end_controls_section();
	}
	protected function render() {
		if( !defined('JOB_MANAGER_PLUGIN_DIR') ){
			echo '<!-- The WP Job Manager plugin is not active -->';
			return;
		}
		$settings   = $this->get_settings_for_display();
		extract($settings);
		
		// check variables
		$columns = ( !empty($columns) ) ? $columns : '1' ;
		// swiper variables
		$swiper_class = '';
		if( isset($data['settings']["view-type"]) && !empty($data['settings']["view-type"]) && $data['settings']["view-type"]=='carousel' ){
			$swiper_class = ' swiper-wrapper';
		}
		?>
		<?php
		// Starting container
		$start_div = pbmit_element_container( array(
			'position'	=> 'start',
			'cpt'		=> 'jobs-category',
			'data'		=> $settings
		) );
		echo pbmit_esc_kses($start_div);
		if( $style == '2' ||  $style == '3' ){ ?>
			<div class="row">
				<div class="pbmit-heading-left-area col-lg-12 col-xl-4 pbmit-column">
					<div class="pbmit-ele-header-area">
						<div class="pbmit-header-area-inner">
						<?php pbmit_heading_subheading($settings, true); ?>
						<?php 
							// Button
							$button_html = '';
							if( !empty($settings['btn_title']) && !empty($settings['btn_link']['url']) ){
								$button_html = '<div class="pbmit-job-category-btn pbmit-head-btn">' . pbmit_link_render($settings['btn_link'], 'start' ) . pbmit_esc_kses($settings['btn_title']) . pbmit_link_render($settings['btn_link'], 'end' ) . '</div>';
							} ?>
							<?php if( $style == '3' ){ 				
								echo pbmit_esc_kses($button_html);
							} 
							?>
						</div>
					</div>
				</div>
			<?php }	else { ?>
			<div class="pbmit-ele-header-area">
				<?php pbmit_heading_subheading($settings, true); ?>
			</div>
		<?php }
		// Get the terms and order them by count in descending order.
		$terms = get_terms( [
			'taxonomy'	=> 'job_listing_category',
			'orderby'	=> 'count',
			'order'		=> 'DESC',
		] );
		?>
			<?php if( !empty($terms) ){ 
				if( $style =='2' || $style =='3' ){ ?>
					<div class="pbmit-content-right-area col-lg-12 col-xl-8 pbmit-column">
				<?php }	?>
				<div class="pbmit-element-posts-wrapper row multi-columns-row <?php if( !empty($settings['view-type']) && trim($settings['view-type'])=='carousel' ){ ?>swiper-container<?php } ?>" >

					<?php
					foreach ( $terms as $term ) {
						// Template
						if( file_exists( locate_template( '/theme-parts/jobs-category/jobs-category-style-'.esc_attr($style).'.php', false, false ) ) ){

							pbmit_element_block_container( array(
								'position'	=> 'start',
								'column'	=> $columns,
								'cpt'		=> 'jobs-category',
								'style'		=> $style
							),true );
							
							include( locate_template( '/theme-parts/jobs-category/jobs-category-style-'.esc_attr($style).'.php', false, false ) );

							pbmit_element_block_container( array(
								'position'	=> 'end',
							),true );
						} ?>
					<?php } /* foreach */ ?>	

				</div><!-- .pbmit-element-posts-wrapper .row multi-columns-row -->
			<?php } /* if */ ?>
			<?php if( $style == '2' || $style =='3' ){ ?></div></div><!--.row end --><!-- pbmit-portfoliobox-right end --><?php } ?>
		<?php wp_reset_postdata(); ?>
		<?php
		// Ending wrapper of the whole arear
		$end_div = pbmit_element_container( array(
			'position'	=> 'end',
			'cpt'		=> 'jobs-category',
			'data'		=> $settings
		) );
		echo pbmit_esc_kses($end_div);
	}
	protected function content_template() {}
}
// After the Schedule class is defined, I must register the new widget class with Elementor:
Plugin::instance()->widgets_manager->register( new pbmit_JobsCategoryElement() );