<?php
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/**
 * Class WPBakeryShortCode_Vc_Tabs
 */
class WPBakeryShortCode_Vc_Tabs extends WPBakeryShortCode {
	public static $filter_added = false;
	protected $controls_css_settings = 'out-tc vc_controls-content-widget';
	protected $controls_list = array(
		'edit',
		'clone',
		'delete',
	);

	/**
	 * WPBakeryShortCode_Vc_Tabs constructor.
	 * @param $settings
	 */
	public function __construct( $settings ) {
		parent::__construct( $settings );
		if ( ! self::$filter_added ) {
			add_filter( 'vc_inline_template_content', array(
				$this,
				'setCustomTabId',
			) );
			self::$filter_added = true;
		}
	}

	/**
	 * @param $atts
	 * @param null $content
	 * @return mixed|string
	 * @throws \Exception
	 */
	public function contentAdmin( $atts, $content = null ) {
		$width = $custom_markup = '';
		$shortcode_attributes = array( 'width' => '1/1' );
		foreach ( $this->settings['params'] as $param ) {
			if ( 'content' !== $param['param_name'] ) {
				$shortcode_attributes[ $param['param_name'] ] = isset( $param['value'] ) ? $param['value'] : null;
			} elseif ( 'content' === $param['param_name'] && null === $content ) {
				$content = $param['value'];
			}
		}
		extract( shortcode_atts( $shortcode_attributes, $atts ) );

		// Extract tab titles

		preg_match_all( '/vc_tab title="([^\"]+)"(\stab_id\=\"([^\"]+)\"){0,1}/i', $content, $matches, PREG_OFFSET_CAPTURE );

		$tab_titles = array();

		if ( isset( $matches[0] ) ) {
			$tab_titles = $matches[0];
		}
		$tmp = '';
		if ( count( $tab_titles ) ) {
			$tmp .= '<ul class="clearfix tabs_controls">';
			foreach ( $tab_titles as $tab ) {
				preg_match( '/title="([^\"]+)"(\stab_id\=\"([^\"]+)\"){0,1}/i', $tab[0], $tab_matches, PREG_OFFSET_CAPTURE );
				if ( isset( $tab_matches[1][0] ) ) {
					$tmp .= '<li><a href="#tab-' . ( isset( $tab_matches[3][0] ) ? $tab_matches[3][0] : sanitize_title( $tab_matches[1][0] ) ) . '">' . $tab_matches[1][0] . '</a></li>';

				}
			}
			$tmp .= '</ul>' . "\n";
		}

		$elem = $this->getElementHolder( $width );

		$iner = '';
		foreach ( $this->settings['params'] as $param ) {
			$param_value = isset( ${$param['param_name']} ) ? ${$param['param_name']} : '';
			if ( is_array( $param_value ) ) {
				// Get first element from the array
				reset( $param_value );
				$first_key = key( $param_value );
				$param_value = $param_value[ $first_key ];
			}
			$iner .= $this->singleParamHtmlHolder( $param, $param_value );
		}

		if ( isset( $this->settings['custom_markup'] ) && '' !== $this->settings['custom_markup'] ) {
			if ( '' !== $content ) {
				$custom_markup = str_ireplace( '%content%', $tmp . $content, $this->settings['custom_markup'] );
			} elseif ( '' === $content && isset( $this->settings['default_content_in_template'] ) && '' !== $this->settings['default_content_in_template'] ) {
				$custom_markup = str_ireplace( '%content%', $this->settings['default_content_in_template'], $this->settings['custom_markup'] );
			} else {
				$custom_markup = str_ireplace( '%content%', '', $this->settings['custom_markup'] );
			}
			$iner .= do_shortcode( $custom_markup );
		}
		$elem = str_ireplace( '%wpb_element_content%', $iner, $elem );
		$output = $elem;

		return $output;
	}

	/**
	 * @return string
	 */
	public function getTabTemplate() {
		return '<div class="wpb_template">' . do_shortcode( '[vc_tab title="Tab" tab_id=""][/vc_tab]' ) . '</div>';
	}

	/**
	 * @param $content
	 * @return string|string[]|null
	 */
	public function setCustomTabId( $content ) {
		return preg_replace( '/tab\_id\=\"([^\"]+)\"/', 'tab_id="$1-' . time() . '"', $content );
	}
}


/*nectar addition*/
require_once vc_path_dir('SHORTCODES_DIR', 'vc-column.php');


class WPBakeryShortCode_Tabbed_Section extends WPBakeryShortCode {

    static $filter_added = false;
    protected $controls_css_settings = 'out-tc vc_controls-content-widget';
    protected $controls_list = array( 'edit', 'clone', 'delete' );

