<?php class OsElementorHelper { private static ?OsElementorHelper $_instance = null; public static string $category = "latepoint_builder"; private string $min_elementor_version = '3.5.0'; private string $min_php_version = '7.0'; private array $widgets = [ 'book_button', 'list_of_resources', 'customer_login', 'customer_dashboard', 'calendar', 'book_form', ]; /** * Instance * Ensures only one instance of the class is loaded or can be loaded. */ public static function init(): OsElementorHelper { if ( is_null(self::$_instance)) { self::$_instance = new self(); } return self::$_instance; } public function __construct() { if ( $this->check_requirements() ) { add_action( 'elementor/elements/categories_registered', [ $this, 'register_widgets_category' ] ); add_action( 'elementor/widgets/register', [ $this, 'register_widgets' ] ); } } /** * Check requirements for php and elementor * @return bool */ private function check_requirements(): bool { // Check if Elementor installed and activated if ( ! did_action( 'elementor/loaded' ) ) { return false; } if ( ! $this->check_php_version() ) { add_action( 'admin_notices', [ $this, 'php_version_error' ] ); return false; } if ( ! $this->check_elementor_version() ) { add_action( 'admin_notices', [ $this, 'elementor_version_error' ] ); return false; } return true; } private function check_php_version(): bool { return version_compare( PHP_VERSION, $this->min_php_version, '>=' ); } private function check_elementor_version(): bool { if ( ! defined( 'ELEMENTOR_VERSION' ) ) { return false; } return version_compare( ELEMENTOR_VERSION, $this->min_elementor_version, '>=' ); } private function php_version_error(): void { $message = esc_html__( 'Theme requires PHP version', 'latepoint' ) . ' <strong>' . $this->min_php_version . '</strong> ' . esc_html__( 'or greater.', 'latepoint' ); printf( '<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>', $message ); } private function elementor_version_error(): void { $message = esc_html__( 'Theme requires Elementor version', 'latepoint' ) . ' <strong>' . $this->min_elementor_version . '</strong> ' . esc_html__( 'or greater.', 'latepoint' ); printf( '<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>', $message ); } /** * @return array */ private function get_data_for_blocks(): array { $result = []; $localized_vars = OsBlockHelper::localized_vars_for_blocks(); $result['selected_agents_options'] = $this->prepare_data_for_select($localized_vars['selected_agents_options']); $result['selected_services_options'] = $this->prepare_data_for_select($localized_vars['selected_services_options']); $result['selected_service_categories_options'] = $this->prepare_data_for_select($localized_vars['selected_service_categories_options']); $result['selected_locations_options'] = $this->prepare_data_for_select($localized_vars['selected_locations_options']); $result['selected_bundles_options'] = $this->prepare_data_for_select($localized_vars['selected_bundles_options']); $result['services'] = array_column($localized_vars['services'], 'name', 'id'); $result['agents'] = array_column($localized_vars['agents'], 'name', 'id');; $result['locations'] = array_column($localized_vars['locations'], 'name', 'id'); $result['location_categories'] = OsLocationHelper::get_location_categories(); $result['service_categories'] = array_column($localized_vars['service_categories'], 'name', 'id'); $result['bundles'] = array_column($localized_vars['bundles'], 'name', 'id'); return $result; } private function prepare_data_for_select( array $options ): array { return array_column($options, 'label', 'value'); } /** * Init Widgets - Include widgets files and register them */ public function register_widgets(): void { $data_for_blocks = $this->get_data_for_blocks(); foreach ( $this->widgets as $widget ) { $path = LATEPOINT_ABSPATH . 'blocks/elementor/elementor_widget_' . $widget . '.php'; if ( file_exists( $path ) ) { include_once( $path ); # class name should be in format: Latepoint_Elementor_Widget_Book_Button $class_name = 'Latepoint_Elementor_Widget_' . str_replace( [ '-', ' ' ], [ '_', '_' ], ucfirst( $widget ) ); if ( class_exists( $class_name ) ) { \Elementor\Plugin::instance()->widgets_manager->register( new $class_name([], $data_for_blocks) ); } } } } /** * Register Widgets Category * * @param $elements_manager * * @return void */ public function register_widgets_category( $elements_manager ): void { $elements_manager->add_category( self::$category, [ 'title' => __( 'Latepoint', 'latepoint' ), 'icon' => 'fa fa-plug', ] ); } }