HEX
Server: Apache
System: Linux 244.240.109.208.host.secureserver.net 5.14.0-611.11.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Dec 3 09:47:37 EST 2025 x86_64
User: icsla (1002)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: /home/icsla/public_html/wp-content/plugins/embed-calendly-scheduling/includes/dynamic-embedder.php
<?php

// Exit if accessed directly
defined('ABSPATH') || exit;

/**
 * Renders dynamic embedder shortcode
 */
class EMCS_Dynamic_Embedder
{
    private $atts = array();
    private $events = array();

    public function __construct($atts = [])
    {
        $this->atts = $atts;

        if (!class_exists('EMCS_Event_Types')) {
            include_once(EMCS_EVENT_TYPES . 'event-types.php');
        }

        $events = EMCS_Event_Types::get_event_types();

        if (!empty($events) && is_array($events)) {
            $this->events = $events;
        }
    }

    private function enqueue_assets()
    {

        wp_enqueue_script(
            'emcs-dynamic-embedder',
            EMCS_URL . 'assets/js/dynamic-embedder.js',
            [],
            filemtime(EMCS_DIR . 'assets/js/dynamic-embedder.js'),
            true
        );

        wp_register_style(
            'emcs-dynamic-embedder',
            false,
            [],
            filemtime(__FILE__)
        );

        wp_enqueue_style('emcs-dynamic-embedder');

        wp_localize_script(
            'emcs-dynamic-embedder',
            'emcsDynamic',
            [
                'formHeight' => !empty($this->atts['form_height']) ? $this->atts['form_height'] : '400px'
            ]
        );

        $css = "

        .emcs-dynamic-wrapper {
            display:block;
        }

        .emcs-event-buttons {
            margin-bottom:20px;
        }

        .emcs-event-button {
            cursor:pointer;
            margin-right:10px;
            margin-bottom:10px;
            padding:8px 14px;
        }

        .emcs-event-display {
            min-width:320px;
        }

        ";

        wp_add_inline_style('emcs-dynamic-embedder', $css);
    }

    /**
     * Render embedder
     */
    public function render()
    {

        if (empty($this->events)) {
            return esc_html__('No Calendly event types found.', 'embed-calendly-scheduling');
        }

        // enqueue only when rendering
        $this->enqueue_assets();

        $form_height = !empty($this->atts['form_height'])
            ? intval($this->atts['form_height']) . 'px'
            : '400px';

        $cookie_banner = !empty($this->atts['hide_cookie_banner'])
            ? intval($this->atts['hide_cookie_banner'])
            : 0;

        ob_start();
?>
        <div class="emcs-dynamic-wrapper">
            <?php if (count($this->events) > 1): ?>
                <div class="emcs-event-buttons">

                    <?php

                    foreach ($this->events as $event):

                        $name = !empty($event->name) ? sanitize_text_field($event->name) : '';
                        $url  = !empty($event->url) ? esc_url($event->url) : '';

                        if (empty($url)) continue;

                    ?>

                        <button
                            class="emcs-event-button"
                            data-event-url="<?php echo esc_attr($url); ?>"
                            data-form-height="<?php echo esc_attr($form_height); ?>"
                            data-hide-cookie="<?php echo esc_attr($cookie_banner); ?>">

                            <?php echo esc_html($name); ?>

                        </button>

                    <?php endforeach; ?>
                </div>
            <?php endif; ?>
            <div class="emcs-event-display">

                <?php

                $first_event = reset($this->events);

                if (!empty($first_event->url)) {

                    $shortcode = sprintf(
                        '[calendly url="%s" type="1" form_height="%s" hide_cookie_banner="%d"]',
                        esc_url($first_event->url),
                        esc_attr($form_height),
                        esc_attr($cookie_banner)
                    );

                    echo do_shortcode($shortcode);
                }

                ?>
            </div>
        </div>

<?php
        return ob_get_clean();
    }
}