    public function __construct( $settings ) {
        parent::__construct( $settings );
        // WPBakeryVisualComposer::getInstance()->addShortCode( array( 'base' => 'vc_tab' ) );
        if ( ! self::$filter_added ) {
            $this->addFilter( 'vc_inline_template_content', 'setCustomTabId' );
            self::$filter_added = true;
        }
    }

    public function contentAdmin( $atts, $content = null ) {
        $width = $custom_markup = '';
        $shortcode_attributes = array( 'width' => '1/1' );
        foreach ( $this->settings['params'] as $param ) {
            if ( $param['param_name'] != 'content' ) {
                //$shortcode_attributes[$param['param_name']] = $param['value'];
                if ( isset( $param['value'] ) && is_string( $param['value'] ) ) {
                    $shortcode_attributes[ $param['param_name'] ] = __( $param['value'], "js_composer" );
                } elseif ( isset( $param['value'] ) ) {
                    $shortcode_attributes[ $param['param_name'] ] = $param['value'];
                }
            } else if ( $param['param_name'] == 'content' && $content == null ) {
                //$content = $param['value'];
                $content = __( $param['value'], "js_composer" );
            }
        }
        extract( shortcode_atts(
            $shortcode_attributes
            , $atts ) );

        // Extract tab titles

        preg_match_all( '/vc_tab title="([^\"]+)"(\stab_id\=\"([^\"]+)\"){0,1}/i', $content, $matches, PREG_OFFSET_CAPTURE );

        $output = '';
        $tab_titles = array();

        if ( isset( $matches[0] ) ) {
            $tab_titles = $matches[0];
        }
        $tmp = '';
        if ( count( $tab_titles ) ) {
            $tmp .= '<ul class="clearfix tabs_controls">';
            foreach ( $tab_titles as $tab ) {
                preg_match( '/title="([^\"]+)"(\stab_id\=\"([^\"]+)\"){0,1}/i', $tab[0], $tab_matches, PREG_OFFSET_CAPTURE );
                if ( isset( $tab_matches[1][0] ) ) {
                    $tmp .= '<li><a href="#tab-' . ( isset( $tab_matches[3][0] ) ? $tab_matches[3][0] : sanitize_title( $tab_matches[1][0] ) ) . '">' . $tab_matches[1][0] . '</a></li>';

                }
            }
            $tmp .= '</ul>' . "\n";
        } else {
            $output .= do_shortcode( $content );
        }


        $elem = $this->getElementHolder( $width );

        $iner = '';
        foreach ( $this->settings['params'] as $param ) {
            $param_value = isset( ${$param['param_name']} ) ? ${$param['param_name']} : '';
            if ( is_array( $param_value ) ) {
                // Get first element from the array
                reset( $param_value );
                $first_key = key( $param_value );
                $param_value = $param_value[ $first_key ];
            }
            $iner .= $this->singleParamHtmlHolder( $param, $param_value );
        }
        //$elem = str_ireplace('%wpb_element_content%', $iner, $elem);

        if ( isset( $this->settings["custom_markup"] ) && $this->settings["custom_markup"] != '' ) {
            if ( $content != '' ) {
                $custom_markup = str_ireplace( "%content%", $tmp . $content, $this->settings["custom_markup"] );
            } else if ( $content == '' && isset( $this->settings["default_content_in_template"] ) && $this->settings["default_content_in_template"] != '' ) {
                $custom_markup = str_ireplace( "%content%", $this->settings["default_content_in_template"], $this->settings["custom_markup"] );
            } else {
                $custom_markup = str_ireplace( "%content%", '', $this->settings["custom_markup"] );
            }
            //$output .= do_shortcode($this->settings["custom_markup"]);
            $iner .= do_shortcode( $custom_markup );
        }
        $elem = str_ireplace( '%wpb_element_content%', $iner, $elem );
        $output = $elem;

        return $output;
    }

    public function getTabTemplate() {
        return '<div class="wpb_template">' . do_shortcode( '[vc_tab title="Tab" tab_id=""][/vc_tab]' ) . '</div>';
    }

    public function setCustomTabId( $content ) {
        return preg_replace( '/tab\_id\=\"([^\"]+)\"/', 'tab_id="$1-' . time() . '"', $content );
    }
    //added to modify the class - needs wpb_vc_accordion to function properly
    public function getElementHolder( $width ) {
        $output = '';
        $column_controls = $this->getColumnControlsModular();
        $css_class = 'wpb_' . $this->settings["base"] . '  wpb_vc_tabs wpb_content_element wpb_sortable' . ( ! empty( $this->settings["class"] ) ? ' ' . $this->settings["class"] : '' );
        $output .= '<div data-element_type="' . $this->settings["base"] . '" class="' . $css_class . '">';
        $output .= str_replace( "%column_size%", wpb_translateColumnWidthToFractional( $width ), $column_controls );
        $output .= $this->getCallbacks( $this->shortcode );
        $output .= '<div class="wpb_element_wrapper ' . $this->settings( "wrapper_class" ) . '">';
        $output .= '%wpb_element_content%';
        $output .= '</div>'; // <!-- end .wpb_element_wrapper -->';
        $output .= '</div>'; // <!-- end #element-'.$this->shortcode.' -->';
        return $output;
    }


}




