Since: 3.0.0
Inheritance: extends ArrayAcces\ArrayAccess
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container->share('multilingualpress.asset_factory', function (Container $container) {
         return new AssetFactory($container['multilingualpress.internal_locations']);
     });
     $container->share('multilingualpress.asset_manager', function () {
         return new AssetManager();
     });
 }
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container->share('multilingualpress.content_relations_table', function () {
         return new Table\ContentRelationsTable($GLOBALS['wpdb']->base_prefix);
     });
     $container->share('multilingualpress.languages_table', function () {
         return new Table\LanguagesTable($GLOBALS['wpdb']->base_prefix);
     });
     $container->share('multilingualpress.site_relations_table', function () {
         return new Table\SiteRelationsTable($GLOBALS['wpdb']->base_prefix);
     });
     $container->share('multilingualpress.table_duplicator', function () {
         return new WPDBTableDuplicator();
     });
     $container->share('multilingualpress.table_installer', function () {
         return new WPDBTableInstaller();
     });
     $container->share('multilingualpress.table_list', function () {
         return new WPDBTableList();
     });
     $container->share('multilingualpress.table_replacer', function () {
         return new WPDBTableReplacer();
     });
     $container->share('multilingualpress.table_string_replacer', function () {
         return new WPDBTableStringReplacer();
     });
 }
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container->share('multilingualpress.content_relations', function (Container $container) {
         return new WPDBContentRelations($container['multilingualpress.content_relations_table'], $container['multilingualpress.site_relations']);
     });
     $container->share('multilingualpress.languages', function (Container $container) {
         return new WPDBLanguages($container['multilingualpress.languages_table']);
     });
     $container->share('multilingualpress.site_relations', function (Container $container) {
         return new WPDBSiteRelations($container['multilingualpress.site_relations_table']);
     });
 }
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container->share('multilingualpress.error_factory', function () {
         return new FallbackErrorFactory();
     });
     $container->share('multilingualpress.nonce_factory', function () {
         return new FallbackNonceFactory();
     });
     $container->share('multilingualpress.type_factory', function () {
         return new TypeFactory();
     });
 }
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container['multilingualpress.installer'] = function (Container $container) {
         return new Installer($container['multilingualpress.table_installer'], $container['multilingualpress.content_relations_table'], $container['multilingualpress.languages_table'], $container['multilingualpress.site_relations_table']);
     };
     $container->share('multilingualpress.network_plugin_deactivator', function () {
         return new MatchingNetworkPluginDeactivator();
     });
     $container['multilingualpress.system_checker'] = function (Container $container) {
         return new SystemChecker($container['multilingualpress.properties'], $container['multilingualpress.type_factory']);
     };
     $container['multilingualpress.updater'] = function (Container $container) {
         return new Updater($container['multilingualpress.table_installer'], $container['multilingualpress.content_relations_table'], $container['multilingualpress.languages_table'], $container['multilingualpress.site_relations_table'], $container['multilingualpress.site_relations']);
     };
 }
 /**
  * Registers the provided services on the given container.
  *
  * @since 3.0.0
  *
  * @param Container $container Container object.
  *
  * @return void
  */
 public function register(Container $container)
 {
     $container['multilingualpress.base_path_adapter'] = function () {
         return new CachingBasePathAdapter();
     };
     $container->share('multilingualpress.internal_locations', function () {
         return new InternalLocations();
     });
     // TODO: Make a regular not shared service as soon as everything else has been adapted. Or remove from here?
     $container->share('multilingualpress.module_manager', function () {
         // TODO: Maybe store the option name somewhere? But then again, who else really needs to know it?
         // TODO: Migration: The old option name was "state_modules", and it stored "on" and "off" values, no bools.
         return new Module\NetworkOptionModuleManager('multilingualpress_modules');
     });
     $container['multilingualpress.plugin_settings_page'] = function (Container $container) {
         return SettingsPage::with_parent(SettingsPage::ADMIN_NETWORK, SettingsPage::PARENT_NETWORK_SETTINGS, __('MultilingualPress', 'multilingual-press'), __('MultilingualPress', 'multilingual-press'), 'manage_network_options', 'multilingualpress', $container['multilingualpress.plugin_settings_page_view']);
     };
     $container['multilingualpress.plugin_settings_page_view'] = function (Container $container) {
         return new PluginSettingsPage\View($container['multilingualpress.module_manager'], $container['multilingualpress.update_plugin_settings_nonce'], $container['multilingualpress.asset_manager']);
     };
     $container['multilingualpress.plugin_settings_updater'] = function (Container $container) {
         return new PluginSettingsPage\PluginSettingsUpdater($container['multilingualpress.module_manager'], $container['multilingualpress.update_plugin_settings_nonce'], $container['multilingualpress.plugin_settings_page']);
     };
     $container['multilingualpress.post_request_data_manipulator'] = function () {
         return new FullRequestDataManipulator(RequestDataManipulator::METHOD_POST);
     };
     $container['multilingualpress.relationship_control_search'] = function () {
         return new RequestAwareSearch();
     };
     $container['multilingualpress.relationship_control_search_controller'] = function (Container $container) {
         return new SearchController($container['multilingualpress.relationship_control_search_results_view']);
     };
     $container['multilingualpress.relationship_control_search_results_view'] = function (Container $container) {
         return new StatusAwareSearchResultsView($container['multilingualpress.relationship_control_search']);
     };
     $container['multilingualpress.relationship_control_view'] = function (Container $container) {
         return new RelationshipControlView($container['multilingualpress.relationship_control_search_results_view'], $container['multilingualpress.asset_manager']);
     };
     $container['multilingualpress.relationship_controller'] = function (Container $container) {
         return new RelationshipController($container['multilingualpress.content_relations']);
     };
     $container->share('multilingualpress.request', function () {
         return new ConditionalAwareRequest();
     });
     $container['multilingualpress.update_plugin_settings_nonce'] = function () {
         return new WPNonce('update_plugin_settings');
     };
 }
 /**
  * Bootstraps MultilingualPress.
  *
  * @since 3.0.0
  *
  * @return bool Whether or not MultilingualPress was bootstrapped successfully.
  *
  * @throws BadMethodCallException if called on a MultilingualPress instance that has already been bootstrapped.
  */
 public function bootstrap()
 {
     if ($this->is_bootstrapped) {
         throw new BadMethodCallException('Cannot bootstrap a MultilingualPress instance that has already been bootstrapped.');
     }
     /**
      * Fires right before MultilingualPress gets bootstrapped.
      *
      * Hook here to register custom service providers.
      *
      * @since 3.0.0
      *
      * @param static $multilingualpress MultilingualPress instance.
      */
     do_action('multilingualpress.bootstrap', $this);
     static::$container->lock();
     // TODO: Eventually remove the following block.
     class_exists('Mlp_Load_Controller') or (require __DIR__ . '/inc/autoload/Mlp_Load_Controller.php');
     new \Mlp_Load_Controller(static::$container['multilingualpress.properties']->plugin_dir_path() . '/src/inc');
     if (!$this->check_installation()) {
         return false;
     }
     $this->bootstrap_service_providers();
     $needs_modules = $this->needs_modules();
     if ($needs_modules) {
         /**
          * Fires right before MultilingualPress registers any modules.
          *
          * @since 3.0.0
          */
         do_action('multilingualpress.register_modules');
         $this->register_modules();
     }
     unset($this->modules);
     static::$container->bootstrap();
     $this->is_bootstrapped = true;
     // TODO: Remove as soon as the old front controller has been replaced completely.
     class_exists('Multilingual_Press') or (require __DIR__ . '/inc/Multilingual_Press.php');
     // TODO: Refactor according to new architecure.
     $old_controller = new \Multilingual_Press(static::$container);
     $old_controller->prepare_plugin_data();
     if (!$needs_modules) {
         return true;
     }
     load_plugin_textdomain('multilingual-press');
     if (is_admin()) {
         $this->bootstrap_admin();
     } else {
         $this->bootstrap_front_end();
     }
     // TODO: Refactor according to new architecure.
     $old_controller->setup();
     return true;
 }