parsed_slider_data = $parsed_data;
}
/**
* Get generated ms_slider shortcode
*
* @return string [ms_slider] shortcode or empty string on error
*/
public function get_ms_slider_shortcode( $the_content = '' ){
if( ! isset( $this->parsed_slider_data['setting'] ) )
return '';
$shortcode_name = 'ms_slider';
// get the parsed slider setting
$setting = $this->parsed_slider_data['setting'];
$exclude_attrs = array( 'custom_style' );
// create ms_slider shortcode
$attrs = '';
foreach ( $setting as $attr => $attr_value ) {
if( in_array( $attr, $exclude_attrs ) ){ continue; }
$attrs .= sprintf( '%s="%s" ', $attr, esc_attr( $attr_value ) );
}
// get ms_slides shortcodes(s)
$the_content = $this->get_ms_slides_shortcode();
return sprintf( '[%1$s %2$s]%3$s%4$s[/%1$s]', $shortcode_name, $attrs, "\n", $the_content );
}
public function get_ms_slide_shortcode( $slide ){
if( ! isset( $slide ) || empty( $slide ) )
return '';
$shortcode_name = 'ms_slide';
// stores shortcode attributes
$attrs = '';
// the list of attributes which should be excluded from slide shortcode
$exclude_slide_attrs = array( 'layers', 'layer_ids', 'ishide', 'info', 'is_overlay_layers' );
foreach ( $slide as $attr => $attr_value ) {
if( in_array( $attr, $exclude_slide_attrs ) ){
continue;
}
if( 'src' == $attr && in_array( $this->parsed_slider_data['setting']['slider_type'], array( "flickr", "facebook", "instagram" ) ) ) {
$attrs .= sprintf( '%s="%s" ', $attr, '{{image}}' );
} elseif( 'alt' == $attr || 'title' == $attr ) {
if( in_array( $this->parsed_slider_data['setting']['slider_type'], array( "flickr", "facebook", "instagram" ) ) ){
$attrs .= sprintf( '%s="%s" ', $attr, '{{title}}' );
} else {
$attrs .= sprintf( '%s="%s" ', $attr, $this->escape_square_brackets( $attr_value ) );
}
// encode backets ([]) to prevent any conflict while generating slider shortcode
} elseif( 'link_title' == $attr || 'link_rel' == $attr ) {
$attrs .= sprintf( '%s="%s" ', $attr, $this->escape_square_brackets( $attr_value ) );
} elseif( 'thumb' == $attr && ! empty( $attr_value ) && in_array( $this->parsed_slider_data['setting']['slider_type'], array( "flickr", "facebook", "instagram" ) ) ) {
$attrs .= sprintf( '%s="%s" ', $attr, '{{thumb}}' );
} elseif( 'tab' == $attr ) {
$tab_content = '
' . $attr_value . '
';
// if "insert thumb" option was enabled append the thumbnail tag
if( 'true' == $this->parsed_slider_data['setting']['thumbs_in_tab'] ) {
$thumb_height = $this->parsed_slider_data['setting']['thumbs_height'];
//$tab_content = sprintf( '{{thumb%s}}', $thumb_height ) . $tab_content;
$tab_content = $tab_content;
}
$attrs .= sprintf( '%s="%s" ', $attr, esc_attr( $tab_content ) );
} else {
$attrs .= sprintf( '%s="%s" ', $attr, esc_attr( $attr_value ) );
}
}
if( 'true' == $this->parsed_slider_data['setting']['crop'] ){
$attrs .= sprintf( '%s="%s" ', 'crop_width' , esc_attr( $this->parsed_slider_data['setting']['width'] ) );
$attrs .= sprintf( '%s="%s" ', 'crop_height', esc_attr( $this->parsed_slider_data['setting']['height'] ) );
}
// collect all shortcode output
$the_content = '';
// generate slide_info shortcode if slideinfo control is added
if( 'image-gallery' == $this->parsed_slider_data['setting']['template'] ||
( isset( $this->parsed_slider_data['setting']['slideinfo'] ) && 'true' == $this->parsed_slider_data['setting']['slideinfo'] )
){
if( ! empty( $slide['info'] ) )
$the_content .= $this->get_ms_slide_info_shortcode( $slide['info'] );
else
$the_content .= $this->get_ms_slide_info_shortcode( " " );
}
return sprintf( '[%1$s %2$s]%4$s%3$s[/%1$s]%4$s', $shortcode_name, $attrs, $the_content, "\n" );
}
public function escape_square_brackets( $context ){
if( is_null( $context ) ){
return $content;
}
return str_replace( array('[', ']'), array( "%5B", "%5D" ), $context );
}
public function get_ms_slides_shortcode() {
if( ! isset( $this->parsed_slider_data['slides'] ) )
return '';
$slides = $this->parsed_slider_data['slides'];
$shortcodes = '';
foreach ( $slides as $slide ) {
if( ! empty( $slide['ishide'] ) && 'true' != $slide['ishide'] ){
if( 'true' != $slide['is_overlay_layers'] ){
$shortcodes .= $this->get_ms_slide_shortcode( $slide );
}
}
}
return $shortcodes;
}
public function get_ms_slide_info_shortcode( $the_content = '' ){
if( empty( $the_content ) )
return '';
$css_class = ( " " == $the_content ) ? 'ms-info-empty' : '';
return sprintf( '[%1$s css_class="%3$s"]%2$s[/%1$s]', 'ms_slide_info', $the_content, $css_class )."\n";
}
public function do_template_tag( $matches ){
if( ! isset( $matches['0'] ) )
return $matches;
$tag_name = preg_replace('/[{}]/', '', $matches['0'] );
$tag_name = msp_get_template_tag_value( $tag_name, $this->post_id, $this->post_slider_args );
return is_array( $tag_name ) ? implode( ',', $tag_name ) : $tag_name;
}
}