<?php
/**
* Class: Jet_Elements_Instagram_Gallery
* Name: Instagram
* Slug: jet-instagram-gallery
*/
namespace Elementor;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Typography;
use Elementor\Repeater;
use Elementor\Scheme_Color;
use Elementor\Scheme_Typography;
use Elementor\Widget_Base;
use Elementor\Utils;
use Elementor\Modules\DynamicTags\Module as TagsModule;
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class Jet_Elements_Instagram_Gallery extends Jet_Elements_Base {
/**
* Instagram API-server URL.
*
* @since 1.0.0
* @var string
*/
private $api_url = 'https://www.instagram.com/';
/**
* New Instagram API-server URL.
*
* @var string
*/
private $new_api_url = 'https://graph.instagram.com/';
/**
* Graph Api Url.
*
* @var string
*/
private $graph_api_url = 'https://graph.facebook.com/';
/**
* Access token.
*
* @var string
*/
private $access_token = null;
/**
* Business account config.
*
* @var array|null
*/
private $business_account_config = null;
/**
* Request config
*
* @var array
*/
public $config = array();
public function get_name() {
return 'jet-instagram-gallery';
}
public function get_title() {
return esc_html__( 'Instagram', 'jet-elements' );
}
public function get_icon() {
return 'jet-elements-icon-instagram';
}
public function get_jet_help_url() {
return 'https://crocoblock.com/knowledge-base/articles/how-to-add-an-attractive-instagram-feed-to-the-page-built-with-elementor-using-jetelements-instagram-widget/';
}
public function get_categories() {
return array( 'cherry' );
}
protected function _register_controls() {
$css_scheme = apply_filters(
'jet-elements/instagram-gallery/css-scheme',
array(
'instance' => '.jet-instagram-gallery__instance',
'image_instance' => '.jet-instagram-gallery__image',
'inner' => '.jet-instagram-gallery__inner',
'content' => '.jet-instagram-gallery__content',
'caption' => '.jet-instagram-gallery__caption',
'meta' => '.jet-instagram-gallery__meta',
'meta_item' => '.jet-instagram-gallery__meta-item',
'meta_icon' => '.jet-instagram-gallery__meta-icon',
'meta_label' => '.jet-instagram-gallery__meta-label',
'notice' => '.jet-instagram-gallery__notice',
)
);
$this->start_controls_section(
'section_instagram_settings',
array(
'label' => esc_html__( 'Instagram Settings', 'jet-elements' ),
)
);
$this->add_control(
'endpoint',
array(
'label' => esc_html__( 'What to display', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => 'hashtag',
'options' => array(
'hashtag' => esc_html__( 'Tagged Photos', 'jet-elements' ),
'self' => esc_html__( 'My Photos', 'jet-elements' ),
),
)
);
$this->add_control(
'hashtag',
array(
'label' => esc_html__( 'Hashtag (enter without `#` symbol)', 'jet-elements' ),
'label_block' => true,
'type' => Controls_Manager::TEXT,
'condition' => array(
'endpoint' => 'hashtag',
),
'dynamic' => array(
'active' => true,
'categories' => array(
TagsModule::POST_META_CATEGORY,
),
),
)
);
$this->add_control(
'use_insta_graph_api',
array(
'label' => esc_html__( 'Use Instagram Graph API', 'jet-elements' ),
'type' => Controls_Manager::SWITCHER,
'default' => '',
'condition' => array(
'endpoint' => 'hashtag',
),
)
);
$business_account_config = $this->get_business_account_config();
if ( empty( $business_account_config['token'] ) || empty( $business_account_config['user_id'] ) ) {
$this->add_control(
'set_business_access_token',
array(
'type' => Controls_Manager::RAW_HTML,
'raw' => sprintf(
esc_html__( 'Please set Business Instagram Access Token and User ID on the %1$s.', 'jet-elements' ),
'<a target="_blank" href="' . jet_elements_settings()->get_settings_page_link( 'integrations' ) . '">' . esc_html__( 'settings page', 'jet-elements' ) . '</a>'
),
'content_classes' => 'elementor-descriptor',
'condition' => array(
'endpoint' => 'hashtag',
'use_insta_graph_api' => 'yes',
),
)
);
}
$this->add_control(
'order_by',
array(
'label' => esc_html__( 'Order By', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => 'recent_media',
'options' => array(
'recent_media' => esc_html__( 'Recent Media', 'jet-elements' ),
'top_media' => esc_html__( 'Top Media', 'jet-elements' ),
),
'condition' => array(
'endpoint' => 'hashtag',
'use_insta_graph_api' => 'yes',
),
)
);
$this->add_control(
'access_token_source',
array(
'label' => esc_html__( 'Access Token', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => '',
'options' => array(
'' => esc_html__( 'Default', 'jet-elements' ),
'custom' => esc_html__( 'Custom', 'jet-elements' ),
),
'condition' => array(
'endpoint' => 'self',
),
)
);
if ( ! $this->get_access_token_from_settings() ) {
$this->add_control(
'set_access_token',
array(
'type' => Controls_Manager::RAW_HTML,
'raw' => sprintf(
esc_html__( 'Please set Instagram Access Token on the %1$s.', 'jet-elements' ),
'<a target="_blank" href="' . jet_elements_settings()->get_settings_page_link( 'integrations' ) . '">' . esc_html__( 'settings page', 'jet-elements' ) . '</a>'
),
'content_classes' => 'elementor-descriptor',
'condition' => array(
'endpoint' => 'self',
'access_token_source' => '',
),
)
);
}
$this->add_control(
'custom_access_token',
array(
'label' => esc_html__( 'Custom Access Token', 'jet-elements' ),
'label_block' => true,
'type' => Controls_Manager::TEXT,
'condition' => array(
'endpoint' => 'self',
'access_token_source' => 'custom',
),
'dynamic' => array(
'active' => true,
'categories' => array(
TagsModule::POST_META_CATEGORY,
),
),
)
);
$this->add_control(
'cache_timeout',
array(
'label' => esc_html__( 'Cache Timeout', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => 'hour',
'options' => array(
'none' => esc_html__( 'None', 'jet-elements' ),
'minute' => esc_html__( 'Minute', 'jet-elements' ),
'hour' => esc_html__( 'Hour', 'jet-elements' ),
'day' => esc_html__( 'Day', 'jet-elements' ),
'week' => esc_html__( 'Week', 'jet-elements' ),
),
)
);
$this->add_control(
'photo_size',
array(
'label' => esc_html__( 'Photo Size', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => 'high',
'options' => array(
'thumbnail' => esc_html__( 'Thumbnail (150x150)', 'jet-elements' ),
'low' => esc_html__( 'Low (320x320)', 'jet-elements' ),
'standard' => esc_html__( 'Standard (640x640)', 'jet-elements' ),
'high' => esc_html__( 'High (original)', 'jet-elements' ),
),
)
);
$this->add_control(
'posts_counter',
array(
'label' => esc_html__( 'Number of instagram posts', 'jet-elements' ),
'type' => Controls_Manager::NUMBER,
'default' => 6,
'min' => 1,
'max' => 50,
'step' => 1,
)
);
$this->add_control(
'post_link',
array(
'label' => esc_html__( 'Enable linking photos', 'jet-elements' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'jet-elements' ),
'label_off' => esc_html__( 'No', 'jet-elements' ),
'return_value' => 'yes',
'default' => 'yes',
)
);
$this->add_control(
'post_link_type',
array(
'label' => esc_html__( 'Link type', 'jet-elements' ),
'type' => Controls_Manager::SELECT,
'default' => 'post-link',
'options' => array(
'post-link' => esc_html__( 'Post Link', 'jet-elements' ),
'lightbox' => esc_html__( 'Lightbox', 'jet-elements' ),
),
'condition' => array(
'post_link' => 'yes',
),
)
);
$this->add_control(
'post_caption',
array(
'label' => esc_html__( 'Enable caption', 'jet-elements' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => esc_html__( 'Yes', 'jet-elements' ),
'label_off' => esc_html__( 'No', 'jet-elements' ),
'return_value' => 'yes',
'default' => 'yes',
)
);
$this->add_control(
'post_caption_length',
array(
'label' => esc_html__( 'Caption length', 'jet-elements' ),
'type' => Controls_Manager::NUMBER,
'default' => 50,
'min' => 1,
'max' => 300,
'step' => 1,
'condition' => array(
'post_caption' => 'yes',
),
)
);
$this->add_control(
'post_comments_count',
Loading ...