/home/skemvmse/www/wp-content/plugins/astra-portfolio/classes/class-astra-portfolio-shortcode.php
<?php
/**
* Astra Portfolio Shortcode
*
* @package Astra Portfolio
* @since 1.0.0
*/
if ( ! class_exists( 'Astra_Portfolio_Shortcode' ) ) :
/**
* Astra_Portfolio_Shortcode
*
* @since 1.0.0
*/
class Astra_Portfolio_Shortcode {
/**
* Instance
*
* @access private
* @var object Class Instance.
* @since 1.0.0
*/
private static $instance;
/**
* Initiator
*
* @since 1.0.0
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*
* @since 1.0.0
*/
public function __construct() {
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) );
add_shortcode( 'wp_portfolio', array( $this, 'page_templates' ) );
add_shortcode( 'astra-portfolio', array( $this, 'page_templates' ) );
add_action( 'astra_portfolio_shortcode_bottom', array( $this, 'shortcode_bottom' ) );
}
/**
* Enqueue Assets.
*
* @version 1.0.2 Added lightbox assets.
* @version 1.0.0
*
* @return void
*/
public function enqueue_assets() {
// Lightbox.
wp_register_script( 'astra-portfolio-lightbox', ASTRA_PORTFOLIO_URI . 'assets/vendor/js/' . Astra_Portfolio::get_instance()->get_assets_js_path( 'magnific-popup' ), array( 'jquery' ), ASTRA_PORTFOLIO_VER, true );
wp_register_style( 'astra-portfolio-lightbox', ASTRA_PORTFOLIO_URI . 'assets/vendor/css/' . Astra_Portfolio::get_instance()->get_assets_css_path( 'magnific-popup' ), null, ASTRA_PORTFOLIO_VER, 'all' );
// Lazyload & Image Loaded.
wp_register_script( 'astra-portfolio-lazyload', ASTRA_PORTFOLIO_URI . 'assets/vendor/js/' . Astra_Portfolio::get_instance()->get_assets_js_path( 'lazy' ), array( 'jquery' ), ASTRA_PORTFOLIO_VER, true );
// History.
wp_register_script( 'astra-portfolio-history', ASTRA_PORTFOLIO_URI . 'assets/vendor/js/' . Astra_Portfolio::get_instance()->get_assets_js_path( 'history' ), array( 'jquery' ), ASTRA_PORTFOLIO_VER, true );
$shortcode_js_dependencies = array(
'wp-util',
'astra-portfolio-api',
'imagesloaded',
'jquery',
'astra-portfolio-lazyload',
'astra-portfolio-lightbox',
'astra-portfolio-history',
);
if ( Astra_Portfolio_Helper::get_page_setting( 'enable-masonry', true ) ) {
$shortcode_js_dependencies[] = 'jquery-masonry';
}
// API.
wp_register_script( 'astra-portfolio-api', ASTRA_PORTFOLIO_URI . 'assets/js/' . Astra_Portfolio::get_instance()->get_assets_js_path( 'astra-portfolio-api' ), array( 'jquery' ), ASTRA_PORTFOLIO_VER, true );
wp_register_script( 'astra-portfolio-shortcode', ASTRA_PORTFOLIO_URI . 'assets/js/' . Astra_Portfolio::get_instance()->get_assets_js_path( 'shortcode' ), $shortcode_js_dependencies, ASTRA_PORTFOLIO_VER, true );
$data = array(
'ApiURL' => self::get_api_api(),
'filters' => array(
'page_builder' => array(
'title' => __( 'Page Builder', 'astra-portfolio' ),
'slug' => 'astra-portfolio-other-categories',
'trigger' => 'astra-api-category-loaded',
),
'categories' => array(
'title' => __( 'Categories', 'astra-portfolio' ),
'slug' => 'astra-portfolio-categories',
'trigger' => 'astra-api-category-loaded',
),
),
);
wp_localize_script( 'astra-portfolio-api', 'astraPortfolioApi', $data );
// Styles.
wp_register_style( 'astra-portfolio-shortcode', ASTRA_PORTFOLIO_URI . 'assets/css/' . Astra_Portfolio::get_instance()->get_assets_css_path( 'shortcode' ), array( 'astra-portfolio-lightbox' ), ASTRA_PORTFOLIO_VER, 'all' );
wp_register_style( 'astra-portfolio-grid', ASTRA_PORTFOLIO_URI . 'assets/css/' . Astra_Portfolio::get_instance()->get_assets_css_path( 'grid' ), null, ASTRA_PORTFOLIO_VER, 'all' );
$custom_css = '
.spinner {
background-image: url(' . site_url() . '/wp-includes/images/spinner.gif);
}
';
wp_add_inline_style( 'astra-portfolio-shortcode', $custom_css );
}
/**
* Get Attributes
*
* @since 1.7.0
*
* @return array Shortcode attributes.
*/
public function get_attributes() {
return array(
'other-categories' => '',
'categories' => '',
'columns' => '',
'per-page' => '',
'show-portfolio-on' => '',
'show-search' => '',
'show-other-categories' => '',
'show-categories' => '',
'tags' => '',
'quick-view-text' => __( 'Quick View', 'astra-portfolio' ),
'show-quick-view' => 'yes',
'other-category-show-all' => 'no',
'category-show-all' => 'yes',
'grid-style' => '',
'page-builder' => '',
);
}
/**
* Shortcode
*
* @since 1.0.0
* @param array $data Shortcode attributes.
* @return mixed Shortcode markup.
*/
public function page_templates( $data = array() ) {
$atts = $data;
$data = shortcode_atts(
$this->get_attributes(),
$data
);
// If shortcode have empty parameters. Then,
// Get values from settings page.
$stored = Astra_Portfolio_Helper::get_page_settings();
$data = wp_parse_args( $data, $stored );
if ( empty( $data['show-search'] ) ) {
$data['show-search'] = ( isset( $stored['show-search'] ) && $stored['show-search'] ) ? 'yes' : 'no';
}
if ( empty( $data['show-other-categories'] ) ) {
$data['show-other-categories'] = ( isset( $stored['other-categories'] ) && $stored['other-categories'] ) ? 'yes' : 'no';
}
if ( empty( $data['show-categories'] ) ) {
$data['show-categories'] = ( isset( $stored['categories'] ) && $stored['categories'] ) ? 'yes' : 'no';
}
if ( empty( $data['columns'] ) ) {
$data['columns'] = ( isset( $stored['no-of-columns'] ) && $stored['no-of-columns'] ) ? $stored['no-of-columns'] : '3';
}
if ( isset( $atts['par-page'] ) && ! empty( $atts['par-page'] ) ) {
$data['per-page'] = $atts['par-page'];
} elseif ( empty( $data['per-page'] ) ) {
$data['per-page'] = ( isset( $stored['per-page'] ) && $stored['per-page'] ) ? $stored['per-page'] : '15';
}
if ( empty( $data['show-portfolio-on'] ) ) {
$data['show-portfolio-on'] = ( isset( $stored['show-portfolio-on'] ) && $stored['show-portfolio-on'] ) ? $stored['show-portfolio-on'] : 'scroll';
}
if ( empty( $data['grid-style'] ) ) {
$data['grid-style'] = ( isset( $stored['grid-style'] ) && $stored['grid-style'] ) ? $stored['grid-style'] : 'style-1';
}
// Enqueue assets.
wp_enqueue_script( 'astra-portfolio-shortcode' );
wp_enqueue_style( 'astra-portfolio-shortcode' );
wp_enqueue_style( 'astra-portfolio-grid' );
$settings = apply_filters(
'astra_portfolio_shortcode_localize_vars',
array(
'scrollToTop' => true,
'apiEndpoint' => self::get_api_api(),
'apiDomain' => site_url(),
'ajaxurl' => esc_url( admin_url( 'admin-ajax.php' ) ),
'ApiURLSep' => ( get_option( 'permalink_structure', false ) ) ? '?' : '&',
'settings' => $data,
'siteLoadingEnabled' => true,
'siteLoadingTitle' => __( 'Loading...', 'astra-portfolio' ),
'siteLoadingMessage' => __( 'One moment please.', 'astra-portfolio' ),
)
);
wp_localize_script( 'astra-portfolio-shortcode', 'astraPortfolio', $settings );
// Add thickbox.
add_thickbox();
// Stored Settings.
$settings = Astra_Portfolio_Helper::get_page_settings();
$row_class = apply_filters( 'astra_portfolio_row_class', 'astra-portfolio-row' );
$classes = apply_filters(
'astra_portfolio_column_classes',
array(
'1' => 'astra-portfolio-col-md-12',
'2' => 'astra-portfolio-col-md-6',
'3' => 'astra-portfolio-col-md-4',
'4' => 'astra-portfolio-col-md-3',
)
);
$column_class = 'astra-portfolio-col-md-3';
if ( ! empty( $data['columns'] ) && isset( $classes[ $data['columns'] ] ) ) {
$column_class = $classes[ $data['columns'] ];
}
// Load template.
return astra_portfolio_get_template_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'shortcode.php',
array(
'args' => array(
'data' => $data,
'row_class' => $row_class,
'column_class' => $column_class,
),
)
);
}
/**
* Shortcode Bottom
*
* @since 1.0.6
*
* @param array $args Shortcode arguments.
* @return void
*/
public function shortcode_bottom( $args ) {
/**
* Responsive Buttons
*/
?>
<script type="text/template" id="tmpl-astra-portfolio-responsive-view">
<?php
// Load template.
echo astra_portfolio_get_template_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'tmpl-responsive-view.php',
array(
'args' => $args,
)
);
?>
</script>
<?php
/**
* Category & Other Category
*/
?>
<script type="text/template" id="tmpl-astra-portfolio-filters">
<?php
// Load template.
echo astra_portfolio_get_template_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'tmpl-portfolio-filters.php',
array(
'args' => $args,
)
);
?>
</script>
<?php
/**
* No items found.
*/
?>
<script type="text/template" id="tmpl-astra-portfolio-no-items-found">
<?php
// Load template.
echo astra_portfolio_get_template_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'tmpl-no-items-found.php',
array(
'args' => $args,
)
);
?>
</script>
<?php
/**
* Portfolio List
*/
?>
<script type="text/template" id="tmpl-astra-portfolio-list">
<?php
// Load template.
echo astra_portfolio_get_template_html( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'tmpl-portfolio-list.php',
array(
'args' => $args,
)
);
?>
</script>
<?php
}
/**
* Get API URL
*
* In some case user want to change the Rest API URL. So, We have provided
* the filter `astra_portfolio_api_site_uri` to change the Rest API URL.
*
* @since 1.3.0
* @return string Rest API URL.
*/
public static function get_api_api() {
return apply_filters( 'astra_portfolio_api_site_uri', get_rest_url() . 'wp/v2/' );
}
}
/**
* Kicking this off by calling 'get_instance()' method
*/
Astra_Portfolio_Shortcode::get_instance();
endif;