File "Frontend.php"

Full path: /home/dora/public_html/wp-content/plugins/bricksforge/includes/Frontend.php
File size: 11.04 KB
MIME-type: --
Charset: utf-8

<?php

namespace Bricksforge;

/**
 * Frontend Pages Handler
 */
class Frontend
{

    public function __construct()
    {

        $this->render_conditionals();

        wp_enqueue_style('bricksforge-style');
        wp_enqueue_style('bricksforge-style');

        if (bricks_is_builder()) {
            wp_enqueue_style('bricksforge-frontend');
            wp_enqueue_script('bricksforge-frontend');
        }

        add_shortcode('bricksforge', [$this, 'render_frontend']);
    }

    public function render_conditionals()
    {

        // Panel
        if (get_option('brf_activated_tools') && in_array(6, get_option('brf_activated_tools'))) {
            $panel_data = get_option('brf_panel');

            if (bricks_is_builder()) {
                wp_enqueue_script('bricksforge-panel');
                wp_enqueue_script('brf_gsap_draggable');
                wp_enqueue_script('brf_gsap_splittext');
                wp_enqueue_script('brf_gsap_flip');
            }

            if ($panel_data) {

                $panel_data = $panel_data[0];

                $instances = isset($panel_data->instances) ? $panel_data->instances : false;
                $timelines = isset($panel_data->timelines) ? $panel_data->timelines : false;

                if ($timelines) {
                    wp_enqueue_script('bricksforge-panel');
                    wp_enqueue_script('brf_gsap');

                    // Check if $timelines contains an item on which the key "trigger" is equal to "scrollTrigger". If so, return true
                    $has_scrollTrigger = array_filter($timelines, function ($timeline) {
                        return isset($timeline->trigger) && $timeline->trigger == 'scrollTrigger';
                    });

                    // Check if $timelines array "animations" contains an item on which the key "splitText" is equal to "true". If so, return true
                    $has_splitText = array_filter($timelines, function ($timeline) {
                        return array_filter(
                            $timeline->animations,
                            function ($animation) {
                                return isset($animation->splitText) && $animation->splitText == 'true';
                            }
                        );
                    });

                    if ($has_scrollTrigger) {
                        wp_enqueue_script('brf_gsap_scrolltrigger');
                    }

                    if ($has_splitText) {
                        wp_enqueue_script('brf_gsap_splittext');
                    }
                }

                if ($instances) {
                    wp_enqueue_script('bricksforge-panel');

                    // Check if $instances array "actions" contains an object 'action" on which the key "value" is equal to "gsapFlip". If so, return true
                    $has_gsapFlip = array_filter($instances, function ($instance) {
                        return array_filter(
                            $instance->actions,
                            function ($action) {
                                return isset($action->action->value) && $action->action->value == 'gsapFlip';
                            }
                        );
                    });

                    // Check if $instances array "actions" contains an object 'action" on which the key "value" is equal to "gsapSet". If so, return true
                    $has_gsapSet = array_filter($instances, function ($instance) {
                        return array_filter(
                            $instance->actions,
                            function ($action) {
                                return isset($action->action->value) && $action->action->value == 'gsapSet';
                            }
                        );
                    });

                    // Check if $instances array "actions" contains an object 'action" on which the key "value" is equal to "gsap". If so, return true
                    $has_gsap = array_filter($instances, function ($instance) {
                        return array_filter(
                            $instance->actions,
                            function ($action) {
                                return isset($action->action->value) && $action->action->value == 'gsap';
                            }
                        );
                    });

                    if ($has_gsapSet || $has_gsap) {
                        wp_enqueue_script('brf_gsap');
                    }

                    if ($has_gsapFlip) {
                        wp_enqueue_script('brf_gsap_flip');
                    }
                }
            }
        }

        if (get_option('brf_activated_tools') && in_array(1, get_option('brf_activated_tools'))) {
            add_action('wp_enqueue_scripts', function () {
                wp_localize_script(
                    'bricksforge-animator',
                    'BRFANIMATIONS',
                    array(
                        'nonce'             => wp_create_nonce('wp_rest'),
                        'siteurl'           => get_option('siteurl'),
                        'pluginurl'         => BRICKSFORGE_URL,
                        'apiurl'            => get_rest_url() . "bricksforge/v1/",
                        "pageData"          => \Bricks\Database::get_data(),
                        'bricksPrefix'      => BRICKSFORGE_BRICKS_ELEMENT_PREFIX,
                        'breakpoints'       => \Bricks\Breakpoints::$breakpoints,
                        'panel'             => get_option('brf_panel'),
                        'panelActivated'    => get_option('brf_activated_tools') && in_array(6, get_option('brf_activated_tools')),
                        'megaMenuActivated' => get_option('brf_activated_tools') && in_array(3, get_option('brf_activated_tools'))
                    )
                );
            });
        }

        if (get_option('brf_activated_tools') && in_array(5, get_option('brf_activated_tools')) && get_option('brf_popups') && count(get_option('brf_popups')) > 0) {
            wp_enqueue_script('bricksforge-popups');
            add_action('wp_enqueue_scripts', function () {
                wp_localize_script(
                    'bricksforge-popups',
                    'BRFPOPUPS',
                    array(
                        'nonce'       => wp_create_nonce('wp_rest'),
                        'popups'      => get_option('brf_popups'),
                        'apiurl'      => get_rest_url() . "bricksforge/v1/",
                        'currentPage' => get_the_ID()
                    )
                );
            });
        }

        // Scroll Smoother

        if (get_option('brf_activated_tools') && in_array(7, get_option('brf_activated_tools'))) {

            $scrollsmooth_provider = 'gsap';

            $scrollsmooth_settings = get_option('brf_tool_settings');

            if ($scrollsmooth_settings) {
                // Get the scrollsmooth settings with the key id equal to 7
                $scrollsmooth_settings = array_filter($scrollsmooth_settings, function ($setting) {
                    return $setting->id == 7;
                });

                if ($scrollsmooth_settings) {
                    $scrollsmooth_settings = $scrollsmooth_settings[0];
                    $scrollsmooth_provider = isset($scrollsmooth_settings->settings->provider) ? $scrollsmooth_settings->settings->provider : 'gsap';
                }
            }

            if (!$scrollsmooth_provider) {
                $scrollsmooth_provider = 'gsap';
            }

            switch ($scrollsmooth_provider) {
                case 'gsap':
                    wp_enqueue_script('brf_gsap_scrollsmoother');

                    // Wrap needed container IDs
                    add_action('bricks_before_site_wrapper', function () {
                        echo '<div id="smooth-wrapper">';
                        echo '<div id="smooth-content">';
                    });
                    add_action('bricks_after_site_wrapper', function () {
                        echo '</div>';
                        echo '</div>';
                    });
                    break;
                case 'lenis':
                    wp_enqueue_script('bricksforge-lenis');
                    break;
                default:
                    break;
            }

            wp_enqueue_script('bricksforge-scrollsmoother');
            add_action('wp_enqueue_scripts', function () {
                $args = array(
                    'toolSettings' => get_option('brf_tool_settings')
                );

                wp_localize_script('bricksforge-scrollsmoother', 'BRFSCROLLSMOOTHER', $args);
            });
        }

        // Global Vars
        add_action('wp_enqueue_scripts', function () {
            $args = array(
                'nonce'                     => wp_create_nonce('wp_rest'),
                'siteurl'                   => get_option('siteurl'),
                'pluginurl'                 => BRICKSFORGE_URL,
                'apiurl'                    => get_rest_url() . "bricksforge/v1/",
                'globalClasses'             => get_option('bricks_global_classes'),
                'globalClassesLocked'       => get_option('bricks_global_classes_locked'),
                'brfGlobalClassesActivated' => get_option('brf_global_classes_activated'),
                'brfActivatedTools'         => get_option('brf_activated_tools'),
                "pageData"                  => \Bricks\Database::get_data(),
                'bricksPrefix'              => BRICKSFORGE_BRICKS_ELEMENT_PREFIX,
                'breakpoints'               => \Bricks\Breakpoints::$breakpoints,
                'icons'                     => \Bricks\Builder::get_icon_font_classes(),
                'permissions'               => get_option('brf_permissions_roles'),
                'panel'                     => get_option('brf_panel'),
                'panelActivated'            => get_option('brf_activated_tools') && in_array(6, get_option('brf_activated_tools')),
                'megaMenuActivated'         => get_option('brf_activated_tools') && in_array(3, get_option('brf_activated_tools')),
                'headerData'                => \Bricks\Database::get_template_data('header'),
                'currentUserRole'           => bricks_is_builder() ? $this->get_current_user_role() : '',
                'toolSettings'              => get_option('brf_tool_settings')
            );

            wp_localize_script('bricksforge-panel', 'BRFVARS', $args);
        });
    }

    public function get_current_user_role()
    {
        global $current_user;

        $user_roles = $current_user->roles;
        $user_role = array_shift($user_roles);

        return $user_role;
    }

    /**
     * Render frontend app
     *
     * @param  array $atts
     * @param  string $content
     *
     * @return string
     */
    public function render_frontend($atts, $content = '')
    {
        wp_enqueue_style('bricksforge-frontend');
        wp_enqueue_style('bricksforge-style');
        wp_enqueue_script('bricksforge-frontend');

        $content .= '<div id="bricksforge-triggers"></div>';

        return $content;
    }
}