/** * Plugin Name: Elementor Form Corretor * Description: Gerenciamento de corretores com formulários personalizados do Elementor * Version: 1.0.0 * Author: Seu Nome * Text Domain: elementor-form-corretor */ // Evitar acesso direto ao arquivo if (!defined('ABSPATH')) { exit; } // Definições do plugin define('EFC_VERSION', '1.0.0'); define('EFC_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('EFC_PLUGIN_URL', plugin_dir_url(__FILE__)); define('EFC_PLUGIN_BASENAME', plugin_basename(__FILE__)); /** * Classe principal do plugin */ class Elementor_Form_Corretor { /** * Instância única da classe (padrão Singleton) */ private static $instance = null; /** * Obtém a instância única da classe */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * Construtor da classe */ private function __construct() { // Carrega as dependências $this->load_dependencies(); // Registra hooks de ativação/desativação register_activation_hook(__FILE__, array($this, 'activate')); register_deactivation_hook(__FILE__, array($this, 'deactivate')); // Inicializa componentes add_action('plugins_loaded', array($this, 'init')); } /** * Carrega as dependências do plugin */ private function load_dependencies() { // Classes principais require_once EFC_PLUGIN_DIR . 'includes/class-database.php'; require_once EFC_PLUGIN_DIR . 'includes/class-form-handler.php'; require_once EFC_PLUGIN_DIR . 'includes/class-corretor-manager.php'; // Widget do Elementor require_once EFC_PLUGIN_DIR . 'widgets/class-form-widget.php'; // Funções auxiliares require_once EFC_PLUGIN_DIR . 'includes/helpers.php'; } /** * Inicializa o plugin */ public function init() { // Verifica se o Elementor está ativo if (!did_action('elementor/loaded')) { add_action('admin_notices', array($this, 'elementor_missing_notice')); return; } // Carrega traduções load_plugin_textdomain('elementor-form-corretor', false, dirname(EFC_PLUGIN_BASENAME) . '/languages'); // Inicializa banco de dados EFC_Database::get_instance(); // Inicializa gerenciador de corretores EFC_Corretor_Manager::get_instance(); // Registra widget do Elementor add_action('elementor/widgets/register', array($this, 'register_widgets')); // Carrega assets add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets')); add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets')); // Inicializa gerenciador de formulários EFC_Form_Handler::get_instance(); // Adiciona menu administrativo add_action('admin_menu', array($this, 'add_admin_menu')); // Adiciona shortcodes $this->register_shortcodes(); } /** * Registra widgets do Elementor */ public function register_widgets($widgets_manager) { $widgets_manager->register(new EFC_Form_Widget()); } /** * Registra shortcodes */ private function register_shortcodes() { add_shortcode('efc_login_form', array($this, 'login_form_shortcode')); add_shortcode('efc_corretor_panel', array($this, 'corretor_panel_shortcode')); } /** * Shortcode para formulário de login */ public function login_form_shortcode($atts) { ob_start(); include EFC_PLUGIN_DIR . 'templates/frontend/login.php'; return ob_get_clean(); } /** * Shortcode para painel do corretor */ public function corretor_panel_shortcode($atts) { if (!is_user_logged_in()) { return '
' . __('Você precisa estar logado para acessar este painel.', 'elementor-form-corretor') . '
'; } ob_start(); include EFC_PLUGIN_DIR . 'templates/frontend/painel.php'; return ob_get_clean(); } /** * Enfileira assets do frontend */ public function enqueue_frontend_assets() { wp_enqueue_style( 'efc-frontend-css', EFC_PLUGIN_URL . 'assets/css/frontend.css', array(), EFC_VERSION ); wp_enqueue_script( 'efc-frontend-js', EFC_PLUGIN_URL . 'assets/js/frontend.js', array('jquery'), EFC_VERSION, true ); wp_localize_script('efc-frontend-js', 'efcData', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('efc-nonce') )); } /** * Enfileira assets do admin */ public function enqueue_admin_assets($hook) { // Carrega apenas nas páginas do plugin if (strpos($hook, 'efc-') === false) { return; } wp_enqueue_style( 'efc-admin-css', EFC_PLUGIN_URL . 'assets/css/admin.css', array(), EFC_VERSION ); wp_enqueue_script( 'efc-admin-js', EFC_PLUGIN_URL . 'assets/js/admin.js', array('jquery'), EFC_VERSION, true ); wp_localize_script('efc-admin-js', 'efcAdminData', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('efc-admin-nonce') )); } /** * Adiciona menu administrativo */ public function add_admin_menu() { add_menu_page( __('Gerenciador de Corretores', 'elementor-form-corretor'), __('Corretores', 'elementor-form-corretor'), 'manage_options', 'efc-corretores', array($this, 'render_corretores_page'), 'dashicons-businessman', 30 ); add_submenu_page( 'efc-corretores', __('Todos os Corretores', 'elementor-form-corretor'), __('Todos os Corretores', 'elementor-form-corretor'), 'manage_options', 'efc-corretores', array($this, 'render_corretores_page') ); add_submenu_page( 'efc-corretores', __('Pendentes', 'elementor-form-corretor'), __('Pendentes', 'elementor-form-corretor'), 'manage_options', 'efc-pendentes', array($this, 'render_pendentes_page') ); add_submenu_page( 'efc-corretores', __('Configurações', 'elementor-form-corretor'), __('Configurações', 'elementor-form-corretor'), 'manage_options', 'efc-settings', array($this, 'render_settings_page') ); } /** * Renderiza página de corretores */ public function render_corretores_page() { include EFC_PLUGIN_DIR . 'templates/admin/corretores.php'; } /** * Renderiza página de pendentes */ public function render_pendentes_page() { include EFC_PLUGIN_DIR . 'templates/admin/pendentes.php'; } /** * Renderiza página de configurações */ public function render_settings_page() { include EFC_PLUGIN_DIR . 'templates/admin/settings.php'; } /** * Exibe aviso quando o Elementor não está instalado/ativado */ public function elementor_missing_notice() { if (isset($_GET['activate'])) { unset($_GET['activate']); } $message = sprintf( __('O plugin %1$s requer o %2$s para funcionar corretamente.', 'elementor-form-corretor'), 'Elementor Form Corretor', 'Elementor Page Builder' ); printf('%s