booted ) { return; } $this->booted = true; ( new Upgrader() )->register(); $settings = new Settings(); $registry = new ConditionRegistry(); $sanitizer = new RuleSanitizer(); $evaluator = new Evaluator($registry); $visibility = new BlockVisibility($sanitizer, $evaluator); $visibility_editor = new VisibilityEditor($visibility, $registry, $settings); $saved_rules = new SavedRules($sanitizer); $shortcode = new ConditionalShortcode($evaluator, $saved_rules); $shortcode->register(); // Pages are added to the menu in the order they're registered here. ( new DashboardPage() )->register(); ( new ScheduledElementsPage() )->register(); ( new ShortcodeBuilderPage($visibility_editor, $shortcode) )->register(); ( new SettingsPage() )->register(); ( new DocsPage() )->register(); ( new SettingsController($settings) )->register(); ( new Blocks() )->register(); $rule_fields = new RuleFields($registry); ( new ConditionSearchController($registry) )->register(); ( new RuleFieldsController($rule_fields, $sanitizer) )->register(); $index = new ContentIndex($sanitizer, $registry); $index->register(); $scan = new IndexScan($index); $scan->register(); $schedule_sanitizer = new ScheduleSanitizer(); $scheduled = new ScheduledElements($schedule_sanitizer); $schedules_rest = new ScheduledElementsController($scheduled, $schedule_sanitizer); $schedules_rest->register(); ( new ScheduleRuntime($scheduled) )->register(); ( new BlockScheduleSync($scheduled, $schedule_sanitizer) )->register(); ( new CountdownFallback() )->register(); $content_sanitizer = new ScheduledContentSanitizer($schedule_sanitizer); $content_items = new ScheduledContent($content_sanitizer); $content_items->register(); $cache_purger = new CachePurger(); $content_rest = new ScheduledContentController($content_items, $content_sanitizer); $content_rest->register(); ( new ScheduledContentRenderer($content_items) )->register(); ( new ScheduledContentPurges($content_items, $cache_purger) )->register(); ( new ScheduledContentScreens($content_items, $content_rest, $cache_purger) )->register(); $menu_items = new MenuItemsWithRules($sanitizer, $index); $summary = new RuleSummary($registry); $widgets = new WidgetsWithRules($sanitizer); $content_card = new ScheduledContentCard($content_items, $content_rest); ( new DashboardController( new DashboardNotices( $registry, $index, $scan, $widgets, $saved_rules, $content_card ), $scan, new MenuItemsCard($menu_items, $summary), new BlocksWidgetsCard(new BlocksWithRules($index), $widgets, $summary), new ScheduledElementsCard($scheduled, $schedules_rest), $content_card, new ShortcodesCard($index, $saved_rules, $summary) ) )->register(); ( new DeactivationWarning($menu_items, $index) )->register(); ( new PluginLinks() )->register(); ( new ClassicMenuFields($sanitizer, $rule_fields) )->register(); ( new ClassicMenuFilter($evaluator) )->register(); ( new ClassicWidgetRules($sanitizer, $rule_fields, $evaluator) )->register(); ( new ClassicMenuConversion($sanitizer) )->register(); $visibility->register(); ( new NavigationVisibility($visibility) )->register(); $visibility_editor->register(); ( new Preview($settings) )->register(); ( new Privacy() )->register(); $this->boot_pro(); /** * Fires after Yangra Conditional has registered its services. * * Extension point for the Pro code and third-party add-ons. * * @param Plugin $plugin Plugin instance. */ do_action( 'yangra_conditional_loaded', $this ); } /** * Loads Pro features when the local development switch is on, or when a * valid license or trial is active. * * Freemius strips only if blocks scoped by its own SDK methods, so the * switch lives in the Pro folder and is reached through a file that the * Free build doesn't contain. Freemius is off when the switch is used, so * it can't sit inside an SDK check. * * @return void */ private function boot_pro() : void { $dev_pro = __DIR__ . '/Pro__premium_only/dev-pro.php'; if ( is_readable( $dev_pro ) && true === (require $dev_pro) ) { return; } if ( !yangra_conditional_fs() ) { return; } } }