i18n(); require_once plugin_dir_path( __FILE__ ) . '/admin/settings-page.php'; $this->settings = new AR_Model_Viewer_Settings_Page(self::PLUGIN_SLUG); $this->renderer = new AR_Model_Viewer_Renderer($this->settings); if (is_admin()) { add_filter( 'upload_mimes', [$this, 'my_theme_custom_upload_mimes'] ); require_once plugin_dir_path( __FILE__ ) . '/admin/ar-model-viewer-admin.php'; new AR_Model_Viewer_Admin(); } else { add_action('template_redirect', function () { require_once plugin_dir_path( __FILE__ ) . '/public/ar-model-viewer-public.php'; new AR_Model_Viewer_Public($this); }); } add_action('plugins_loaded', [$this, 'load_elementor_widget']); } /** * Load Textdomain * * Load plugin localization files. * * Fired by `init` action hook. * * @since 1.0.0 * * @access public */ public function i18n() { load_plugin_textdomain( 'ar-model-viewer' ); } public function load_elementor_widget() { if ($this->is_compatible()) { add_action('elementor/init', [$this, 'init_elementor']); } } public function init_elementor() { // Add Plugin actions add_action( 'elementor/widgets/widgets_registered', [ $this, 'init_widgets' ] ); add_action( 'elementor/controls/controls_registered', [ $this, 'init_controls' ] ); // Register Widget Styles add_action( 'elementor/frontend/after_enqueue_styles', [ $this, 'widget_styles' ] ); // Register Widget Scripts add_action( 'elementor/frontend/after_register_scripts', [ $this, 'widget_scripts' ] ); } /** * Init Widgets * * Include widgets files and register them * * @since 1.0.0 * * @access public */ public function init_widgets() { // Include Widget files require_once(__DIR__ . '/widgets/viewer.php'); // Register widget $widget = new \AR_ModelViewer_Widget(); \Elementor\Plugin::instance()->widgets_manager->register($widget); } function my_theme_custom_upload_mimes($existing_mimes) { // Add webm to the list of mime types. $existing_mimes['glb'] = 'application/octet-stream'; // $existing_mimes['usdz'] = 'model/vnd.usdz+zip'; $existing_mimes['usdz'] = 'application/zip'; // Return the array back to the function with our added mime type. return $existing_mimes; } /** * Compatibility Checks * * Checks if the installed version of Elementor meets the plugin's minimum requirement. * Checks if the installed PHP version meets the plugin's minimum requirement. * * @since 1.0.0 * * @access public */ public function is_compatible() { // Check if Elementor installed and activated if (!did_action('elementor/loaded')) { // add_action('admin_notices', [$this, 'admin_notice_missing_main_plugin']); return false; } // Check for required Elementor version if (!version_compare(ELEMENTOR_VERSION, self::MINIMUM_ELEMENTOR_VERSION, '>=')) { // add_action('admin_notices', [$this, 'admin_notice_minimum_elementor_version']); return false; } // Check for required PHP version if (version_compare(PHP_VERSION, self::MINIMUM_PHP_VERSION, '<')) { // add_action('admin_notices', [$this, 'admin_notice_minimum_php_version']); return false; } return true; } /** * Init Styles * * @since 1.0.0 * * @access public */ public function widget_styles() { // EXAMPLES // wp_enqueue_style( 'widget-1', plugins_url( 'css/widget-1.css', __FILE__ ) ); // wp_enqueue_style( 'widget-2', plugins_url( 'css/widget-2.css', __FILE__ ) ); wp_enqueue_style('AR Model Configurator', plugins_url('../css/elementor-widget.css', __FILE__)); } /** * Init Scripts * * @since 1.0.0 * * @access public */ public function widget_scripts() { } /** * Init Controls * * Include controls files and register them * * @since 1.0.0 * * @access public */ public function init_controls() { // Include Widget files require_once(__DIR__ . '/admin/controls/fileselect-control.php'); // Register controls \Elementor\Plugin::$instance->controls_manager->register_control('file-select', new \FileSelect_Control()); } } AR_Model_Viewer::instance();