db = $wpdb; $this->presets = new LanguagePresets(); $this->defaults = new Defaults( $this->presets ); $this->settings = new SettingsRepository( $this->defaults ); $this->schema = new Schema( $wpdb ); $this->translations = new TranslationRepository( $wpdb, $this->schema ); $this->installer = new Installer( $this->schema, $this->settings, $this->defaults, $this->translations ); $this->providers = new ProviderFactory( $this->settings, $this->defaults ); $this->translator = new Translator( $this->settings, $this->providers ); $this->posts = new PostTranslations( $this->translations, $this->settings ); $this->sync_guard = new SyncGuard(); $this->terms = new TermTranslations( $this->translations, $this->settings, $this->translator, $this->sync_guard ); $this->raw = new Raw(); $this->urls = new Urls( $this->settings, $this->raw ); $this->current = new CurrentLanguage( $this->settings, $this->urls ); $this->permalinks = new Permalinks( $this->urls, $this->settings, $this->posts ); $this->localizer = new UrlLocalizer( $this->urls, $this->raw, $this->settings, $this->posts ); $this->alternates = new Alternates( $this->urls, $this->settings, $this->posts, $this->terms ); $this->redirects = new Redirects( $this->current, $this->urls, $this->settings, $this->posts ); $this->seo_fields = new SeoFields( $this->settings ); $this->meta = new MetaTranslator( $this->seo_fields, $this->translator, $this->posts, $this->sync_guard ); $this->sync = new Sync( $this->settings, $this->posts, $this->seo_fields, $this->sync_guard, $wpdb, $this->terms ); $this->pattern_refs = new PatternRefs( $this->settings, $this->posts, $this->sync_guard ); $this->duplicator = new Duplicator( $this->settings, $this->translations, $this->posts, $this->translator, $this->meta, $this->sync_guard, $this->pattern_refs, $this->terms ); $this->site_strings = new SiteStrings( $this->current, $this->settings ); $this->slugs = new SlugFilter( $this->settings, new Transliterator() ); $this->slug_converter = new SlugConverter( $this->slugs, $wpdb ); $this->parts = new TemplateParts( $this->current, $this->settings, $this->translator, $this->pattern_refs, new PatternInliner() ); $this->menus = new Menus( $this->settings, $this->posts, $this->duplicator ); $this->coverage = new Coverage( $this->settings, $this->translations, $this->parts ); $this->link_localizer = new LinkLocalizer( $this->current, $this->localizer ); $this->switcher = new SwitcherBlock( $this->current, $this->settings, $this->alternates, $this->urls ); $string_rules = new StringRules(); $this->strings = new StringCatalog( $wpdb, $this->schema, $this->settings ); $this->gettext = new GettextFilter( $this->current, $this->strings, $string_rules ); $this->string_translator = new StringTranslator( $this->strings, $string_rules, $this->translator, $this->settings ); $this->site_scanner = new SiteScanner( $this->settings, $this->urls, $this->schema, $wpdb ); $this->language_packs = new LanguagePackInstaller( $this->settings ); $assets = new AdminAssets(); $view = new View( BLOCKLINGO_DIR . 'views/' ); $this->settings_sanitizer = new SettingsSanitizer( $this->presets, $this->defaults ); $this->settings_updater = new SettingsUpdater( $this->settings, $this->installer ); $this->editor_support = new EditorSupport( $this->settings ); $this->editor_notice = new EditorNotice( $this->editor_support ); $this->settings_page = new SettingsPage( $this->settings, $this->defaults, $this->presets, $this->settings_sanitizer, $this->settings_updater, $this->language_packs, $this->seo_fields, $this->parts, $this->menus, $this->slug_converter, $this->slugs, $this->raw, $this->coverage, $this->strings, $this->editor_support, $assets, $view ); $this->strings_page = new StringsPage( $this->settings, $this->strings, $assets, $view, $this->language_packs ); $this->term_list = new TermList( $this->settings, $this->terms ); $this->post_list = new PostList( $this->settings, $this->posts, $this->duplicator, $this->schema, $wpdb ); $this->editor_assets = new EditorAssets( $this->settings, $this->defaults ); } /** * The running plugin. Only the public API (functions.php) and the legacy * BLOCKLINGO_* adapters reach for it; everything else gets its dependencies * through constructors. */ public static function instance(): Plugin { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } public function boot(): void { if ( $this->booted ) { return; } $this->booted = true; foreach ( $this->hookables() as $hookable ) { $hookable->register(); } } public function presets(): LanguagePresets { return $this->presets; } public function defaults(): Defaults { return $this->defaults; } public function settings(): SettingsRepository { return $this->settings; } public function schema(): Schema { return $this->schema; } public function translations(): TranslationRepository { return $this->translations; } public function installer(): Installer { return $this->installer; } public function providers(): ProviderFactory { return $this->providers; } public function translator(): Translator { return $this->translator; } public function posts(): PostTranslations { return $this->posts; } public function raw(): Raw { return $this->raw; } public function urls(): Urls { return $this->urls; } public function current_language(): CurrentLanguage { return $this->current; } public function permalinks(): Permalinks { return $this->permalinks; } public function localizer(): UrlLocalizer { return $this->localizer; } public function alternates(): Alternates { return $this->alternates; } public function redirects(): Redirects { return $this->redirects; } public function sync_guard(): SyncGuard { return $this->sync_guard; } public function seo_fields(): SeoFields { return $this->seo_fields; } public function meta(): MetaTranslator { return $this->meta; } public function sync(): Sync { return $this->sync; } public function duplicator(): Duplicator { return $this->duplicator; } public function site_strings(): SiteStrings { return $this->site_strings; } public function slugs(): SlugFilter { return $this->slugs; } public function slug_converter(): SlugConverter { return $this->slug_converter; } public function parts(): TemplateParts { return $this->parts; } public function editor_support(): EditorSupport { return $this->editor_support; } public function editor_notice(): EditorNotice { return $this->editor_notice; } public function terms(): TermTranslations { return $this->terms; } public function term_list(): TermList { return $this->term_list; } public function menus(): Menus { return $this->menus; } public function pattern_refs(): PatternRefs { return $this->pattern_refs; } public function coverage(): Coverage { return $this->coverage; } public function link_localizer(): LinkLocalizer { return $this->link_localizer; } public function switcher(): SwitcherBlock { return $this->switcher; } public function strings(): StringCatalog { return $this->strings; } public function gettext(): GettextFilter { return $this->gettext; } public function string_translator(): StringTranslator { return $this->string_translator; } public function site_scanner(): SiteScanner { return $this->site_scanner; } public function language_packs(): LanguagePackInstaller { return $this->language_packs; } public function settings_sanitizer(): SettingsSanitizer { return $this->settings_sanitizer; } public function settings_updater(): SettingsUpdater { return $this->settings_updater; } public function settings_page(): SettingsPage { return $this->settings_page; } public function strings_page(): StringsPage { return $this->strings_page; } public function post_list(): PostList { return $this->post_list; } public function editor_assets(): EditorAssets { return $this->editor_assets; } /** @return Hookable[] */ private function hookables(): array { $admin = is_admin() ? array( $this->settings_page, $this->strings_page, $this->post_list, $this->term_list, $this->editor_notice, new PluginsScreen( $this->settings ) ) : array(); return array_merge( $this->common_hookables(), $admin ); } /** @return Hookable[] */ private function common_hookables(): array { return array( $this->settings, $this->installer, new PostLanguageTagger( $this->translations, $this->settings ), new Router( $this->current, $this->urls, $this->raw, $this->settings, $this->posts ), $this->permalinks, new ArchiveLinks( $this->current, $this->urls ), $this->redirects, $this->sync, new ParentSlug( $this->sync_guard ), new QueryFilter( $this->current, $this->settings, $this->schema, $this->db ), new TermFilters( $this->terms, $this->current, $this->settings, $this->urls, $this->schema, $this->db ), new Locale( $this->current, $this->settings ), new Hreflang( $this->alternates, $this->settings ), $this->site_strings, $this->slugs, new OldPathRedirect(), $this->parts, new PatternSwap( $this->current, $this->posts, $this->settings ), $this->pattern_refs, $this->link_localizer, $this->switcher, new MenuSwitcher( $this->settings, $this->switcher ), $this->gettext, $this->language_packs, new Integrations( $this->settings, $this->posts, $this->urls, $this->current ), new PostLanguageField( $this->settings, $this->translations, $this->posts ), new TranslationsController( $this->settings, $this->translations, $this->posts, $this->duplicator ), new MachineController( $this->posts, $this->translator, $this->meta ), new BulkController( $this->settings, $this->parts, $this->coverage, $this->menus, $this->terms, $this->duplicator ), new ProvidersController( $this->settings, $this->providers, $this->translator ), new StringsController( $this->string_translator, $this->site_scanner ), $this->editor_assets, ); } }