builder = new ContainerBuilder(); $this->builder->addDefinitions(IVYFORMS_PATH . '/backend/src/Config/repository.php'); $this->builder->addDefinitions(IVYFORMS_PATH . '/backend/src/Config/services.php'); /** * Allow to hook into container before build * @since 0.1.0 * * Arguments: * - ContainerBuilder $builder The IvyForms DI container builder (base) */ do_action('ivyforms/boot/extend_container_builder', $this->builder); $this->container = $this->builder->build(); $this->settingsService = $this->container->get(SettingsService::class); /** * The code that runs during plugin activation */ register_activation_hook( IVYFORMS_FILE, [ self::class, 'activation' ] ); register_activation_hook( IVYFORMS_FILE, [ self::class, 'activationSettings' ] ); /** * The code that runs during plugin deactivation */ register_uninstall_hook( IVYFORMS_FILE, [ self::class, 'deletion'] ); /** Init load */ add_action('plugins_loaded', [ $this, 'init' ]); /** Register API calls */ add_action('rest_api_init', [$this, 'registerRoutes']); /** Isolate API calls */ add_action('wp_ajax_ivyforms_api', [ $this, 'registerRoutes' ]); add_action('wp_ajax_nopriv_ivyforms_api', [ $this, 'registerRoutes' ]); /** Activation hook for new site on multisite setup */ add_action('wpmu_new_blog', [ $this, 'initNewSite' ]); add_filter('wp_script_attributes', ['IvyForms\Services\Shortcode\ShortcodeService', 'addScriptAttribute']); // Register admin hooks via AdminHooks class $adminHooks = new AdminHooks($this->settingsService); $adminHooks->register(); } /** * @throws DependencyException * @throws NotFoundException */ public function registerRoutes(): void { // Register REST API routes after the container is built Routes::registerRoutes($this->container); } /** * @param bool $networkWide */ public static function activation(bool $networkWide): void { //Network activation if ($networkWide && function_exists('is_multisite') && is_multisite()) { ActivationMultisite::init(); } ActivationDatabaseHook::init(); } /** * @param int $siteId */ public static function initNewSite(int $siteId): void { ActivationNewSiteMultisite::init($siteId); } /** * @throws Exception */ public static function activationSettings(): void { ActivationSettingsHook::init(); } /** * Uninstall function when plugin is deleted * @throws InvalidArgumentException */ public static function deletion(): void { $settingsService = new SettingsService(); if ($settingsService->getSetting('activation', 'deleteTables')) { //Network deletion if ( function_exists('is_multisite') && is_multisite() ) { DeletionMultisite::delete(); } DeleteDatabaseHook::delete(); } } /** * Init * @return void */ public function init(): void { new PreviewService(); // Initialize integration registry system try { /** @var IntegrationService $integrationService */ $integrationService = $this->container->get(IntegrationService::class); $integrationService->init(); } catch (DependencyException | NotFoundException $e) { if (defined('WP_DEBUG') && WP_DEBUG) { error_log('Integration service error: ' . $e->getMessage()); } } try { /** @var MenuManager $menuManager*/ $menuManager = $this->container->get(MenuManager::class); // Register the admin menus and submenus using the 'admin_menu' hook $menuManager->registerMenus(); } catch (DependencyException | NotFoundException $e) { if (defined('WP_DEBUG') && WP_DEBUG) { error_log('Menu error: ' . $e->getMessage()); } } if (!is_admin()) { add_shortcode('ivyforms', function ($atts = []) { return ShortcodeService::shortcodeHandler($atts); }); } } }