Done ! 403WebShell
403Webshell
Server IP : 46.105.57.169  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux webm002.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User : verseaumee ( 152031)
PHP Version : 8.5.7
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/verseaumee/TF89388/wp-content/plugins/noisa-toolkit/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/verseaumee/TF89388/wp-content/plugins/noisa-toolkit/includes/class-shortcodes.php
<?php
/**
 * Rascals Shortcodes
 *
 *
 * @author Rascals Themes
 * @category Core
 * @package Noisa Toolkit
 * @version 1.0.1
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly
}


class RascalsShortcodes {

	/*
	Private variables
	 */
	private $SID = 0;

	/*
	All available shortcodes
	 */
	public $shortcodes_list = array(
		'styles',
		'weight',
		'circle_button',
		'lead',
		'slider',
		'tracklist_grid',
		'tracks_carousel',
		'tracklist',
		'track',
		'track_button',
		'single_album',
		'tracklist_button',
		'tweets_list',
		'tweets_slider',
		'buttons',
		'button',
		'icon_column',
		'pricing_column',
		'details_list',
		'detail',
		'google_maps',
		'posts_list',
		'releases_grid',
		'releases_carousel',
		'artists_grid',
		'artists_carousel',
		'events',
		'gallery_albums',
		'gallery_images',
		'event_countdown',
		'time_line'
	);


	/**
	 * Rascals Constructor.
	 * @return void
	 */
	public function __construct() {
		$this->init();
	}

	/**
	 * Initialize class
	 * @return void
	 */
	public function init() {

		// Frontend Scripts
		add_action( 'wp_enqueue_scripts' , array( $this, 'shortcodesEnqueue' ) );

		// Regiter Shortcodes
		$this->registerShortcodes();

	}

	/**
	 * Register shortcodes
	 * @return void
	 */
	private function registerShortcodes() {
		foreach ($this->shortcodes_list as $shortcode ) {
			if ( method_exists( $this, $shortcode ) ){
				add_shortcode( $shortcode, array( $this, $shortcode ) );
			}
		}
	}


	/**
	 * Enqueue all frontend scripts and styles 
	 * @return void
	 */
	public function shortcodesEnqueue() {

		global $post, $wp_query;

		$plugin_url = RASCALS_TOOLKIT_URL;

		wp_enqueue_style( 'rascals-shortcodes', esc_url( $plugin_url ) . '/assets/css/shortcodes.css' );
        
		// Add Custom styles
		$custom_css = '';

		// BG
		if ( isset( $wp_query ) && isset( $post ) ) {
	        $bg1 = get_post_meta( $wp_query->post->ID, '_bg_1', true );
	        $bg2 = get_post_meta( $wp_query->post->ID, '_bg_2', true );

	        if ( $bg1 || $bg2 ) {

	        	if ( $this->generateBG( $bg1 ) ) {
		        	$custom_css .= "
	                html body {
	                       " . esc_attr( $this->generateBG( $bg1 ) ) . "
	                }";

	         	}
	         	if ( $this->generateBG( $bg1 ) ) {
		        	$custom_css .= "
	                body #site {
	                       " . esc_attr( $this->generateBG( $bg2 ) ) . "
	                }";

	         	}
	        }

	    }

       
        wp_add_inline_style( 'rascals-shortcodes', $custom_css );
	}



	/* ==================================================
	  S H O R T C O D E S 
	================================================== */

	/**
	 * Styles
	 * @return void
	 */
	public function styles( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'classes'     => ''
	    ), $atts));

	    $this->SID++;

	    return '<span class="' . esc_attr( $classes ) . '" >' . do_shortcode( $content ) . '</span>';
	}


	/**
	 * Weight
	 * @return void
	 */
	public function weight( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'weight'     => '100'
	    ), $atts));

	    return '<span class="weight-' . esc_attr( $weight ) . '" >' . do_shortcode( $content ) . '</span>';
	}


	/**
	 * Circle Button
	 * @return void
	 */
	public function circle_button( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'link'    => '#',
	        'icon'    => 'twitter',
	        'target'  => '_self',
	        'classes' => ''
	    ), $atts));
	   return '<a class="circle-button ' . esc_attr( $classes ) . '" href="' . esc_url( $link ) . '" target="' . esc_attr( $target ) . '"><i class="icon icon-' . esc_attr( $icon ) . '"></i></a>';
	}

	/**
	 * Lead
	 * @return void
	 */
	public function lead( $atts, $content = null ) {
	     extract(shortcode_atts(array(
	        'classes' => ''
		    ), $atts));
		return '<div class="lead ' . esc_attr( $classes ) . '">' . do_shortcode( $content ) . '</div>';
	}

	/**
	 * Slider
	 * @return void
	 */
	public function slider( $atts, $content = null ) {

	   	extract(shortcode_atts(array(
	        'id'   => 0,
	        'size' => 'full'
	    ), $atts));

    	$output = '';

	    if ( $id === 0 ) {
	        return false;
	    }

	    // Set unique ID
	    $this->SID++;
	    $noisa_sid = $this->SID;

	    // Slider Settings

	    // Slider navigation
	    $slider_nav = get_post_meta( $id, '_slider_nav', true );
	    if ( $slider_nav && $slider_nav === 'on' ) {
	        $slider_nav = 'true';
	    } else {
	        $slider_nav = 'false';
	    }

	    // Slider pagination
	    $slider_pagination = get_post_meta( $id, '_slider_pagination', true );
	    if ( $slider_pagination && $slider_pagination === 'on' ) {
	        $slider_pagination = 'true';
	    } else {
	        $slider_pagination = 'false';
	    }

	    // Slider speed
	    $slider_speed = get_post_meta( $id, '_slider_speed', true );

	    // Slider pause time
	    $slider_pause_time = get_post_meta( $id, '_slider_pause_time', true );
	    if ( ! $slider_pause_time && $slider_pause_time === '0' ) {
	        $slider_pause_time = 'false';
	    }
	    
	    $output .= '<div id="content-slider-id-' . esc_attr( $noisa_sid ) . '" class="content-slider clearfix" data-slider-nav="' . esc_attr( $slider_nav ) . '" data-slider-pagination="' . esc_attr( $slider_pagination ) . '" data-slider-speed="' . esc_attr( $slider_speed ) . '" data-slider-pause-time="' . esc_attr( $slider_pause_time ) . '">';

	    /* Images ids */
	    $images_ids = get_post_meta( $id, '_custom_slider', true );

	    if ( ! $images_ids || $images_ids === '' ) {
	         '<p class="message error">' . esc_html__( 'Slider error: Slider has no pictures or doesn\'t exists.', 'noisa-toolkit' ) . '</p>';
	    }

	    $count = 0;
	    $ids = explode( '|', $images_ids );
	    $defaults = array(
	        'title'    => '',
	        'subtitle' => '',
	        'crop'     => 'c'
	    );

	    /* Start Loop */
	    foreach ( $ids as $image_id ) {

	        // Vars 
	        $title = '';
	        $subtitle = '';

	        // Get image data
	        $image_att = wp_get_attachment_image_src( $image_id );

	        if ( ! $image_att[0] ) {
	            continue;
	        }
	        
	        /* Count */
	        $count++;

	        /* Get image meta */
	        $image = get_post_meta( $id, '_custom_slider_' . $image_id, true );

	        /* Add default values */
	        if ( isset( $image ) && is_array( $image ) ) {
	            $image = array_merge( $defaults, $image );
	        } else { 
	            $image = $defaults;
	        }

	        /* Add image src to array */
	        $temp_src = wp_get_attachment_image_src( $image_id, $size );
	        $image['src'] = $temp_src[0];

	        $output .= '<div class="slide">';

	        if ( $image['title'] !== '' || $image['subtitle'] !== '' ) {
	            $output .= '<div class="content-captions">';
	                if ( $image['title'] !== '' ) {
	                    $output .= '<span class="caption-title">' . self::esc( $image['title'] ) . '</span>';
	                }
	                if ( $image['subtitle'] !== '' ) {
	                    $output .= '<span class="caption-subtitle">' . self::esc( $image['subtitle'] ) . '</span>';
	                }
	            $output .= '</div>';
	        }
	        $output .= '<div class="image"><img src="' . esc_url( $image['src'] ) . '" alt="' . esc_attr__( 'Slider Image', 'noisa-toolkit' ) . '"></div>';

	        $output .= '</div>';

	    } // End foreach

	    $output .= '</div>';

	    return $output;
	}


	/**
	 * Tracklist Grid
	 * @return void
	 */
	public function tracklist_grid( $atts, $content = null ) {
	   
	 	extract(shortcode_atts(array(
	        'id'                 => 0,
	        'in_row'             => '2',
	        'track_meta'         => '0',
	        'list_button'        => '0',
	        'eq'                 => '0',
	        'gap'                => 'no-gap',
	        'limit'              => '999',
	        'list_button_action' => 'sp-play-list',
	        'track_action'       => 'sp-play-track',
	        'button_title'       => esc_html__( 'Play List', 'noisa-toolkit'),
	        'classes'            => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

	    // Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$tracklist_grid = $t->getList( $id );

		if ( $id === 0 || $tracklist_grid === false ) {
		    return false;
		}
	    $limit = (int)$limit;
	    $count = 1;

	    if ( $track_meta === '0' ) {
	        $track_meta = 'hidden';
	    } else {
	        $track_meta = '';
	    }

	    if ( $eq === '1' ) {
	        $eq = '<div class="eq"><div class="bar-init"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div></div>';
	    } else {
	        $eq = '';
	    }

	    $output .= '<div class="tracks-grid-wrap ' . esc_attr( $classes ) . '">';
	    $output .= '<div id="tracklist-grid-' . esc_attr( $noisa_sid ) . '" class="sp-list sp-ctrl tracklist-grid">';

	    foreach ( $tracklist_grid as $track ) {

	        /* Encode Track */
	        if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	            $track['url'] = base64_encode( $track['url'] );
	        }

	        if ( $track['disable_playback'] === 'yes' ) {
	            $track['url'] = '#';
	            $track['disable_playback'] = 'disabled';
	        } else {
	            $track['disable_playback'] = '';
	        }

	        if ( ! $track['cover'] || $track['cover'] === '' ) {
	            $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	            $track['cover_full'] = $track['cover'];
	        }
	        $output .= '
	            <div class="tracks-grid-' . esc_attr( $in_row ) . '-col sp-track-item">
	                <div class="tracks-grid-item  ' . esc_attr( $gap ) . '">
	                    <a class="track sp-play-next ' .  esc_attr( $track['disable_playback'] ) . ' ' .  esc_attr( $track_action ) . '" href="' .  $track['url'] . '" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">
	                        <img class="track-cover" src="' . esc_attr( $track['cover_full'] ) . '" alt="' . esc_attr__( 'Cover Image', 'noisa-toolkit' ) . '">
	                        <span class="track-status"></span>
	                       '. $eq .'
	                        <span class="track-meta ' . esc_attr( $track_meta ) . '">
	                            <span class="track-meta-inner">
	                                <span class="track-title">' . self::esc( $track['title'] ) . '</span>
	                                <span class="track-artists">' . self::esc( $track['artists'] ) . '</span>
	                            </span>
	                        </span>
	                    </a>
	                </div>';
	        $output .= '</div>';

	        if ( $count >= $limit ) {
	            break;
	            return false;
	        }
	        $count++;

	    }

	    $output .= '</div>';

	    if ( $list_button === '1' ) {
	        $output .= '<a class="list-btn btn btn-icon ' . esc_attr( $list_button_action ) . '" data-id="tracklist-grid-' . esc_attr( $noisa_sid ) . '" ><span class="icon icon-play2"></span>' . self::esc( $button_title ) . '</a>';
	    }
	    $output .= '</div>';

	   return $output;
	}


	/**
	 * Tracks Carousel
	 * @return void
	 */
	public function tracks_carousel( $atts, $content = null ) {
	   extract(shortcode_atts(array(
	        'id'                 => 0,
	        'visible_items'      => '1',
	        'list_button'        => '0',
	        'eq'                 => '0',
	        'gap'                => 'no-gap',
	        'list_button_action' => 'sp-play-list',
	        'track_action'       => 'sp-play-track',
	        'button_link'        => '',
	        'button_title'       => esc_html__( 'View More', 'noisa-toolkit'),
	        'classes'            => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

	    // Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$tracks_carousel = $t->getList( $id );

		if ( $id === 0 || $tracks_carousel === false ) {
		    return false;
		}

     	if ( $eq === '1' ) {
	        $eq = '<div class="eq"><div class="bar-init"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div></div>';
	    } else {
	        $eq = '';
	    }

	    $output .= '<div class="tracks-carousel-wrap ' . esc_attr( $classes ) . '">';
	    $output .= '<div id="tracks-carousel-id' . esc_attr( $noisa_sid ) . '" class="carousel-slider carousel-tracks-slider" data-effect="fade" data-pagination="true" data-nav="false" data-autoplay="false" data-items="' . esc_attr( $visible_items ) . '">';
	    foreach ( $tracks_carousel as $track ) {

	        /* Encode Track */
	        if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	            $track['url'] = base64_encode( $track['url'] );
	        }

	        if ( $track['disable_playback'] === 'yes' ) {
	            $track['url'] = '#';
	            $track['disable_playback'] = 'disabled';
	        } else {
	            $track['disable_playback'] = '';
	        }

	       if ( ! $track['cover'] || $track['cover'] === '' ) {
	            $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	            $track['cover_full'] = $track['cover'];
	        }
	        $output .= '<div class="sp-track-item">
	                    <a class="track sp-play-next ' .  esc_attr( $track['disable_playback'] ) . ' thumb-desc ' .  esc_attr( $track_action ) . ' '  . esc_attr( $gap ) . ' owl-link" href="' .  $track['url'] . '" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">
	                        <img class="track-cover" src="' . esc_attr( $track['cover_full'] ) . '" alt="' . esc_attr__( 'Cover Image', 'noisa-toolkit' ) . '">
	                        <span class="track-meta">
	                            <span class="track-meta-inner">
	                                <span class="track-title">' . self::esc( $track['title'] ) . '</span>
	                                <span class="track-artists">' . self::esc( $track['artists'] ) . '</span>
	                            </span>
	                        </span>
	                        <span class="track-status"></span>
	                        '. $eq .'
	                    </a></div>';
	    }

	    $output .= '</div>'; // carousel;

	    if ( $button_link !== '' ) {
	        $output .= '<div class="button-position"><a class="btn medium more-posts" href="' . esc_url( $button_link ) . '">' . self::esc( $button_title ) . '</a></div>';
	    }

	    $output .= '</div>'; // wrap;

	   return $output;

	}


	/**
	 * Tracklist
	 * @return void
	 */
	public function tracklist( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	         'id'                 => 0,
	         'style'              => 'normal',
	         'list_button'        => '0',
	         'eq'                 => '0',
	         'list_button_action' => 'sp-play-list',
	         'track_action'       => 'sp-play-track',
	         'button_title'       => esc_html__( 'Play List', 'noisa-toolkit'),
	         'classes'              => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

  		// Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$tracklist = $t->getList( $id );

		if ( $id === 0 || $tracklist === false ) {
		    return false;
		}

	    if ( $eq === '1' ) {
	        $eq = '<div class="eq"><div class="bar-init"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div></div>';
	    } else {
	        $eq = '';
	    }

	    $output .= '<div class="tracklist-wrap ' . esc_attr( $classes ) . '">';
	    $output .= '<ol id="tracklist-' . esc_attr( $noisa_sid ) . '" class="sp-list sp-ctrl tracklist ' . esc_attr( $style ) . '">';

	    $count = 0;

	    // Tracklist style: Compact or normal
	    if ( $style === 'normal' || $style === 'compact' ) {

	        foreach ( $tracklist as $track ) {

	            /* Encode Track */
	            if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	                $track['url'] = base64_encode( $track['url'] );
	            }

	            if ( $track['disable_playback'] === 'yes' ) {
	                $track['url'] = '#';
	                $track['disable_playback'] = 'disabled';
	            } else {
	                $track['disable_playback'] = '';
	            }

	            if ( ! $track['cover'] || $track['cover'] === '' ) {
	                $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	            }
	            $count ++;
	            $output .= '
	                <li class="sp-track-item">
	                    <div class="single-track ' . esc_attr( $style ) . '">
	                    <span class="track-nr">' . sprintf( "%02d", $count ) . '</span>
	                    <div class="track-wrap">
	                    <a href="' .  $track['url'] . '" class="track sp-play-next ' .  esc_attr( $track['disable_playback'] ) . ' ' .  esc_attr( $track_action ) . '" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">
	                        <img class="track-cover" src="' . esc_url( $track['cover'] ) . '" alt="' . esc_attr__( 'Cover Image', 'noisa-toolkit') . '">
	                        <span class="track-status"></span><span class="track-title hidden">' . self::esc( $track['title'] ) . '</span>
	                        '. $eq .'
	                    </a>
	                    </div>
	                    
	                    <span class="track-meta">
	                        <span class="track-title">' . self::esc( $track['title'] ) . '</span>
	                        <span class="track-artists">' . self::esc( $track['artists'] ) . '</span>';

	            if ( $style === 'normal' ) {
	            	if ( isset( $track['links'] ) ) {
	                	$output .= '<span class="track-buttons">' . do_shortcode ( $track['links'] ) . '</span>';
	            	}
	            }

	            $output .= '</span>';
	            $output .= '</div>';
	            $output .= '</li>';
	        }

	    // Simple style
	    } elseif ( $style === 'simple' ) {
	        foreach ( $tracklist as $track ) {

	            /* Encode Track */
	            if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	                $track['url'] = base64_encode( $track['url'] );
	            }

	            if ( $track['disable_playback'] === 'yes' ) {
	                $track['url'] = '#';
	                $track['disable_playback'] = 'disabled';
	            } else {
	                $track['disable_playback'] = '';
	            }

	            if ( ! $track['cover'] || $track['cover'] === '' ) {
	                $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	            }
	            $count ++;
	            $output .= '
	            <li class="sp-track-item">
	                <a href="' .  self::esc( $track['url'] ) . '" class="simple-track sp-play-next ' .  esc_attr( $track['disable_playback'] ) . ' ' .  esc_attr( $track_action ) . '" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">
	                    <span class="track-nr">' . sprintf( "%02d", $count ) . '</span>
	                    <span class="action"></span>
	                    <span class="title">' . self::esc( $track['title'] ) . '</span>
	                    <span class="artists">' . self::esc( $track['artists'] ) . '</span>
	                    <span class="track-title hidden">' . self::esc( $track['title'] ) . '</span>
	                </a>   
	            </li>';
	        }
	    }

	    $output .= '</ol>';

	    if ( $list_button === '1' ) {
	        $output .= '<a class="list-btn btn btn-icon ' . esc_attr( $list_button_action ) . '" data-id="tracklist-' . esc_attr( $noisa_sid ) . '" ><span class="icon icon-play2"></span>' . self::esc( $button_title ) . '</a>';
	    }
	    $output .= '</div>';

	   return $output;

	}


	/**
	 * Single Track
	 * @return void
	 */
	public function track( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'id'           => 0,
	        'style'        => 'normal',
	        'eq'           => '0',
	        'track_action' => 'sp-play-track',
	        'classes'      => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

	   	// Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$track = $t->getList( $id );

		if ( $id === 0 || $track === false ) {
		    return false;
		}

	    if ( $eq === '1' ) {
	        $eq = '<div class="eq"><div class="bar-init"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div></div>';
	    } else {
	        $eq = '';
	    }

	    foreach ( $track as $i => $track ) {

	        /* Encode Track */
	        if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	            $track['url'] = base64_encode( $track['url'] );
	        }

	        if ( $track['disable_playback'] === 'yes' ) {
	            $track['url'] = '#';
	            $track['disable_playback'] = 'disabled';
	        } else {
	            $track['disable_playback'] = '';
	        }

	        if ( ! $track['cover'] || $track['cover'] === '' ) {
	            $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	        }
	        $output .= '<div class="single-track-wrap ' . esc_attr( $classes ) . '">';
	        $output .= '
	            <div class="single-track ' . esc_attr( $style ) . '">
	                <div class="track-wrap">
	                <a href="' .  $track['url'] . '" class="track ' .  esc_attr( $track['disable_playback'] ) . ' ' .  esc_attr( $track_action ) . '" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">
	                    <img class="track-cover" src="' . esc_url( $track['cover'] ) . '" alt="' . esc_attr__( 'Cover Image', 'noisa-toolkit') . '">
	                    <span class="track-status"></span><span class="track-title hidden">' . self::esc( $track['title'] ) . '</span>
	                   '. self::esc( $eq ) .'
	                </a>
	                </div>
	                <span class="track-meta">
	                    <span class="track-title">' . self::esc( $track['title'] ) . '</span>
	                    <span class="track-artists">' . self::esc( $track['artists'] ) . '</span>';

	            if ( $style === 'normal' ) {
	                $output .= '<span class="track-buttons">' . do_shortcode ( $track['links'] ) . '</span>';
	            }

	            $output .= '</span>';
	        $output .= '</div>';
	        $output .= '</div>';
	        if ( $i === 0 ) {
	            break;
	            return false;
	        }
	    }

	   return $output;

	}


	/**
	 * Track Button
	 * @return void
	 */
	public function track_button( $atts, $content = null ) {
	   
		extract(shortcode_atts(array(
	        'link'    => '#',
	        'icon'    => 'soundcloud',
	        'target'  => '_self',
	        'classes' => ''
	    ), $atts));
	   return '<a class="track-button ' . esc_attr( $classes ) . '" href="' . esc_url( $link ) . '" target="' . esc_attr( $target ) . '"><i class="icon icon-' . esc_attr( $icon ) . '"></i></a>';
	}


	/**
	 * Single Album
	 * @return void
	 */
	public function single_album( $atts, $content = null ) {
	   
		 extract(shortcode_atts(array(
	        'album_title'   => '',
	        'album_artists' => '',
	        'id'            => 0,
	        'album_cover'   => 0,
	        'size'          => 'noisa-release-thumb',
	        'eq'            => '0',
	        'classes'       => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

	    // Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$tracklist = $t->getList( $id );

		if ( $id === 0 || $tracklist === false ) {
		    return false;
		}

	    if ( $eq === '1' ) {
	        $eq = '<div class="eq"><div class="bar-init"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div><div class="bar"></div></div>';
	    } else {
	        $eq = '';
	    }

	    $output .= '<div class="single-album-wrap ' . esc_attr( $classes ) . '">';

	   	// Hidden tracklist
	    $output .= '<ol id="album-list-' . esc_attr( $noisa_sid ) . '" class="sp-list sp-ctrl tracklist">';

	    foreach ( $tracklist as $track ) {

	        /* Encode Track */
	        if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	            $track['url'] = base64_encode( $track['url'] );
	        }

	        if ( $track['disable_playback'] === 'yes' ) {
	            $track['url'] = '#';
	            $track['disable_playback'] = 'disabled';
	        } else {
	            $track['disable_playback'] = '';
	        }

	       if ( ! $track['cover'] || $track['cover'] === '' ) {
	            $track['cover'] = get_template_directory_uri() . '/images/no-track-image.png';
	        }
	        $output .= '
	            <li class="sp-track-item">
	                <a href="' .  self::esc( $track['url'] ) . '" class="sp-play-track sp-play-next" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '"><span class="track-title hidden">' . esc_attr(  $track['title'] ) . '</span>
	                </a>
	            </li>';
	    }

	    $output .= '</ol>';

	    // Cover
	    $image = wp_get_attachment_image_src( $album_cover, $size );

	    $image = $image[0];
	    if ( ! $image || $image === '' ) {
	        $image = get_template_directory_uri() . '/images/no-track-image.png';
	    }
	    $output .= '
	        <a href="#" class="album-cover track sp-play-list" data-id="album-list-' . esc_attr( $noisa_sid ) . '" >
	            <img class="track-cover" src="' . esc_attr( $image ) . '" alt="' . esc_attr__( 'Cover Image', 'noisa-toolkit' ) . '">
	            <span class="track-meta">
	                <span class="track-count">
	                    <span class="icon icon-music"></span>' . count($tracklist) . '
	                </span>
	                <span class="track-meta-inner">
	                    <span class="track-title">' . self::esc( $album_title ) . '</span>
	                    <span class="track-artists">' . self::esc( $album_artists ) . '</span>
	                </span>
	            </span>
	            <span class="track-status"></span>
	            '. self::esc( $eq ) .'
	        </a>';
	    
	    $output .= '</div>';

	   return $output;
	}


	/**
	 * Tracklist Button
	 * @return void
	 */
	public function tracklist_button( $atts, $content = null ) {
	   
		extract(shortcode_atts(array(
	         'id'                 => 0,
	         'list_button_action' => 'sp-play-list',
	         'track_action'       => 'sp-play-track',
	         'button_title'       => esc_html__( 'Play List', 'noisa-toolkit'),
	         'classes'            => ''
	    ), $atts));

	    // Get panel options
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $output = '';

	    // Set unique ID
	    $this->SID++;
		$noisa_sid = $this->SID;

		// Get player list
		$t = noisaToolkit();
		$t = $t->scamp_player;
		$tracklist = $t->getList( $id );

		if ( $id === 0 || $tracklist === false ) {
		    return false;
		}

	    // Hidden tracklist
	    $output .= '<ol id="tracklist-' . esc_attr( $noisa_sid ) . '" class="sp-list sp-ctrl tracklist hidden">' ."\n";

	    foreach ( $tracklist as $track ) {

	        /* Encode Track */
	        if ( isset( $panel_options['player_base64'] ) && $panel_options['player_base64'] === 'on' ) {
	            $track['url'] = base64_encode( $track['url'] );
	        }

	       if ( ! $track['cover'] || $track['cover'] === '' ) {
	            $track['cover'] = get_template_directory_uri() . '/images/*no-track-image.png';
	        }
	        $output .= '
	            <li>
	                <a href="' .  $track['url'] . '" class="sp-play-track" data-cover="' . esc_url( $track['cover'] ) . '" data-artist="' . esc_attr( $track['artists'] ) . '" data-artist_url="' . esc_url( $track['artists_url'] ) . '" data-artist_target="' . esc_attr( $track['artists_target'] ) . '" data-release_url="' . esc_url( $track['release_url'] ) . '" data-release_target="' . esc_attr( $track['release_target'] ) . '" data-shop_url="' . esc_url( $track['cart_url'] ) . '" data-shop_target="' . esc_attr( $track['cart_target'] ) . '" data-free_download="' . esc_attr( $track['free_download'] ) . '">><span class="track-title hidden">' . self::esc( $track['title'] ) . '</span><span class="track-artists hidden">' . self::esc( $track['artists'] ) . '</span>
	                </a>
	            </li>';
	    }

	    $output .= '</ol>' ."\n";

	    $output .= '<a class="list-btn btn btn-icon ' . esc_attr( $list_button_action ) . ' ' . esc_attr( $classes ) . '" data-id="tracklist-' . esc_attr( $noisa_sid ) . '" ><span class="icon icon-play2"></span>' . self::esc( $button_title ) . '</a>';
	    

	   return $output;
	}


	/**
	 * Tweets List
	 * @return void
	 */
	public function tweets_list( $atts, $content = null ) {
 		extract(shortcode_atts(array(
	        'time'       => 30,
	        'limit'      => '1',
	        'username'   => '',
	        'replies'    => 'no',
	        'api_key'    => '',
	        'api_secret' => ''
	    ), $atts));

	    $opts = array(
	        'time'       => $time,
	        'limit'      => $limit,
	        'username'   => $username,
	        'replies'    => $replies,
	        'api_key'    => $api_key,
	        'api_secret' => $api_secret
	    );
	    
	    $output = '';
	    if ( class_exists( 'RascalsTwitter' ) ) {

	        $feed = new RascalsTwitter($opts);
			$tweets = $feed->showTweets();

	        if ( is_array( $tweets ) ) {
	            $output .= '<ul class="tweets">';
	            foreach ( $tweets as $key => $tweet ) {
	                $output .= '<li>' . self::esc( $tweet['text'] ) . '<span class="date">' . self::esc( $tweet['date'] ) . '</span></li>';  
	                if ( $key === $limit ) {
	                    break;
	                }
	            }

	            $output .= '</ul>';
	            return $output;

	        } else {
	            // Errors
	            return $tweets;
	        }
	        
	    }

    	return;

	}


	/**
	 * Tweets Slider
	 * @return void
	 */
	public function tweets_slider( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'bg_color'           => 'light-bg',
	        'time'                => 30,
	        'limit'               => '1',
	        'username'            => '',
	        'replies'             => 'no',
	        'api_key'             => '',
	        'api_secret'          => ''
	    ), $atts));

	    $opts = array(
	        'time'                => $time,
	        'limit'               => $limit,
	        'username'            => $username,
	        'replies'             => $replies,
	        'api_key'             => $api_key,
	        'api_secret'          => $api_secret
	    );
	    
	    $this->SID++;
		$noisa_sid = $this->SID;

	    $output = '';
      	if ( class_exists( 'RascalsTwitter' ) ) {

	        $feed = new RascalsTwitter($opts);
			$tweets = $feed->showTweets();

	        if ( is_array( $tweets ) ) {

	            $output .= '<div id="twitter-slider-id' . esc_attr( $noisa_sid ) . '" class="slider carousel-slider text-slider tweets-slider ' . esc_attr( $bg_color ) . '" data-effect="fade" data-pagination="true" data-nav="false" data-autoplay="false">';
	            foreach ( $tweets as $key => $tweet ) {
	                $output .= '<div class="slide"><div class="tweet">' . self::esc( $tweet['text'] ) . '<span class="date">' . self::esc( $tweet['date'] ) . '</span></div></div>';  
	                 if ( $key === $limit ) {
	                    break;
	                }
	            }

	            $output .= '</div>';
	            return $output;

	        } else {
	            // Errors
	            return $tweets;
	        }
	        
	    }

	    return;

	}


	/**
	 * Buttons
	 * @return void
	 */
	public function buttons( $atts, $content = null ) {
	   extract(shortcode_atts(array(
	        'classes'  => '',
	        'align' => 'text-left'
	    ), $atts));

	    $classes .= ' ' . $align;
	    return '<div class="buttons ' . esc_attr( $classes ) . '">' . do_shortcode( $content ) . '</div>';
	}


	/**
	 * Button
	 * @return void
	 */
	public function button( $atts, $content = null ) {
	     extract(shortcode_atts(array(
	        'size'       => 'btn-medium',
	        'title'      => 'Example Button Text',
	        'link'       => '#',
	        'target'     => '',
	        'icon'       => '',
	        'style'      => 'default-btn'
	    ), $atts));

	    if ( $target === '0' ) {
	        $target = 'target="_blank"';
	    }
	    if ( $icon !== '' ) {
	        $icon = '<span class="icon icon-' . esc_attr( $icon ) . '"></span>';
	        return '<a class="btn btn-icon ' . esc_attr( $size ) . ' ' .  $style . '" href="' . esc_url( $link ) . '" ' . self::esc( $target ) . '>' . self::esc( $icon ) . esc_html( $title ) . '</a>';
	    } else {
	        return '<a class="btn ' . esc_attr( $size ) . ' ' . esc_attr( $style ) . '" href="' . esc_url( $link ) . '" ' . self::esc( $target ) . '>' . self::esc( $title ) . '</a>';
	    }

	}


	/**
	 * Icon Column
	 * @return void
	 */
	public function icon_column( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'icon_title'   => '',
	        'bold_title'   => '',
	        'icon'         => '',
	        'icon_place'   => 'icon_left',
	        'button_title' => '',
	        'button_link'  => ''
	    ), $atts));

	    $output = '';
	    $button = '';

	    if ( $button_link !== '' && $button_title !== '' ) {
	        $button = '<a class="readmore" href="' . esc_url( $button_link ) . '">' . esc_html( $button_title ) . '</a>';
	    }

	    if ( $icon !== '' ) {
	        $icon = '<span class="icon icon-' . esc_attr( $icon ) . '"></span>';
	    }
	    if ( $bold_title === '0' && $icon_title !== '' ) {
	        $icon_title = '<strong>' . esc_html( $icon_title ) . '</strong>';
	    }
	    if ( $icon_title !== '' ) {
	        $icon_title = '<span class="icon_column_title">' . esc_html( $icon_title ) . '</span>';
	    }

	    $output .= '
	        <div class="icon_column ' . esc_attr( $icon_place ) . '">
	            ' . self::esc( $icon ) . '
	            <div class="text-holder">' . self::esc( $icon_title ) . do_shortcode( $content ) . '</div>
	            ' . self::esc( $button ) . '
	        </div>
	    ';
	    return $output;

	}


	/**
	 * Pricing Column
	 * @return void
	 */
	public function pricing_column( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'title'         => '',
	        'price'         => '0',
	        'currency'      => '$',
	        'period'        => '',
	        'link'          => '#',
	        'target'        => '_self',
	        'button_text'   => 'Buy Now',
	        'important'     => '',
	        'list'          => '2x option 1,Free option 2,Unlimited option 3,Unlimited option 4,1x option 5'
	    ), $atts));

	    $output = '';
	    $html_list = '';
	    
	    $output .= "<div class='price-table'>";
	        
	    if ( $important === "yes" ){
	        $output .= "<div class='price-table-inner important-price'>";
	    } else {
	        $output .= "<div class='price-table-inner'>";
	    }

	    if ( $list !== '' ){

	        $list = explode( ',', $list );
	        if ( is_array( $list) ) {
	                $html_list .= '<ul>';
	                foreach ( $list as $li ) {
	                    $html_list .= '<li>' . self::esc( $li ) . '</li>';
	                }
	                $html_list .= '</ul>';
	        }
	    }

	    $output .= "<ul>";
	    $output .= "<li class='prices'>";
	    $output .= "<div class='price-wrapper'>";
	    $output .= "<sup class='value'>" . esc_attr( $currency ) . "</sup>";
	    $output .= "<span class='price'>" . esc_attr( $price ) . "</span>";
	    $output .= "<sub class='mark'>" . esc_attr( $period ) . "</sub>";
	    $output .= "</div>";
	    $output .= "</li>"; // end prices
	    $output .= "<li class='table-title'>" . self::esc( $title ) . "</li>";
	    
	    $output .= '<li class="price-content-list">' . self::esc( $html_list ) . '</li>'; 
	    
	    $output .= "<li class='price-button-wrapper'>";
	    $output .= "<a class='btn medium' href='" . esc_url( $link ) . "' target='" . esc_attr( $target ) . "'>" . self::esc( $button_text ) . "</a>";
	    $output .= "</li>"; // end button
	    
	    $output .= "</ul>";
	    $output .= "</div>"; // end price-table-inner
	    $output .="</div>"; // end price-table
	    
	    return $output;

	}


	/**
	 * Details List
	 * @return void
	 */
	public function details_list( $atts, $content = null ) {
	   	extract(shortcode_atts(array(
	        'classes' => ''
	    ), $atts));
	    
	    return '<ul class="details-list ' . esc_attr( $classes ) . '">' . do_shortcode($content) . '</ul>';

	}


	/**
	 * Detail
	 * @return void
	 */
	public function detail( $atts, $content = null ) {
		extract(shortcode_atts(array(
			'label'     => 'Color',
			'value'     => 'White',
			'text_link' => '1',
			'url'       => '',
			'target'    => ''
	    ), $atts));

	    if ( $text_link === '0' && $url !== '' ) {
	        if ( $target === '0' ) {
	            $target = 'target="_blank"';
	        }
	        $value = '<a href="' . esc_url( $url ) . '" ' . self::esc( $target ) . '>' . self::esc( $value ) . '</a>';
	    }

	    return '<li><span>' . self::esc( $label ) . '</span>' . self::esc( $value ) . '</li>';

	}

	/**
	 * Google Maps
	 * @return void
	 */
	public function google_maps( $atts, $content = null ) {
	    extract(shortcode_atts(array(
			'height'       => '400',
			'address'      => 'Level 13, 2 Elizabeth St, Melbourne Victoria 3000 Australia',
			'depth'        => '15',
			'zoom_control' => 'true',
			'scrollwheel'  => 'false',
			'classes'      => ''
	    ), $atts));

	    $this->SID++;
		$noisa_sid = $this->SID;	

	    $output = '<div class="gmap-wrap">';
	    $output .= '<div id="gmap_' . esc_attr( $noisa_sid ) . '" class="gmap" style="height:' . esc_attr( $height ) . 'px" data-address="' . esc_attr( $address ) . '" data-zoom="' . esc_attr( $depth ) . '" data-zoom_control="' . esc_attr( $zoom_control ) . '" data-scrollwhell="' . esc_attr( $scrollwheel ) . '">';
	    $output .= '<p>' .  esc_html__( 'Please enable your JavaScript in your browser, to view our location.', 'noisa-toolkit' ) . '</p>';
	    $output .= '</div>';
	    $output .= '</div>';
	    
	    return $output;

	}


	/**
	 * Posts List
	 * @return void
	 */
	public function posts_list( $atts, $content = null ) {
	   	extract(shortcode_atts(array(
	        'limit'  => '10',
	        'title' => '',
	        'columns' => '2',
	        'button_link' => '',
	        'posts_in' => '',
	        'categories_in' => '',
	        'classes' => ''
	    ), $atts));
	    
	    global $wp_query, $post;

	    // Set unique ID
		$this->SID++;
		$noisa_sid = $this->SID;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    $words_number = 30;

	    // Date format
	    $date_format = get_option( 'date_format' );

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    // post backup
	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }
	    
	    // Loop Args.
	    $args = array(
	        'showposts' => $limit
	    );

	    /* Posts in */
	    if ( $posts_in !== '' ) {
	        $args['post__in'] = explode( ',', $posts_in );
	    }

	    /* Categories */
	    if ( $categories_in !== '' ) {
	        $categories_in = explode( ',', $categories_in );
	        $c = array();
	        foreach ( $categories_in as $cat ) {

	            $cat_id = get_cat_ID( $cat );
	            if ( $cat_id ) {
	                array_push( $c, $cat_id );
	            }
	        }
	        if ( is_array( $c ) && ! empty( $c ) ) {
	            $args['cat'] = implode( ',', $c );
	        }
	    }

	    $posts_list = new WP_Query();
	    $posts_list->query( $args );

	    // Begin Loop
	    if ( $posts_list->have_posts() ) {
	        $output .= '<div class="posts-list '. esc_attr( $classes ) .'">';
	        while ( $posts_list->have_posts() ) {
	            $posts_list->the_post();
	    
	            $output .= '<a href="' . esc_url( get_permalink() ) . '">';
	                $output .= '<span class="date">' . get_the_time( $date_format ) . '</span>';
	                $output .= '<div class="title"><h2>' . get_the_title() . '</h2></div>';

	                $categories = get_the_category();
	                $separator = ' / ';
	                $cats = '';
	                if ( ! empty( $categories ) ) {
	                    foreach( $categories as $category ) {
	                        $cats .=  esc_html( $category->name ) . $separator;
	                    }
	                }
	                $output .= '<span class="cats">' . trim( $cats, $separator ) . '</span>';
	                
	            $output .= '</a>';
	        } // end loop
	        $output .= '</div>'; //wrap;
	        if ( $button_link !== '' ) {
	            $output .= '<div class="button-position"><a class="btn btn-medium more-posts" href="' . esc_url( $button_link ) . '">' . esc_html__( 'View More Posts', 'noisa-toolkit' ) . '</a></div>';
	        }

	    } // end have_posts

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}

	/**
	 * Releases Grid
	 * @return void
	 */
	public function releases_grid( $atts, $content = null ) {
	    extract(shortcode_atts(array(
			'limit'      => '40',
			'order'      => 'menu_order',
			'in_row'     => '3',
			'url'        => '',
			'gap'        => 'no-gap',
			'display_by' => 'all',
			'terms'      => ''
	    ), $atts));
	    
	    global $wp_query, $post;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Date format
	    $date_format = get_option( 'date_format' );

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    if ( $url !== '' ) {
	        $n_cpt = wp_count_posts( 'noisa_releases' );
	        $n_cpt_publish = $n_cpt->publish;
	    }

	    // Loop Args.
	    $args = array(
	        'post_type' => 'noisa_releases',
	        'orderby'   => $order, // menu_order, date, title
	        'showposts' => $limit
	    );
	    $args['order'] = 'ASC';

	    if ( $order === 'date' ) {
	    	$args['order'] = 'DESC';
	    }

	     // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	        $args['tax_query'] = array(
	            array(
					'taxonomy' => $display_by,
					'field'    => 'slug',
					'terms'    => $terms
	            )
	        );
	    }
	    
	    $releases_query = new WP_Query();
	    $releases_query->query( $args );

	    // begin Loop
	    if ( $releases_query->have_posts() ) {
	        $output .= '<div class="' . esc_attr( $gap ) . ' releases-grid clearfix">';
	        while ( $releases_query->have_posts() ) {
	            $releases_query->the_post();

	            if ( has_post_thumbnail() ) {

	                $last = false;
	                if ( ( $releases_query->current_post ) < ( $releases_query->post_count -1 ) ) {
	                    $last = false;
	                } else {
	                    if ( $url !== '' ) {
	                        $last = true;
	                    }
	                }

	                $output .= '<article class="' . implode( ' ', get_post_class( 'masonry-item masonry-item-1-'. $in_row, $releases_query->post->ID ) ) . '">';
	                $output .= '<div class="grid-media">';
	               
	                if ( ! $last ) {
	                      $link_classes = 'thumb thumb-desc';
	                    $permalink = get_permalink();
	                } else {
	                    $link_classes = 'thumb thumb-desc thumb-post-count';
	                    $permalink = $url;
	                }
	                $tip = get_post_meta( $releases_query->post->ID, '_tooltip', true ); 
	                if ( isset( $tip ) && $tip !== '' ) {
	                    $link_classes .= ' tip active-tip';
	                } else {
	                    $tip = false;
	                }
	                $output .= '<a href="' . esc_url( $permalink ) . '" class="' . esc_attr( $link_classes ) . '">';

	                if ( ! $last ) {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $releases_query->post->ID ), 'noisa-release-thumb' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' . esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-details">';
	                    $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                    $output .= '<div class="grid-cats">';

	                    $categories = get_the_terms( $releases_query->post->ID, 'noisa_releases_genres' );
	                    $separator = ' / ';
	                    $cats = '';
	                    if ( ! empty( $categories ) ) {
	                       foreach( $categories as $term ) {

	                        $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                        }
	                    }
	                    $output .= trim( $cats, $separator );

	                    $output .= '</div>';
	                    $output .= '</div>';
	                    $output .= '<div class="arrow-icon"></div>';
	                    $output .= '</div>';
	                    if ( $tip ) {
	                        $output .= '<div class="tip-content hidden">' . self::esc( $tip ) . '</div>';
	                    }
	                } else {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $releases_query->post->ID ), 'noisa-release-thumb' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-plus"></div>';
	                    $output .= '<div class="desc-count">' . self::esc( $n_cpt_publish ) . '</div>';
	                    $output .= '</div>';

	                }
	                
	                $output .= '</a>';
	            
	                $output .= '</div>';
	                $output .= '</article>';
	            }

	        } // end loop
	        // End grid
	        $output .= '</div>';

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}


	/**
	 * Releases Carousel
	 * @return void
	 */
	public function releases_carousel( $atts, $content = null ) {
	   	global $wp_query, $post;

	    extract(shortcode_atts(array(
	        'limit'         => '40',
	        'order'         => 'menu_order',
	        'visible_items' => '1',
	        'gap'           => 'no-gap',
	        'display_by'    => 'all',
	        'terms'         => '',
	        'button_link'   => '',
	        'button_title'  => esc_html__( 'View More', 'noisa-toolkit'),
	        'classes'       => ''
	    ), $atts));
	    
	    $this->SID++;
		$noisa_sid = $this->SID;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    // Loop Args.
	    $args = array(
	        'post_type' => 'noisa_releases',
	        'orderby'   => $order, // menu_order, date, title
	        'showposts' => $limit
	    );
	    $args['order'] = 'ASC';

	    if ( $order === 'date' ) {
	    	$args['order'] = 'DESC';
	    }

	     // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	        $args['tax_query'] = array(
	            array(
	                'taxonomy' => $display_by,
	                'field' => 'slug',
	                'terms' => $terms
	            )
	        );
	    }

	    $releases_query = new WP_Query();
	    $releases_query->query( $args );

	    // begin Loop
	    if ( $releases_query->have_posts() ) {
	        $output .= '<div class="releases-carousel-wrap ' . esc_attr( $classes ) . '">';
	        $output .= '<div id="releases-carousel-id' . esc_attr( $noisa_sid ) . '" class="carousel-slider carousel-releases-slider '. esc_attr( $gap ) . '" data-effect="fade" data-pagination="true" data-nav="false" data-autoplay="false" data-items="' . esc_attr( $visible_items ) . '">';
	        while ( $releases_query->have_posts() ) {
	            $releases_query->the_post();

	            if ( has_post_thumbnail() ) {
	                $output .= '<article class="' . implode( ' ', get_post_class( $releases_query->post->ID ) ) . '">';
	                $output .= '<div class="grid-media">';
	                $link_classes = 'thumb thumb-desc';
	                $permalink = get_permalink();
	            
	                $tip = get_post_meta( $releases_query->post->ID, '_tooltip', true ); 
	                if ( isset( $tip ) && $tip !== '' ) {
	                    $link_classes .= ' tip active-tip';
	                } else {
	                    $tip = false;
	                }

	                $output .= '<a href="' . esc_url( $permalink ) . '" class="' . esc_attr( $link_classes ) . '">';
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $releases_query->post->ID ), 'noisa-release-thumb' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-details">';
	                    $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                    $output .= '<div class="grid-cats">';

	                    $categories = get_the_terms( $releases_query->post->ID, 'noisa_releases_genres' );
	                    $separator = ' / ';
	                    $cats = '';
	                    if ( ! empty( $categories ) ) {
	                       foreach( $categories as $term ) {

	                        $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                        }
	                    }
	                    $output .= trim( $cats, $separator );

	                    $output .= '</div>';
	                    $output .= '</div>';
	                    $output .= '<div class="arrow-icon"></div>';
	                    $output .= '</div>';
	                    if ( $tip ) {
	                        $output .= '<div class="tip-content hidden">' . self::esc( $tip ) . '</div>';
	                    }
	                $output .= '</a>';
	            
	                $output .= '</div>';
	                $output .= '</article>';
	            }

	        } // end loop
	        // End carousel
	        $output .= '</div>';
	        if ( $button_link !== '' ) {
	            $output .= '<div class="button-position"><a class="btn medium more-posts" href="' . esc_url( $button_link ) . '">' . self::esc( $button_title ) . '</a></div>';
	        }

	    $output .= '</div>'; // wrap;

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}


	/**
	 * Artists Grid
	 * @return void
	 */
	public function artists_grid( $atts, $content = null ) {
	    extract(shortcode_atts(array(
	        'limit'      => '40',
	        'order'      => 'menu_order',
	        'in_row'     => '3',
	        'url'        => '',
	        'gap'        => 'no-gap',
	        'display_by' => 'all',
	        'disable_artists_links' => '',
	        'terms'  => ''
	    ), $atts));
	    
	    global $wp_query, $post;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Date format
	    $date_format = get_option( 'date_format' );

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    if ( $url !== '' ) {
	        $n_cpt = wp_count_posts( 'noisa_artists' );
	        $n_cpt_publish = $n_cpt->publish;
	    } else {
	        $n_cpt_publish = '0';
	    }

	    // Loop Args.
	    $args = array(
	        'post_type' => 'noisa_artists',
	        'orderby'   => $order, // menu_order, date, title
	        'showposts' => $limit
	    );

	    $args['order'] = 'ASC';

	    if ( $order === 'date' ) {
	    	$args['order'] = 'DESC';
	    }

	    // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	        $args['tax_query'] = array(
	            array(
	                'taxonomy' => $display_by,
	                'field' => 'slug',
	                'terms' => $terms
	            )
	        );
	    }
	    
	    $artists_query = new WP_Query();
	    $artists_query->query( $args );

	    // begin Loop
	    if ( $artists_query->have_posts() ) {
	        $output .= '<div class="masonry ' . esc_attr( $gap ) . ' artists-grid clearfix">';
	        while ( $artists_query->have_posts() ) {
	            $artists_query->the_post();

	            if ( has_post_thumbnail() ) {

	                $last = false;
	                if ( ( $artists_query->current_post ) < ( $artists_query->post_count -1 ) ) {
	                    $last = false;
	                } else {
	                    if ( $url !== '' ) {
	                        $last = true;
	                    }
	                }

	                $output .= '<article class="' . implode( ' ', get_post_class( 'masonry-item masonry-item-1-'. $in_row, $artists_query->post->ID ) ) . '">';
	                $output .= '<div class="grid-media">';
	               
	                if ( ! $last ) {
	                      $link_classes = 'thumb thumb-desc';
	                    $permalink = get_permalink();
	                } else {
	                    $link_classes = 'thumb thumb-desc thumb-post-count';
	                    $permalink = $url;
	                }
	                $tip = get_post_meta( $artists_query->post->ID, '_tooltip', true ); 
	                if ( isset( $tip ) && $tip !== '' ) {
	                    $link_classes .= ' tip active-tip';
	                } else {
	                    $tip = false;
	                }
	                if ( $disable_artists_links === '0' && ! $last  ) {
	                    $output .= '<a class="' . esc_attr( $link_classes ) . '">';
	                } else {
	                   $output .= '<a href="' . esc_url( $permalink ) . '" class="' . esc_attr( $link_classes ) . '">'; 
	                }
	                
	                if ( ! $last ) {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $artists_query->post->ID ), 'full' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '';

	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-details">';
	                    $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                    $output .= '<div class="grid-cats">';

	                    $categories = get_the_terms( $artists_query->post->ID, 'noisa_artists_genres' );
	                    $separator = ' / ';
	                    $cats = '';
	                    if ( ! empty( $categories ) ) {
	                       foreach( $categories as $term ) {

	                        $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                        }
	                    }
	                    $output .= trim( $cats, $separator );

	                    $output .= '</div>';
	                    $output .= '</div>';
	                    $output .= '<div class="arrow-icon"></div>';
	                    $output .= '</div>';
	                    if ( $tip ) {
	                        $output .= '<div class="tip-content hidden">' . self::esc( $tip ) . '</div>';
	                    }
	                } else {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $artists_query->post->ID ), 'full' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-plus"></div>';
	                    $output .= '<div class="desc-count">' . self::esc( $n_cpt_publish ) . '</div>';
	                    $output .= '</div>';

	                }
	                
	                $output .= '</a>';
	            
	                $output .= '</div>';
	                $output .= '</article>';
	            }

	        } // end loop
	        // End grid
	        $output .= '</div>';

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}


	/**
	 * Artists Carousel
	 * @return void
	 */
	public function artists_carousel( $atts, $content = null ) {

	   	global $wp_query, $post;

	    extract(shortcode_atts(array(
	        'limit'         => '40',
	        'order'         => 'menu_order',
	        'visible_items' => '1',
	        'gap'           => 'no-gap',
	        'display_by'    => 'all',
	        'offset'        => 0 ,
	        'pagination'    => '0',
	        'terms'         => '',
	        'button_link'   => '',
	        'button_title'  => esc_html__( 'View More', 'noisa-toolkit'),
	        'classes'       => ''
	    ), $atts));
	    
	    // Set unique ID
		$this->SID++;
		$noisa_sid = $this->SID;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );
	    $thumb_size = 'full';
	    $classes .= ' grab';

	    // Pagination
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;
	    if ( $pagination === '0' ) {
	        $pagination = 'true';
	    } else {
	        $pagination = 'false';
	    }

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    // Loop Args.
	    $args = array(
	        'post_type' => 'noisa_artists',
	        'orderby'   => $order, // menu_order, date, title
	        'order'     => 'ASC',
	        'offset'    => $offset,
	        'showposts' => $limit
	    );

	    $args['order'] = 'ASC';

	    if ( $order === 'date' ) {
	    	$args['order'] = 'DESC';
	    }

	    // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	        $args['tax_query'] = array(
	            array(
	                'taxonomy' => $display_by,
	                'field' => 'slug',
	                'terms' => $terms
	            )
	        );
	    }
	    
	    $artists_query = new WP_Query();
	    $artists_query->query( $args );

	    // begin Loop
	    if ( $artists_query->have_posts() ) {
	        $output .= '<div class="artists-carousel-wrap ' . esc_attr( $classes ) . '">';
	        $output .= '<div id="artists-carousel-id' . esc_attr( $noisa_sid ) . '" class="carousel-slider carousel-artists-slider '. esc_attr( $gap ) . '" data-effect="fade" data-pagination="' . esc_attr( $pagination ) . '" data-nav="false" data-autoplay="false" data-items="' . esc_attr( $visible_items ) . '">';
	        while ( $artists_query->have_posts() ) {
	            $artists_query->the_post();

	            if ( has_post_thumbnail() ) {
	                $output .= '<article class="' . implode( ' ', get_post_class( $artists_query->post->ID ) ) . '">';
	                $output .= '<div class="grid-media">';
	                $link_classes = 'thumb thumb-desc';
	                $permalink = get_permalink();
	            
	                $tip = get_post_meta( $artists_query->post->ID, '_tooltip', true ); 
	                if ( isset( $tip ) && $tip !== '' ) {
	                    $link_classes .= ' tip active-tip';
	                } else {
	                    $tip = false;
	                }

	                $output .= '<a href="' . esc_url( $permalink ) . '" class="' . esc_attr( $link_classes ) . '">';
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $artists_query->post->ID ), 'full' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '';

	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-details">';
	                    $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                    $output .= '<div class="grid-cats">';

	                    $categories = get_the_terms( $artists_query->post->ID, 'noisa_artists_genres' );
	                    $separator = ' / ';
	                    $cats = '';
	                    if ( ! empty( $categories ) ) {
	                       foreach( $categories as $term ) {

	                        $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                        }
	                    }
	                    $output .= trim( $cats, $separator );

	                    $output .= '</div>';
	                    $output .= '</div>';
	                    $output .= '<div class="arrow-icon"></div>';
	                    $output .= '</div>';
	                    if ( $tip ) {
	                        $output .= '<div class="tip-content hidden">' . self::esc( $tip ) . '</div>';
	                    }
	                $output .= '</a>';
	            
	                $output .= '</div>';
	                $output .= '</article>';
	            }

	        } // end loop
	        // End carousel
	        $output .= '</div>';
	        if ( $button_link !== '' ) {
	            $output .= '<div class="button-position"><a class="btn medium more-posts" href="' . esc_url( $button_link ) . '">' . self::esc( $button_title ) . '</a></div>';
	        }

	    $output .= '</div>'; // wrap;

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}


	/**
	 * Events
	 * @return void
	 */
	public function events( $atts, $content = null ) {

	   	global $wp_query, $post;

		extract(shortcode_atts(array(
			'limit'         => '40',
			'in_row'        => '3',
			'gap'           => 'no-gap',
			'display_type'  => 'grid',
			'event_type'    => 'future-events',
			'display_by'    => 'all',
			'terms'         => '',
			'thumb_style'   => 'default',
			'show_end_date' => true
	    ), $atts));
	    
	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Date format
	    $date_format = 'd/m/Y';
	    if ( isset( $panel_options ) && isset( $panel_options['event_date'] ) ) {
	        $date_format = $panel_options['event_date'];
	    } else {
	        $date_format = get_option( 'date_format' );
	    }

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	     // Taxonomies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	    }

	    // ---------------------- All events
	    if ( $event_type === 'all-events' ) {

	        $future_tax = array(
	            'relation' => 'AND',
	            array(
					'taxonomy' => 'noisa_event_type',
					'field'    => 'slug',
					'terms'    => 'future-events'
	              )
	        );

	        $past_tax = array(
	            'relation' => 'AND',
	            array(
					'taxonomy' => 'noisa_event_type',
					'field'    => 'slug',
					'terms'    => 'past-events'
	              )
	        );

	        if ( $display_by !== 'all' && $terms !== '' ) {

	            array_push( $future_tax,
	                array(
						'taxonomy' => $display_by,
						'field'    => 'slug',
						'terms'    => $terms
	                )
	            );
	            array_push( $past_tax, 
	                array(
						'taxonomy' => $display_by,
						'field'    => 'slug',
						'terms'    => $terms
	                )
	            );
	        }

	        $future_events = get_posts( array(
				'post_type' => 'noisa_events',
				'showposts' => -1,
				'tax_query' => $future_tax,
				'orderby'   => 'meta_value',
				'meta_key'  => '_event_date_start',
				'order'     => 'ASC'
	        ));

	        // Past Events
	        $past_events = get_posts(array(
				'post_type' => 'noisa_events',
				'showposts' => -1,
				'tax_query' => $past_tax,
				'orderby'   => 'meta_value',
				'meta_key'  => '_event_date_start',
				'order'     => 'DSC'
	        ));

	        $future_nr = count( $future_events );
	        $past_nr = count( $past_events );

	        $mergedposts = array_merge( $future_events, $past_events ); //combine queries

	        $postids = array();
	        foreach( $mergedposts as $item ) {
	            $postids[] = $item->ID; //create a new query only of the post ids
	        }
	        $uniqueposts = array_unique( $postids ); //remove duplicate post ids

	        // var_dump($uniqueposts);
	        $args = array(
				'post_type' => 'noisa_events',
				'showposts' => $limit,
				'post__in'  => $uniqueposts,
				'orderby'   => 'post__in'
	        );

	    // ---------------------- Future or past events
	    } else {

	        /* Set order */
	        $order = $event_type === 'future-events' ? $order = 'ASC' : $order = 'DSC';

	        // Event type taxonomy
	        $taxonomies = array(
	            array(
					'taxonomy' => 'noisa_event_type',
					'field'    => 'slug',
					'terms'    => $event_type
	              )
	        );

	        if ( $display_by !== 'all' && $terms !== '' ) {

	            array_push( $taxonomies, 
	                array(
						'taxonomy' => $display_by,
						'field'    => 'slug',
						'terms'    => $terms
	                )
	            );
	        }

	        // Begin Loop
	        $args = array(
	            'post_type'        => 'noisa_events',
	            'showposts'        => $limit,
	            'tax_query'        => $taxonomies,
	            'orderby'          => 'meta_value',
	            'meta_key'         => '_event_date_start',
	            'order'            => $order,
	            'suppress_filters' => 0 // WPML FIX
	        );
	    }
	    
	    $events_query = new WP_Query();
	    $events_query->query( $args );

	    // begin Loop
	    if ( $events_query->have_posts() ) {
	        if ( $display_type === 'grid' ) {
	            $grid_classes = 'masonry events-grid clearfix ' . esc_attr( $gap ) . ' ' . esc_attr( $thumb_style );
	        } elseif ( $display_type === 'list' ) {
	            $grid_classes = 'masonry masonry-list events-list clearfix';
	        }

	        $output .= '<div class="' . esc_attr( $grid_classes ) . ' clearfix">';
	        while ( $events_query->have_posts() ) {
	            $events_query->the_post();

	            /* Event Date */
	            $event_time_start = get_post_meta( $events_query->post->ID, '_event_time_start', true );
	            $event_date_start = get_post_meta( $events_query->post->ID, '_event_date_start', true );
	            $event_date_end = get_post_meta( $events_query->post->ID, '_event_date_end', true );
	            $event_date_start = strtotime( $event_date_start );
	            $event_date_end = strtotime( $event_date_end );

	            $end_date = false;
	            if ( $show_end_date === true ) {
	            	if ( $event_date_start !== $event_date_end ) {
	            		$end_date = true;
	            	} 
	            } 
	            

	            if ( $display_type === 'grid' ) {
	                $output .= '<article class="' . implode( ' ', get_post_class( 'masonry-item masonry-item-1-'. $in_row, $events_query->post->ID ) ) . '">';

	                if ( has_post_thumbnail() ) {
	                    $output .= '<div class="grid-media">';

	                    $link_classes = 'thumb thumb-event';
	                    if ( has_term( 'past-events', 'noisa_event_type' ) ) {
	                        $link_classes .= ' past-event';
	                    }    
	                    $output .= '<a href="' . esc_url( get_permalink() ) . '" class="' . esc_attr( $link_classes )  . '">';
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $events_query->post->ID ), 'large' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' .  esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-details">';

	                    // Meta top
	                    $output .= '<div class="event-meta-top">';
	                    $output .= '<span class="event-day">' . date_i18n( 'D', $event_date_start ) . '</span>';
	                    $output .= '<span class="event-locations">';

	                        $categories = get_the_terms( $events_query->post->ID, 'noisa_events_locations' );
	                        $separator = ' / ';
	                        $cats = '';
	                        if ( ! empty( $categories ) ) {
	                           foreach( $categories as $term ) {

	                            $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                            }
	                        }
	                        $output .= trim( $cats, $separator );

	                    $output .= '</span>';
	                    $output .= '</div>';

	                    // Meta bottom
	                    $output .= '<div class="event-meta-bottom">';
	                    $output .= '<span class="event-date">' . date_i18n( $date_format, $event_date_start ) . '</span>';
	                    $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                    $output .= '<span class="event-artists">';

	                        $categories = get_the_terms( $events_query->post->ID, 'noisa_events_artists' );
	                        $separator = ' / ';
	                        $cats = '';
	                        if ( ! empty( $categories ) ) {
	                           foreach( $categories as $term ) {

	                            $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                            }
	                        }
	                        $output .= trim( $cats, $separator );
	                    
	                    $output .= '</span>';

	                    if ( has_term( 'past-events', 'noisa_event_type' ) ) {
	                        $output .= '<span class="pill-btn medium">' . esc_html__( 'Past Event', 'noisa-toolkit' ) . '</span>';
	                    }    
	                    $output .= '</div>';

	                    $output .= '</div>';
	                    $output .= '</div>';

	                    $output .= '</a>';

	                    $output .= '</div>';
	                    $output .= '</article>';

	                }
	            } elseif ( $display_type === 'list' ) {

	                $output .= '<article class="' . implode( ' ', get_post_class( 'masonry-item', $events_query->post->ID ) ) . '">';
	                $output .= '<a href="' . esc_url( get_permalink() ) . '" class="event-li">';
	                if ( $end_date === true ) {
	                	$output .= '<span class="date">' . date_i18n( $date_format, $event_date_start ) . ' - ' . date_i18n( $date_format, $event_date_end );
	                } else {
	                	$output .= '<span class="date">' . date_i18n( $date_format, $event_date_start );
	                }
	                if ( has_term( 'past-events', 'noisa_event_type' ) ) {
	                    $output .= '<span class="past-event-label">' . esc_html__( 'Past Event', 'noisa-toolkit' ) . '</span>';
	                }    
	                $output .= '</span>';
	                $output .= '<span class="venue">';

	                    $categories = get_the_terms( $events_query->post->ID, 'noisa_events_locations' );
	                    $separator = ' / ';
	                    $cats = '';
	                    if ( ! empty( $categories ) ) {
	                       foreach( $categories as $term ) {

	                        $cats .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	                        }
	                    }
	                    $output .= trim( $cats, $separator );

	                $output .= '</span>';
	                $output .= '<span class="title">' . get_the_title() . '</span>';

	                $output .= '</a>';
	                $output .= '</article>';

	            }

	        } // end loop
	        // End grid
	        $output .= '</div>';

	    } // end have_posts

	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;
	}


	/**
	 * Gallery Albums
	 * @return void
	 */
	public function gallery_albums( $atts, $content = null ) {
	   	extract(shortcode_atts(array(
			'limit'       => '40',
			'in_row'      => '3',
			'url'         => '',
			'gap'         => 'no-gap',
			'display_by'  => 'all',
			'masonry'     => '0',
			'terms'       => '',
			'thumb_style' => 'default',
			'classes'     => ''
	    ), $atts));
	    
	    global $wp_query, $post;

	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Date format
	    $date_format = get_option( 'date_format' );

	    // Masonry
	    if ( $masonry !== '0' ) {
	        $masonry = 'masonry';
	    } else {
	        $masonry = '';
	    }

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    if ( $url !== '' ) {
	        $n_cpt = wp_count_posts( 'noisa_gallery' );
	        $n_cpt_publish = $n_cpt->publish;
	    } else {
	        $n_cpt_publish = '0';
	    }

	    // Loop Args.
	    $args = array(
	        'post_type' => 'noisa_gallery',
	        'showposts' => $limit
	    );

	     // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' ) {
	        $terms = explode( ',', $terms );
	        $args['tax_query'] = array(
	            array(
	                'taxonomy' => $display_by,
	                'field' => 'slug',
	                'terms' => $terms
	            )
	        );
	    }
	    
	    $gallery_query = new WP_Query();
	    $gallery_query->query( $args );

	    // begin Loop
	    if ( $gallery_query->have_posts() ) {
	        $output .= '<div class="' . esc_attr( $gap ) . ' ' . esc_attr( $masonry ) . ' gallery-shortcode-grid clearfix ' . $classes . '">';
	        while ( $gallery_query->have_posts() ) {
	            $gallery_query->the_post();

	            if ( has_post_thumbnail() ) {

	                $last = false;
	                if ( ( $gallery_query->current_post ) < ( $gallery_query->post_count -1 ) ) {
	                    $last = false;
	                } else {
	                    if ( $url !== '' ) {
	                        $last = true;
	                    }
	                }

	                 // IDS
	                $images_ids = get_post_meta( $gallery_query->post->ID, '_gallery_ids', true ); 

	                if ( $images_ids || $images_ids !== '' ) {
	                    $ids = explode( '|', $images_ids );
	                    $ids = count( $ids );
	                } else {
	                    $ids = '0';
	                }

	                $output .= '<article class="' . implode( ' ', get_post_class( 'masonry-item masonry-item-1-'. $in_row, $gallery_query->post->ID ) ) . '">';
	                $output .= '<div class="grid-media">';
	               
	                if ( ! $last ) {
	                      $link_classes = 'thumb thumb-desc';
	                    $permalink = get_permalink();
	                } else {
	                    $link_classes = 'thumb thumb-desc thumb-post-count';
	                    $permalink = $url;
	                }
	        
	                $output .= '<a href="' . esc_url( $permalink ) . '" class="' . esc_attr( $link_classes ) . '">';

	                if ( ! $last ) {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $gallery_query->post->ID ), 'noisa-release-thumb' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' . esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    if ( $thumb_style === 'default' ) {
	                        $output .= '<div class="desc-layer">';
	                        $output .= '<div class="images-count">' . esc_html( $ids ) . '</div>';
	                        $output .= '<div class="desc-details desc-full">';
	                        $output .= '<h2 class="grid-title">' . get_the_title() . '</h2>';
	                        $output .= '<div class="grid-date">' . get_the_time( $date_format ) . '</div>';
	                        $output .= '</div>';
	                        $output .= '</div>';
	                    }
	                } else {
	                    $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $gallery_query->post->ID ), 'noisa-release-thumb' );
	                    $output .= '<img src="' . esc_url( $img_src[0] ) . '" alt="' . esc_attr__( 'Post Image', 'noisa-toolkit' ) . '">';
	                    $output .= '<div class="desc-layer">';
	                    $output .= '<div class="desc-plus"></div>';
	                    $output .= '<div class="desc-count">' . esc_html( $n_cpt_publish ) . '</div>';
	                    $output .= '</div>';

	                }
	                
	                $output .= '</a>';
	            
	                $output .= '</div>';
	                $output .= '</article>';
	            }

	        } // end loop
	        // End grid
	        $output .= '</div>';

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;

	}


	/**
	 * Gallery Images
	 * @return void
	 */
	public function gallery_images( $atts, $content = null ) {

		global $wp_query, $post;

		extract(shortcode_atts(array(
	        'limit'       => '40',
	        'url'         => '0',
	        'gap'         => 'no-gap',
	        'album_id'    => 0,
	        'in_row'      => '4',
	        'thumb_style' => 'default',
	        'classes'     => ''
	    ), $atts));
	    
	    $output = '';
	    $panel_options = get_option( 'noisa_panel_opts' );

	    // Pagination Limit
	    $limit = $limit && $limit === '' ? $limit = 6 : $limit = $limit;

	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	   // IDS
	    $images_ids = get_post_meta( $album_id, '_gallery_ids', true ); 

	    if ( ! $images_ids || $images_ids === 0 ) {
	        return;
	    }

	    $ids = explode( '|', $images_ids ); 

	    $n_cpt_publish = count( $ids );
	    
	    // Begin Loop
	    $args = array(
	        'post_type' => 'attachment',
	        'post_mime_type' => 'image',
	        'post__in' => $ids,
	        'orderby' => 'post__in',
	        'post_status' => 'any',
	        'showposts' => $limit
	    );
	    
	    $gallery_query = new WP_Query();
	    $gallery_query->query( $args );

	    // begin Loop
	    if ( $gallery_query->have_posts() ) {
	        $output .= '<div class="' . esc_attr( $gap ) . ' gallery-shortcode-images-grid clearfix ' . $classes . '">';
	        while ( $gallery_query->have_posts() ) {
	            $gallery_query->the_post();

	            $last = false;
	            if ( ( $gallery_query->current_post ) < ( $gallery_query->post_count -1 ) ) {
	                $last = false;
	            } else {
	                if ( $url !== '0' ) {
	                    $last = true;
	                }
	            }

             	$image_att = wp_get_attachment_image_src( get_the_id(), 'noisa-small-thumb' );
	            if ( ! $image_att[0] ) { 
	                continue;
	            }

	            $defaults = array(
					'title'       => '',
					'custom_link' => '',
					'thumb_icon'  => 'view'
	             );

	            /* Get image meta */
	            $image = get_post_meta( $album_id, '_gallery_ids_' . get_the_id(), true );

	            /* Add default values */
	            if ( isset( $image ) && is_array( $image ) ) {
	                $image = array_merge( $defaults, $image );
	            } else {
	                $image = $defaults;
	            }

	            /* Add image src to array */
	            $image['src'] = $image_att[0];
	            if ( $image['custom_link'] !== '' ) {
	                $link = $image['custom_link'];
	                $link_class = 'iframe-link';
	            } else {
	                $link = wp_get_attachment_image_src( get_the_id(), 'full' );
	                $link = $link[0];
	                $link_class = '';
	            }
	        
	            if ( ! $last ) {
	                $thumb_classes = 'thumb-desc';
	                if ( $thumb_style === 'simple' ) {
	                    $thumb_classes = 'thumb-simple';
	                }

	                if ( $image['thumb_icon'] === 'view' ) {
	                                    $image['thumb_icon'] = 'search';
	                } else if ( $image['thumb_icon'] === 'video' ) {
	                    $image['thumb_icon'] = 'play2';
	                }
	                $output .= '<div class="masonry-item gallery-album-image flex-col-1-' . esc_attr( $in_row ) . '">';
	                $output .= '<a href="' . esc_attr( $link ) .'" class="thumb ' . esc_attr( $thumb_classes ) . ' ' . esc_attr( $link_class ) . ' g-item" title="' . esc_attr( $image['title'] ) . '" data-group="gallery">';
	                $output .= '<img src="' . esc_url( $image['src'] ) . '" alt="' .  esc_attr__( 'Gallery thumbnail', 'noisa_theme' ) . '" title="' . esc_attr( $image['title'] ) . '">';
	                 $output .= '<div class="desc-layer"><span class="thumb-icon"><span class="icon icon-' . esc_attr( $image['thumb_icon'] ) . '"></span></span></div>';
	                $output .= '</a>';            
	                $output .= '</div>';
	            } else {
	                $output .= '<div class="masonry-item gallery-album-image flex-col-1-' . esc_attr( $in_row ) . '">';
	                $output .= '<a href="' . get_permalink( $album_id ) .'" class="thumb thumb-desc thumb-post-count">';
	                $output .= '<img src="' . esc_url( $image['src'] ) . '" alt="' .  esc_attr__( 'Gallery thumbnail', 'noisa_theme' ) . '" title="' . esc_attr( $image['title'] ) . '">';
	                $output .= '<div class="desc-layer">';
	                $output .= '<div class="desc-plus"></div>';
	                $output .= '<div class="desc-count">' . esc_html( $n_cpt_publish ) . '</div>';
	                $output .= '</div>';
	                $output .= '</a>';            
	                $output .= '</div>';
	            }
	            

	        } // end loop
	        // End grid
	        $output .= '</div>';

	    } // end have_posts

	    
	    $output .= '<div class="clear"></div>';

	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;
	}


	/**
	 * Event Countdown
	 * @return void
	 */
	public function event_countdown( $atts, $content = null ) {

		global $post;

	   	 extract(shortcode_atts(array(
	        'style'           => 'compact',
	        'custom_event'    => '',
	        'custom_event_id' => '0',
	        'display_by'      => 'all',
	        'terms'           => ''
	    ), $atts));
	    
	    $custom_event_id = (int)$custom_event_id;
	    
	    if ( isset( $post ) ) { 
	        $backup = $post;
	    }

	    // Event type taxonomy
	    $tax = array(
	        array(
				'taxonomy' => 'noisa_event_type',
				'field'    => 'slug',
				'terms'    => 'future-events'
	          )
	    );

	     // Taxonimies
	    if ( $display_by !== 'all' && $terms !== '' && $custom_event === '' ) {
	        $terms = explode( ',', $terms );
	        array_push( $tax,
	            array(
					'taxonomy' => $display_by,
					'field'    => 'slug',
					'terms'    => $terms
	            )
	        );
	    }

	    $args = array(
	        'post_type'        => 'noisa_events',
	        'showposts'        => 1,
	        'tax_query'        => $tax,
	        'orderby'          => 'meta_value',
	        'meta_key'         => '_event_date_start',
	        'order'            => 'ASC',
	        'suppress_filters' => 0 // WPML FIX
	    );
	    if ( $custom_event_id ==! 0 ) {
	        $custom_event_id_a = array();
	        $custom_event_id_a[0] = $custom_event_id;
	        $args['post__in'] = $custom_event_id_a;
	    }

	    $events = get_posts( $args );
	    $events_count = count( $events );

	    if ( $events_count !== 0 ) {
	        $custom_event_id = $events[0]->ID;
	    }

	    $panel_options = get_option( 'noisa_panel_opts' );

	    if ( $custom_event_id === 0 ) {
	        return false;
	    }
	    $output = '';

	    // Get event date and time
	    $event_date = strtotime( get_post_meta( $custom_event_id, '_event_date_start', true ) );
	    $event_time = strtotime( get_post_meta( $custom_event_id, '_event_time_start', true ) );

	    // Date format
	    $date_format = get_option( 'date_format' );

	    // locations
	    $categories = get_the_terms( $custom_event_id, 'noisa_events_locations' );
	    $separator = ' / ';
	    $locations = '';
	    if ( ! empty( $categories ) ) {
	       foreach( $categories as $term ) {

	        $locations .= '<span>' . esc_html( $term->name ) . '</span>' . esc_html( $separator );
	        }
	    }

	    $output .= '
	        <div class="event-countdown ' . esc_attr( $style ) . '">
	        <header class="content-header">
	        <h6 class="upcoming-title">' . get_the_title( $custom_event_id ) . '</h6>
	        <h6 class="upcoming-locations">' . date_i18n( $date_format, $event_date ) . ' @ ' . trim( $locations, $separator ) . '</h6>
	        </header>
	        <div class="countdown" data-event-date="' . date_i18n( 'Y/m/d', $event_date ) . ' ' . date_i18n( 'H:i', $event_time ) . ':00">
	        <div class="days" data-label="' .  esc_attr__( 'Days', 'noisa-toolkit' ) . '">000</div>
	        <div class="hours" data-label="' .  esc_attr__( 'Hours', 'noisa-toolkit' ) . '">00</div>
	        <div class="minutes" data-label="' .  esc_attr__( 'Minutes', 'noisa-toolkit' ) . '">00</div>
	        <div class="seconds" data-label="' .  esc_attr__( 'Seconds', 'noisa-toolkit' ) . '">00</div>
	        </div>
	        </div>
	    ';
	    if ( isset( $post ) ) {
	        $post = $backup;
	    }
	    return $output;
		
	}


	/**
	 * Time Line
	 * @return void
	 */
	public function time_line( $atts, $content = null ) {

	   	extract(shortcode_atts(array(
        'list'          => '01:30 AM - 03:00 AM|Lady C,11:30 PM - 01:30 AM|Gorrilla,10:30 PM - 11:30 PM|Vibeman,09:00 PM - 10:30 PM|DJ Nando,08:00 PM - 09:00 PM|General Midi'
	    ), $atts));

	    $output = '';
	    $html_list = '';
	    
	    if ( $list !== '' ){

	        $list = explode( ',', $list );
	        if ( is_array( $list) ) {
	                $i = 0;
	                $html_list .= '<ul class="timeline">';

	                foreach ( $list as $li ) {
	                    $list_details = explode( '|', $li );
	                   
	                    if ( is_array( $list_details) ) {
	                        $direction = ($i%2 === 0) ? 'direction-r' : 'direction-l';
	                        $html_list .= '
	                        <li>
	                            <div class="' . esc_attr( $direction ) . '">
	                                <div class="flag-wrapper">
	                                    <span class="artist-wrapper"><span class="artist">' . self::esc( $list_details[1] ) . '</span></span>
	                                    <span class="flag">' . self::esc( $list_details[0] ) . '</span>
	                                </div>
	                            </div>
	                        </li>';
	                        $i++;
	                    }
	                }

	                $html_list .= '</ul>';
	        }
	    } else {
	        return;
	    }
	    
	    return $html_list;
		
	}


	/* ==================================================
	  Helpers 
	================================================== */


	/**
	 * Get Background Code
	 * @param  $bg json
	 * @return false|string
	 */
	function generateBG( $bg ) {

	    if ( json_decode( $bg ) !== null ) {
	        
	        $css = '';            
	        $data = json_decode( $bg, true );
	        
	        // Image
	        if ( isset( $data['image'] ) ) {
	            $image = wp_get_attachment_image_src( $data['image'], 'full' );
	            $image = $image[0];
	            // If image exists
	            if ( $image ) {
	                $css .= 'background-image: url( ' . esc_url( $image ) . ');'."\n";
	            }
	        } 

	        // Color
	        if ( isset( $data['color'] ) ) {
	            $css .= 'background-color:' . esc_attr( $data['color'] ) . ';'."\n";
	        }

	        // Position
	        if ( isset( $data['position'] ) ) {
	            $css .= 'background-position:' . esc_attr( $data['position'] ) . ';'."\n";
	        }

	        // Repeat
	        if ( isset( $data['repeat'] ) ) {
	            $css .= 'background-repeat:' . esc_attr( $data['repeat'] ) . ';'."\n";
	        }

	        // Attachment
	        if ( isset( $data['attachment'] ) ) {
	            $css .= 'background-attachment:' . esc_attr( $data['attachment'] ) . ';'."\n";
	        }

	        // Size
	        if ( isset( $data['size'] ) ) {
	            $css .= 'background-size:' . esc_attr( $data['size'] ) . ';'."\n";
	        }

	        return $css;
	    } else {
	        return false;
	    }
	    
	}


	/**
	 * Share Buttons
	 * @return string
	 */
	public function shareGridButtons( $post_id ) {
    	return '
            <a class="share-button fb-share-btn" target="_blank" href="http://www.facebook.com/sharer.php?u=' . esc_url( get_permalink( $post_id ) ) . '"><span class="icon icon-facebook"></span></a>
            <a class="share-button twitter-share-btn" target="_blank" href="http://twitter.com/share?url=' . esc_url( get_permalink( $post_id ) ) . '"><span class="icon icon-twitter"></span></a>
            <a class="share-button linkedin-share-btn" target="_blank" href="https://www.linkedin.com/cws/share?url=' . esc_url( get_permalink( $post_id ) ) . '"><span class="icon icon-linkedin"></span></a>';
	}

	/**
	 * Display theme icons
	 * $json object
	 * @return array
	 */
	public function getIcons( $json = null ) {

	    // Icomoon parser
	    if ( $json !== null ) {
		    $obj = json_decode( $json );
		    foreach ( $obj->icons as $icon ) {

		        echo "'" . wp_kses_post( $icon->properties->name ) . "', ";

		    }
		}
	    
	    $icons = array('', 'pushpin', 'home', 'pencil', 'pencil2', 'droplet', 'image', 'image2', 'images', 'camera2', 'music', 'headphones', 'play', 'film', 'bullhorn', 'connection', 'tag', 'cart', 'support', 'phone2', 'envelope', 'location', 'map', 'clock', 'calendar', 'screen', 'download', 'upload', 'bubbles', 'user', 'users', 'quotes-left', 'spinner', 'search', 'zoomin', 'zoomout', 'expand', 'wrench', 'equalizer', 'cog', 'cog2', 'pie', 'stats', 'bars', 'bars2', 'gift', 'rocket2', 'fire', 'lab', 'lightning', 'list', 'numbered-list', 'menu', 'menu2', 'cloud', 'earth', 'link', 'eye', 'eye-blocked', 'bookmark', 'star', 'star2', 'star3', 'heart', 'thumbs-up', 'thumbs-up2', 'cancel-circle', 'close', 'checkmark', 'minus', 'plus', 'play2', 'pause', 'volume-high', 'arrow-right', 'arrow-left', 'arrow-up', 'arrow-right2', 'arrow-down', 'arrow-left2', 'newtab', 'code', 'share', 'mail', 'googleplus', 'google-drive', 'facebook', 'twitter', 'feed', 'youtube', 'youtube2', 'vimeo', 'lanyrd', 'flickr', 'flickr2', 'picassa', 'dribbble', 'forrst', 'deviantart', 'steam', 'github', 'github2', 'wordpress', 'joomla', 'blogger', 'tumblr', 'yahoo', 'tux', 'apple', 'finder', 'android', 'windows', 'soundcloud', 'skype', 'reddit', 'linkedin', 'lastfm', 'delicious', 'stumbleupon', 'stackoverflow', 'pinterest', 'xing', 'flattr', 'paypal', 'yelp', 'html5', 'html52', 'css3', 'chrome', 'firefox', 'IE', 'opera', 'number', 'number2', 'number3', 'number4', 'number5', 'number6', 'number7', 'number8', 'number9', 'number10', 'phone', 'tablet', 'window', 'monitor', 'ipod', 'camera', 'lamp', 'diamond', 'paperplane', 'rocket', 'globe', 'ruler', 'chevron-left', 'chevron-right', 'chevron-up', 'chevron-down', 'angle-left', 'angle-right', 'angle-up', 'angle-down');

	    asort( $icons );

	    return $icons;
	}


	/**
	 * Display escaped text.
	 * @param  $text
	 * @return string
	 */
	static function esc( $text ) {
		$text = preg_replace( array('/<(\?|\%)\=?(php)?/', '/(\%|\?)>/'), array('',''), $text );
		return $text;
	}


	/**
	 * Display escaped text through echo function.
	 * @param  $text
	 * @return string
	 */
	static function e_esc( $text ) {
		echo preg_replace( array('/<(\?|\%)\=?(php)?/', '/(\%|\?)>/'), array('',''), $text );
	}

}

Youez - 2016 - github.com/yon3zu
LinuXploit