add_action( 'after_uninstall', [ $this, 'uninstall' ] ); } /** * Add plugin meta * * @param $links * @param $file * * @return array|mixed */ public function plugin_row_meta( $links, $file ) { if ( strpos( $file, 'advanced-fields-for-elementor-forms.php' ) !== false ) { $row_meta['docs'] = sprintf( /** @lang text */ '%2$s', esc_url( DOCUMENTATION ), esc_html__( 'Docs', 'advanced-fields-for-elementor-forms' ) ); $row_meta['settings'] = sprintf( /** @lang text */ '%2$s', admin_url( 'admin.php?page=advanced-fields-for-elementor-forms-settings' ), esc_html__( 'Settings', 'advanced-fields-for-elementor-forms' ) ); $row_meta['support'] = sprintf( /** @lang text */ '%2$s', esc_url( SUPPORT ), esc_html__( 'Help & Support', 'advanced-fields-for-elementor-forms' ) ); $links = array_merge( $links, $row_meta ); } return $links; } /** * Function used to deactivate the plugin if "elementor pro" does not exist * * @return bool */ public function is_elementor_pro_exist(): bool { if ( is_plugin_active( 'elementor-pro/elementor-pro.php' ) ) { return true; } // If neither plugin is active, show an admin notice. add_action( 'admin_notices', [ $this, 'admin_notice_missing_required_plugin' ] ); return false; } /** * Show notice to enable Elementor Pro * @return void */ public function admin_notice_missing_required_plugin(): void { $message = sprintf( // translators: %1$s replace with "Advanced Fields For Elementor Forms" & %2$s replace with "Elementor Pro". esc_html__( '%1$s requires %2$s to be installed and activated.', 'advanced-fields-for-elementor-forms' ), esc_html__( 'Advanced Fields For Elementor Forms', 'advanced-fields-for-elementor-forms' ), esc_html__( 'Elementor Pro', 'advanced-fields-for-elementor-forms' ), ); printf( '

%1$s

', esc_html( $message ) ); deactivate_plugins( 'advanced-fields-for-elementor-forms/advanced-fields-for-elementor-forms.php' ); } /** * Hooked into the 'activated_plugin' action to redirect to the settings page when the plugin is activated. * * @param $plugin * * @return void */ public function activated( $plugin ): void { if ( ! is_plugin_active( 'elementor-pro/elementor-pro.php' ) ) { return; } if ( $plugin === 'advanced-fields-for-elementor-forms/advanced-fields-for-elementor-forms.php' ) { // Redirect to settings page $settingsPageUrl = add_query_arg( [ 'page' => 'advanced-fields-for-elementor-forms-settings', ], admin_url( 'admin.php' ) ); wp_safe_redirect( $settingsPageUrl ); exit(); } } /** * Registers the REST API routes * * @return void */ public function rest_api_init(): void { new SettingsRoute(); new DropzoneRoute(); } public function register_field_scripts( string $handle ): void { $assets = require PLUGIN_DIR_PATH . 'build/fields/' . $handle . '/index.asset.php'; wp_register_style( PREFIX . $handle, PLUGIN_DIR_URL . 'build/fields/' . $handle . '/index.css', [], $assets['version'], ); wp_register_script( PREFIX . $handle, PLUGIN_DIR_URL . 'build/fields/' . $handle . '/index.js', $assets['dependencies'], $assets['version'], [ 'strategy' => 'defer' ] ); } /** * Filters the form template content before it's printed in the editor. * @param $template_content * @param $widget * * @return array|mixed|string|string[] */ public function print_template( $template_content, $widget ) { /** @var Form $widget */ if ( $widget->get_name() === 'form' ) { return ''; } return $template_content; } /** * After editor enqueue scripts. * * Fires after Elementor editor scripts are enqueued. */ public function editor_enqueue_scripts(): void { wp_enqueue_script( PREFIX . 'repeater-control', PLUGIN_DIR_URL . 'build/controls/repeater/index.js', [ 'elementor-editor' ], VERSION, true ); } /** * Fires when scripts and styles are enqueued. * @return void */ public function enqueue_scripts(): void { if ( ! wp_script_is( 'react-jsx-runtime', 'registered' ) ) { wp_register_script( 'react-jsx-runtime', PLUGIN_DIR_URL . 'assets/js/react-jsx-runtime.js', [ 'react' ], '18.3.1', true ); } $settingsModel = SettingsModel::getInstance(); $fields = $settingsModel->getFieldsInfo(); foreach ( $fields as $field ) { if ( $field['dirname'] ) { $this->register_field_scripts( $field['dirname'] ); } } } /** * Elementor Pro form fields registration. * @param Form_Fields_Registrar $formFieldsRegistrar * * @return void */ public function register_fields( Form_Fields_Registrar $formFieldsRegistrar ): void { $settingsModel = SettingsModel::getInstance(); $fields = $settingsModel->getFieldsInfo(); foreach ( $fields as $field ) { if ( $field['dirname'] ) { $classFilePath = PLUGIN_DIR_PATH . 'includes/Fields/' . $field['dirname'] . '/Field.php'; $className = "\\HulkPlugins\\ElementorPro\\Forms\\AdvancedFields\\Fields\\{$field['dirname']}\\Field"; if ( class_exists( $className ) && file_exists( $classFilePath ) ) { $formFieldsRegistrar->register( new $className( $field ) ); } } } } /** * Register dynamic tags. * * @param Manager $manager * * @return void */ public function register_dynamic_tags( Manager $manager ): void { } /** * Fires just before PHP shuts down execution. * @return void */ public function shutdown(): void { FileUtil::cleanup_upload_files(); } /** * Freemius uninstall hook * @return void */ public function uninstall(): void { // Cleanup SettingsModel::getInstance()->deleteSettings(); FileUtil::remove_upload_dir(); // Check if Elementor is loaded if ( did_action( 'elementor/loaded' ) ) { // Clear Elementor cache Plugin::instance()->files_manager->clear_cache(); } } }