plugin_file = $plugin_file; $this->version = $version; $this->plugin_dir = plugin_dir_path($plugin_file); $this->plugin_url = plugin_dir_url($plugin_file); $this->define_constants(); $this->register_autoloader(); $this->load_dependencies(); $this->init_components(); } /** * Define plugin constants * * @return void */ private function define_constants() { if (!defined('FPDEN_VERSION')) { define('FPDEN_VERSION', $this->version); } if (!defined('FPDEN_PLUGIN_DIR')) { define('FPDEN_PLUGIN_DIR', $this->plugin_dir); } if (!defined('FPDEN_PLUGIN_URL')) { define('FPDEN_PLUGIN_URL', $this->plugin_url); } } /** * Register the PSR-4 autoloader * * Maps plugin namespaces to their corresponding directories so that * new class files are loaded automatically without manual require_once calls. * * @return void */ private function register_autoloader() { $plugin_dir = $this->plugin_dir; spl_autoload_register(function ($class) use ($plugin_dir) { // Ordered most-specific prefix first so Admin\ resolves before the root namespace. $namespace_map = array( 'WPALLSTARS\\FixPluginDoesNotExistNotices\\Admin\\' => $plugin_dir . 'admin/lib/', 'WPALLSTARS\\FixPluginDoesNotExistNotices\\' => $plugin_dir . 'includes/', ); foreach ($namespace_map as $prefix => $base_dir) { if (strncmp($prefix, $class, strlen($prefix)) !== 0) { continue; } $relative_class = substr($class, strlen($prefix)); $file = $base_dir . str_replace('\\', DIRECTORY_SEPARATOR, $relative_class) . '.php'; if (file_exists($file)) { require_once $file; return; } } }); } /** * Load dependencies * * Loads the Composer autoloader when available (vendor installs). Project * classes are resolved by the PSR-4 autoloader registered in register_autoloader(). * * @return void */ private function load_dependencies() { // Load composer autoloader if it exists (vendor/ directory present). $autoloader = $this->plugin_dir . 'vendor/autoload.php'; if (file_exists($autoloader)) { require_once $autoloader; } } /** * Initialize plugin components * * @return void */ private function init_components() { // Initialize core functionality $this->core = new Core(); // Initialize admin functionality $this->admin = new Admin\Admin($this->core); // Initialize Git Updater fixes $this->init_git_updater_fixes(); // Initialize the updater if the class exists if (class_exists('\WPALLSTARS\FixPluginDoesNotExistNotices\Updater')) { $this->updater = new Updater($this->plugin_file); } // Initialize the modal for update source selection new Admin\Modal(); } /** * Initialize Git Updater fixes * * This function previously added filters to fix Git Updater's handling of 'main' vs 'master' branches. * These fixes are no longer needed with proper plugin headers. * See: https://git-updater.com/knowledge-base/required-headers/ * * @return void */ private function init_git_updater_fixes() { // No fixes needed - we're using the proper plugin headers // Git Updater reads version information from the readme.txt file in the main branch } // Git Updater override methods have been removed as they're no longer needed // We now use the proper plugin headers for Git Updater integration }