init();
}
public function init() {
$this->base_plugin_settings();
$this->plugin_base();
$this->addon_settings();
$this->register_category();
$this->helper();
$this->hooks();
}
public function helper(){
require_once ( AIEA_DIR . 'includes/traits/helper.php' );
}
function addon_settings() {
if ( is_admin() ) {
require_once ( AIEA_DIR . 'core/admin/ai-settings.php');
}
}
function register_category() {
// Free category
add_action( 'elementor/elements/categories_registered', [ $this, 'create_aiea_category' ], 5 );
// Pro Category
add_action( 'elementor/elements/categories_registered', [ $this, 'create_aiea_pro_category' ], 5.5 );
}
function base_plugin_settings() {
// plugin action links
add_filter( 'plugin_action_links_' . plugin_basename( AIEA_BASE ), [ $this, 'plugin_action_links' ] );
// plugin meta links
//add_filter( 'plugin_row_meta', [ $this, 'plugin_meta_links' ], 10, 2 );
// pro elements promotion
add_filter( 'elementor/editor/localize_settings', [ $this, 'promote_aiea_pro_elements' ] );
}
function plugin_base() {
// base elements
require_once ( AIEA_DIR . 'includes/base/addon-base.php');
}
function hooks() {
//Include Custom Icons
add_filter( 'elementor/icons_manager/native', array( $this, 'custom_icons' ), 1 );
// Register controls
add_action( 'elementor/controls/register', [ $this, 'register_controls' ] );
// Add Plugin actions
add_action( 'elementor/widgets/register', array( $this, 'register_widgets' ) );
// Register Widget Scripts
add_action( 'elementor/frontend/after_register_scripts', [ $this, 'widget_scripts' ] );
// Register Editor Styles
add_action( 'elementor/editor/before_enqueue_scripts', [$this, 'editor_enqueue_scripts'] );
// Editor Preview Styles
add_action( 'elementor/preview/enqueue_styles', [$this, 'preview_enqueue_scripts'] );
}
function plugin_action_links( $actions ) {
$mylinks = array(
'Settings',
'Get Premium',
);
$actions = array_merge( $actions, $mylinks );
return $actions;
}
function plugin_meta_links( $links, $file ) {
if ( strpos( $file, basename( AIEA_BASE ) ) ) {
$links[] = 'Docs&FAQ';
$links[] = 'Video Tutorials';
}
return $links;
}
public function create_aiea_category( $elements_manager ) {
// Register ai addon widget category
$elements_manager->add_category( 'ai-elements',
array(
'title' => esc_html__( 'AI Addons', 'ai-addons' )
), 1
);
}
public function create_aiea_pro_category( $elements_manager ) {
// Register ai pro addons widget category
$elements_manager->add_category( 'ai-pro-elements',
array(
'title' => esc_html__( 'AI Addons Pro', 'ai-addons' )
), 1
);
}
public function promote_aiea_pro_elements( $config ) {
$promotion_widgets = [];
if ( isset( $config['promotionWidgets'] ) ) {
$promotion_widgets = $config['promotionWidgets'];
}
$combine_array = array_merge( $promotion_widgets, [
[
'name' => 'ai-tooltip',
'title' => __( 'Tooltip', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('tooltip'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-image-box',
'title' => __( 'Image Box', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-box'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-flip-box',
'title' => __( 'Flip Box', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('flip-box'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-day-counter',
'title' => __( 'Day Counter', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('day-counter'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-pricing-table',
'title' => __( 'Pricing Table', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('pricing-table'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-timeline',
'title' => __( 'Timeline', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('timeline'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-timeline-slide',
'title' => __( 'Timeline Slide', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('timeline-slide'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-offcanvas',
'title' => __( 'Offcanvas', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('offcanvas'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-image-grid',
'title' => __( 'Image Grid', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-grid'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-mailchimp',
'title' => __( 'Mailchimp', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('mailchimp'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-modal-popup',
'title' => __( 'Modal Popup', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('modal-popup'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'image-before-after',
'title' => __( 'Before After Image', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-before-after'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-image-accordion',
'title' => __( 'Image Accordion', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-accordion'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-image-hotspot',
'title' => __( 'Image Hotspot', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-hotspot'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-image-hover',
'title' => __( 'Image Hover', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('image-hover'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-video-popup',
'title' => __( 'Video Popup', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('video-popup'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-portfolio',
'title' => __( 'Portfolio', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('portfolio'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-products-slider',
'title' => __( 'Products Slider', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('product-slider'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-products-category',
'title' => __( 'Products Category', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('products-category'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-products-category-slider',
'title' => __( 'Products Category Slider', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('products-category-slider'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-pretty-hover',
'title' => __( 'Pretty Hover', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('pretty-hover'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-posts-magazine',
'title' => __( 'Magazine Layout', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('posts-magazine'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-breadcrumbs',
'title' => __( 'Breadcrumb', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('breadcrumbs'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-line-chart',
'title' => __( 'Line Chart', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('line-chart'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-bar-chart',
'title' => __( 'Bar Chart', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('bar-chart'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-polar-area-chart',
'title' => __( 'Polar Area Chart', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('polar-area-chart'),
'categories' => '["ai-pro-elements"]',
],
[
'name' => 'ai-pie-chart',
'title' => __( 'Pie Chart', 'ai-addons' ),
'icon' => 'ai-default-icon '. aiea_addon_base()->widget_icon_classes('pie-chart'),
'categories' => '["ai-pro-elements"]',
],
] );
$config['promotionWidgets'] = $combine_array;
return $config;
}
public function editor_enqueue_scripts(){
wp_enqueue_style( 'aiea-font', AIEA_URL .'core/admin/assets/css/dashboard-font.css', array(), '1.0', 'all');
wp_enqueue_style( 'ai-editor', AIEA_URL .'assets/css/editor/editor-style.css', array(), '1.0', 'all');
wp_enqueue_script( 'macy', AIEA_URL .'assets/js/editor/macy.min.js', array( 'jquery' ), '1.0', true );
wp_enqueue_script( 'ai-templates-library', AIEA_URL .'assets/js/editor/templates-library.js', array( 'jquery', 'macy' ), '1.0', true );
wp_localize_script( 'ai-templates-library', 'inc_obj',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'post_id' => get_the_ID(),
'logo' => AIEA_URL .'assets/images/logo.png',
'logo_full' => AIEA_URL .'assets/images/logo.png',
'library_nonce' => wp_create_nonce( 'ai-library(*&&%^#' )
)
);
}
public function preview_enqueue_scripts() {
wp_enqueue_style( 'ai-editor-preview', AIEA_URL .'assets/css/editor/editor-preview.css', array(), '1.0', 'all');
}
public function widget_scripts() {
// Styles
$style_args = [
[ 'key' => 'ai-animate', 'file' => 'animate.min.css', 'lib' => array(), 'version' => '1.0' ],
[ 'key' => 'themify-icons', 'file' => 'themify-icons.css', 'lib' => array(), 'version' => '1.0' ],
[ 'key' => 'bootstrap-icons', 'file' => 'bootstrap-icons.css', 'lib' => array(), 'version' => '1.0' ],
[ 'key' => 'slick', 'file' => 'slick.min.css', 'lib' => array(), 'version' => '1.8.1' ],
[ 'key' => 'image-hover', 'file' => 'image-hover.min.css', 'lib' => array(), 'version' => '1.0' ],
[ 'key' => 'aiimgc', 'file' => 'aiimgc.css', 'lib' => array(), 'version' => '1.0' ],
[ 'key' => 'pannellum', 'file' => 'pannellum.min.css', 'lib' => array(), 'version' => '2.3.2' ],
[ 'key' => 'ai-table', 'file' => 'data-table.css', 'lib' => array(), 'version' => '1.0' ],
];
// Register all lib style files
foreach( $style_args as $s_r_args ) aiea_addon_base()->scripts_regsiter( 'style', 'register', $s_r_args );
$s_e_args = [ 'key' => 'ai-style', 'file' => 'style.css', 'lib' => array(), 'version' => '1.0' ];
// Plugin main style file
aiea_addon_base()->scripts_regsiter( 'style', 'enqueue', $s_e_args );
// Scripts
$script_args = [
[ 'key' => 'jquery-ease', 'file' => 'jquery.easing-1.3.min.js', 'lib' => array('jquery'), 'version' => '1.3' ],
[ 'key' => 'isotope', 'file' => 'isotope.pkgd.min.js', 'lib' => array('jquery'), 'version' => '3.0.3' ],
[ 'key' => 'infinite-scroll', 'file' => 'infinite-scroll.pkgd.min.js', 'lib' => array('jquery'), 'version' => '4.0.1' ],
[ 'key' => 'typed', 'file' => 'typed.min.js', 'lib' => array('jquery'), 'version' => '2.0.9' ],
[ 'key' => 'morphext', 'file' => 'morphext.min.js', 'lib' => array('jquery'), 'version' => '2.4.7' ],
[ 'key' => 'slick', 'file' => 'slick.min.js', 'lib' => array('jquery'), 'version' => '1.8.1' ],
[ 'key' => 'appear', 'file' => 'jquery.appear.min.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'circle-progress', 'file' => 'jquery.circle.progress.min.js', 'lib' => array('jquery'), 'version' => '1.2.2' ],
[ 'key' => 'countdown', 'file' => 'jquery.countdown.min.js', 'lib' => array('jquery'), 'version' => '2.2.0' ],
[ 'key' => 'chart', 'file' => 'chart.min.js', 'lib' => array('jquery'), 'version' => '4.2.1' ],
[ 'key' => 'jquery-event-move', 'file' => 'jquery.event.move.js', 'lib' => array('jquery'), 'version' => '2.0.0' ],
[ 'key' => 'jquery-aiimgc', 'file' => 'jquery.aiimgc.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'jquery-pannellum', 'file' => 'pannellum.min.js', 'lib' => array('jquery'), 'version' => '2.3.2' ],
[ 'key' => 'ai-data-table', 'file' => 'ai-datatable.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'ai-data-table-editor', 'file' => 'ai-datatable-editor.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'ai-timeline', 'file' => 'timeline.min.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'ai-sharer', 'file' => 'aiea-social-sharer.js', 'lib' => array('jquery'), 'version' => '1.0' ],
[ 'key' => 'ai-front-end', 'file' => 'ai-front-end.js', 'lib' => array('jquery'), 'version' => '1.0' ]
];
$script_e_args = [];
$module_args = [
[ 'key' => 'jarallax', 'file' => 'jarallax.min.js', 'lib' => array('jquery'), 'version' => '2.1.3' ],
[ 'key' => 'ai-front-end', 'file' => 'ai-front-end.js', 'lib' => array('jquery'), 'version' => '1.0' ]
];
$is_preview = \Elementor\Plugin::$instance->preview->is_preview();
if( $is_preview ) {
$script_e_args = $module_args;
} else {
$script_args = array_merge( $script_args, $module_args );
}
$gmap_api = aiea_addon_base()->aiea_options('google-map-api');
if( $gmap_api ){
$script_args[] = [ 'key' => 'ai-gmaps', 'file' => '//maps.google.com/maps/api/js?key='. esc_attr( $gmap_api ), 'lib' => array('jquery'), 'version' => null, 'external' => true ];
}
// Register all script files
foreach( $script_args as $sc_r_args ) aiea_addon_base()->scripts_regsiter( 'script', 'register', $sc_r_args );
// Enqueue all script files
foreach( $script_e_args as $sc_e_args ) aiea_addon_base()->scripts_regsiter( 'script', 'enqueue', $sc_e_args );
}
public function register_widgets( $widgets_manager ) {
// required files
require_once AIEA_DIR . '/includes/class.ai-post-elements.php';
$available_shortcodes = aiea_addon_base()->aiea_shortcodes();
$aiea_shortcodes = get_option('aiea_shortcodes');
$shortcode_emty_stat = false;
if( empty( $aiea_shortcodes ) ){
$aiea_shortcodes = $available_shortcodes;
$shortcode_emty_stat = true;
}
foreach( $available_shortcodes as $key => $widget ){
if( $widget['pro'] != true ) {
$shortcode_name = !$shortcode_emty_stat ? str_replace( "-", "_", $key ) : $key;
if( !empty( $aiea_shortcodes ) ){
if( isset( $aiea_shortcodes[$shortcode_name] ) ){
$saved_val = true;
}else{
$saved_val = false;
}
}else{
$saved_val = false;
}
if( $saved_val ){
require_once( AIEA_DIR . 'includes/widgets/'. esc_attr( $key ) .'.php' );
$widget_class = 'Elementor\\'. aiea_addon_base()->make_widget_class_name( $widget['title'] );
if ( class_exists( $widget_class ) ) {
$widgets_manager->register( new $widget_class() );
}
}
}
}
}
public function register_controls( $controls_manager ) {
// Register ai addon custom controls
aiea_addon_base()->register_controls( $controls_manager );
}
public function custom_icons( $icon_fonts ){
return aiea_addon_base()->icon_fonts( $icon_fonts );
}
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
}
AIEA_Extension::instance();