rendererFactory = $rendererFactory; $this->accessControl = $accessControl; $this->api = $api; $this->activator = $activator; $this->settings = $settings; $this->router = $router; $this->hooks = $hooks; $this->changelog = $changelog; $this->menu = $menu; $this->cronTrigger = $cronTrigger; $this->permanentNotices = $permanentNotices; $this->shortcodes = $shortcodes; $this->databaseInitializer = $databaseInitializer; $this->wcTransactionalEmails = $wcTransactionalEmails; $this->wcHelper = $wcHelper; $this->postEditorBlock = $postEditorBlock; $this->localizer = $localizer; } public function init() { // load translations $this->setupLocalizer(); try { $this->databaseInitializer->initializeConnection(); } catch (\Exception $e) { return WPNotice::displayError(Helpers::replaceLinkTags( WPFunctions::get()->__('Unable to connect to the database (the database is unable to open a file or folder), the connection is likely not configured correctly. Please read our [link] Knowledge Base article [/link] for steps how to resolve it.', 'mailpoet'), 'https://kb.mailpoet.com/article/200-solving-database-connection-issues', [ 'target' => '_blank', 'data-beacon-article' => '596de7db2c7d3a73488b2f8d', ] )); } // activation function WPFunctions::get()->registerActivationHook( Env::$file, [ $this, 'runActivator', ] ); WPFunctions::get()->addAction('activated_plugin', [ new PluginActivatedHook(new DeferredAdminNotices), 'action', ], 10, 2); WPFunctions::get()->addAction('init', [ $this, 'preInitialize', ], 0); WPFunctions::get()->addAction('init', [ $this, 'initialize', ]); WPFunctions::get()->addAction('admin_init', [ $this, 'setupPrivacyPolicy', ]); WPFunctions::get()->addAction('wp_loaded', [ $this, 'postInitialize', ]); WPFunctions::get()->addAction('admin_init', [ new DeferredAdminNotices, 'printAndClean', ]); $this->hooks->initEarlyHooks(); } public function runActivator() { return $this->activator->activate(); } public function preInitialize() { try { $this->renderer = $this->rendererFactory->getRenderer(); $this->setupWidget(); $this->hooks->init(); $this->setupWoocommerceTransactionalEmails(); } catch (\Exception $e) { $this->handleFailedInitialization($e); } } public function setupWidget() { WPFunctions::get()->registerWidget('\MailPoet\Form\Widget'); } public function initialize() { try { $this->maybeDbUpdate(); $this->setupInstaller(); $this->setupUpdater(); $this->setupCapabilities(); $this->menu->init(); $this->setupShortcodes(); $this->setupImages(); $this->setupPersonalDataExporters(); $this->setupPersonalDataErasers(); $this->changelog->init(); $this->setupCronTrigger(); $this->setupConflictResolver(); $this->setupPages(); $this->setupPermanentNotices(); $this->setupDeactivationSurvey(); $this->setupAutomaticEmails(); $this->postEditorBlock->init(); WPFunctions::get()->doAction('mailpoet_initialized', MAILPOET_VERSION); } catch (\Exception $e) { return $this->handleFailedInitialization($e); } define(self::INITIALIZED, true); } public function maybeDbUpdate() { try { $currentDbVersion = $this->settings->get('db_version'); } catch (\Exception $e) { $currentDbVersion = null; } // if current db version and plugin version differ if (version_compare($currentDbVersion, Env::$version) !== 0) { $this->runActivator(); } } public function setupInstaller() { $installer = new Installer( Installer::PREMIUM_PLUGIN_SLUG ); $installer->init(); } public function setupUpdater() { $slug = Installer::PREMIUM_PLUGIN_SLUG; $pluginFile = Installer::getPluginFile($slug); if (empty($pluginFile) || !defined('MAILPOET_PREMIUM_VERSION')) { return false; } $updater = new Updater( $pluginFile, $slug, MAILPOET_PREMIUM_VERSION ); $updater->init(); } public function setupLocalizer() { $this->localizer->init(); } public function setupCapabilities() { $caps = new Capabilities($this->renderer); $caps->init(); } public function setupShortcodes() { $this->shortcodes->init(); } public function setupImages() { WPFunctions::get()->addImageSize('mailpoet_newsletter_max', Env::NEWSLETTER_CONTENT_WIDTH); } public function setupCronTrigger() { // setup cron trigger only outside of cli environment if (php_sapi_name() !== 'cli') { $this->cronTrigger->init(); } } public function setupConflictResolver() { $conflictResolver = new ConflictResolver(); $conflictResolver->init(); } public function postInitialize() { if (!defined(self::INITIALIZED)) return; try { $this->api->init(); $this->router->init(); $this->setupUserLocale(); } catch (\Exception $e) { $this->handleFailedInitialization($e); } } public function setupUserLocale() { if (get_user_locale() === WPFunctions::get()->getLocale()) return; WPFunctions::get()->unloadTextdomain(Env::$pluginName); $this->localizer->init(); } public function setupPages() { $pages = new \MailPoet\Settings\Pages(); $pages->init(); } public function setupPrivacyPolicy() { $privacyPolicy = new PrivacyPolicy(); $privacyPolicy->init(); } public function setupPersonalDataExporters() { $exporters = new PersonalDataExporters(); $exporters->init(); } public function setupPersonalDataErasers() { $erasers = new PersonalDataErasers(); $erasers->init(); } public function setupPermanentNotices() { $this->permanentNotices->init(); } public function handleFailedInitialization($exception) { // check if we are able to add pages at this point if (function_exists('wp_get_current_user')) { Menu::addErrorPage($this->accessControl); } return WPNotice::displayError($exception); } public function setupDeactivationSurvey() { $survey = new DeactivationSurvey($this->renderer); $survey->init(); } public function setupAutomaticEmails() { $automaticEmails = new AutomaticEmails(); $automaticEmails->init(); $automaticEmails->getAutomaticEmails(); } private function setupWoocommerceTransactionalEmails() { $wcEnabled = $this->wcHelper->isWooCommerceActive(); $optInEnabled = $this->settings->get('woocommerce.use_mailpoet_editor', false); if ($wcEnabled) { $this->wcTransactionalEmails->enableEmailSettingsSyncToWooCommerce(); if ($optInEnabled) { $this->wcTransactionalEmails->useTemplateForWoocommerceEmails(); } } } }