plugin_name = $plugin_name; $this->version = $version; } public function enqueue_scripts() { $options = get_option('accelvia_connect_buttons', array()); if (!empty($options) && !empty($options['buttons'])) { wp_enqueue_style($this->plugin_name, plugin_dir_url(dirname(__FILE__)) . 'public/css/accelvia-connect-public.css', array(), $this->version, 'all'); wp_enqueue_script($this->plugin_name, plugin_dir_url(dirname(__FILE__)) . 'public/js/accelvia-connect-public.js', array(), $this->version, true); // Enqueue dotLottie player if any button uses Lottie $needs_lottie = false; foreach ($options['buttons'] as $btn) { if (!empty($btn['lottie_url'])) { $needs_lottie = true; break; } } if ($needs_lottie) { wp_enqueue_script('dotlottie-player', plugin_dir_url(dirname(__FILE__)) . 'public/js/dotlottie-player.js', array(), '2.7.12', true); } // Dynamic button size styles $button_size = isset($options['global']['button_size']) ? intval($options['global']['button_size']) : 60; if ($button_size !== 60) { $svg_size = max(16, round($button_size * 0.4)); $offset = $button_size + 15; $size_css = ".ac-button svg { width: {$svg_size}px; height: {$svg_size}px; }"; $size_css .= " .ac-button-label { right: {$offset}px; }"; $size_css .= " .ac-position-left .ac-button-label { right: auto; left: {$offset}px; }"; $size_css .= " .ac-greeting-bubble { right: {$offset}px; }"; $size_css .= " .ac-position-left .ac-greeting-bubble { right: auto; left: {$offset}px; }"; wp_add_inline_style($this->plugin_name, $size_css); } } } public function render_buttons() { $options = get_option('accelvia_connect_buttons', array()); if (empty($options) || empty($options['buttons'])) { return; } // Smart Visibility Check $visibility = isset($options['global']['visibility']) ? $options['global']['visibility'] : 'everywhere'; if ($visibility === 'homepage' && !is_front_page()) { return; } elseif ($visibility === 'exclude_pages') { $exclude_pages = isset($options['global']['exclude_pages']) ? explode(',', $options['global']['exclude_pages']) : array(); $exclude_pages = array_map('trim', $exclude_pages); if (is_page($exclude_pages) || is_single($exclude_pages)) { return; // Hide on these specific pages } } // Global Business Hours Check $business_enabled = isset($options['global']['business_hours_enabled']) && $options['global']['business_hours_enabled'] === '1'; if ($business_enabled) { $start_time = isset($options['global']['business_hours_start']) ? $options['global']['business_hours_start'] : '09:00'; $end_time = isset($options['global']['business_hours_end']) ? $options['global']['business_hours_end'] : '17:00'; $days = isset($options['global']['business_hours_days']) && is_array($options['global']['business_hours_days']) ? $options['global']['business_hours_days'] : array(); $current_time = current_time('H:i'); $current_day = strtolower(current_time('D')); if (!in_array($current_day, $days) || $current_time < $start_time || $current_time > $end_time) { return; // Outside business hours, do not render any buttons } } // Localize JS configuration $trigger_type = isset($options['global']['trigger_type']) ? $options['global']['trigger_type'] : 'immediate'; $trigger_value = isset($options['global']['trigger_value']) ? $options['global']['trigger_value'] : 0; $analytics_ga4 = isset($options['global']['analytics_ga4']) && $options['global']['analytics_ga4'] === '1'; $analytics_meta = isset($options['global']['analytics_meta']) && $options['global']['analytics_meta'] === '1'; wp_localize_script($this->plugin_name, 'accelviaConnectData', array( 'trigger' => $trigger_type, 'triggerValue' => $trigger_value, 'ga4' => $analytics_ga4, 'meta' => $analytics_meta )); require_once plugin_dir_path(dirname(__FILE__)) . 'public/views/buttons-view.php'; } }