class WPBakeryShortCode_Item extends WPBakeryShortCode_VC_Column {
   protected $controls_css_settings = 'tc vc_control-container';
    protected $controls_list = array( 'add', 'edit', 'clone', 'delete' );
    protected $predefined_atts = array(
        'tab_id' => '',
        'title' => ''
    );
    protected $controls_template_file = 'editors/partials/backend_controls_tab.tpl.php';

    public function __construct( $settings ) {
        parent::__construct( $settings );
    }

    public function customAdminBlockParams() {
        return ' id="tab-' . $this->atts['id'] . '"';
    }

    public function mainHtmlBlockParams( $width, $i ) {
        return 'data-element_type="' . $this->settings["base"] . '" class="wpb_vc_tab wpb_sortable wpb_content_holder"' . $this->customAdminBlockParams();
    }

    public function containerHtmlBlockParams( $width, $i ) {
        return 'class="wpb_column_container vc_container_for_children"';
    }

    public function getColumnControls( $controls, $extended_css = '' ) {
        return $this->getColumnControlsModular( $extended_css );
        /*
        $controls_start = '<div class="vc_controls controls controls_column' . ( ! empty( $extended_css ) ? " {$extended_css}" : '' ) . '">';
        $controls_end = '</div>';

        if ( $extended_css == 'bottom-controls' ) $control_title = sprintf( __( 'Append to this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) );
        else $control_title = sprintf( __( 'Prepend to this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) );

        $controls_add = ' <a class="vc_control column_add" href="#" title="' . $control_title . '"><i class="vc_icon"></i></a>';
        $controls_edit = ' <a class="vc_control column_edit" href="#" title="' . sprintf( __( 'Edit this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';
        $controls_clone = '<a class="vc_control column_clone" href="#" title="' . sprintf( __( 'Clone this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';

        $controls_delete = '<a class="vc_control column_delete" href="#" title="' . sprintf( __( 'Delete this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';
        return $controls_start . $controls_add . $controls_edit . $controls_clone . $controls_delete . $controls_end;
        */
    }
}


class WPBakeryShortCode_Tab extends WPBakeryShortCode_VC_Column {
   protected $controls_css_settings = 'tc vc_control-container';
    protected $controls_list = array( 'add', 'edit', 'clone', 'delete' );
    protected $predefined_atts = array(
        'tab_id' => '',
        'title' => ''
    );
    protected $controls_template_file = 'editors/partials/backend_controls_tab.tpl.php';

    public function __construct( $settings ) {
        parent::__construct( $settings );
    }

    public function customAdminBlockParams() {
        return ' id="tab-' . $this->atts['id'] . '"';
    }

    public function mainHtmlBlockParams( $width, $i ) {
        return 'data-element_type="' . $this->settings["base"] . '" class="wpb_vc_tab wpb_sortable wpb_content_holder"' . $this->customAdminBlockParams();
    }

    public function containerHtmlBlockParams( $width, $i ) {
        return 'class="wpb_column_container vc_container_for_children"';
    }

    public function getColumnControls( $controls, $extended_css = '' ) {
        return $this->getColumnControlsModular( $extended_css );
        /*
        $controls_start = '<div class="vc_controls controls controls_column' . ( ! empty( $extended_css ) ? " {$extended_css}" : '' ) . '">';
        $controls_end = '</div>';

        if ( $extended_css == 'bottom-controls' ) $control_title = sprintf( __( 'Append to this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) );
        else $control_title = sprintf( __( 'Prepend to this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) );

        $controls_add = ' <a class="vc_control column_add" href="#" title="' . $control_title . '"><i class="vc_icon"></i></a>';
        $controls_edit = ' <a class="vc_control column_edit" href="#" title="' . sprintf( __( 'Edit this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';
        $controls_clone = '<a class="vc_control column_clone" href="#" title="' . sprintf( __( 'Clone this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';

        $controls_delete = '<a class="vc_control column_delete" href="#" title="' . sprintf( __( 'Delete this %s', 'js_composer' ), strtolower( $this->settings( 'name' ) ) ) . '"><i class="vc_icon"></i></a>';
        return $controls_start . $controls_add . $controls_edit . $controls_clone . $controls_delete . $controls_end;
        */
    }
}

/*nectar addition end*/

