+ /**
+ * Get a list of boot services.
+ *
+ * These are services which must be setup *before* the container can operate.
+ *
+ * @param bool $loadFromDB
+ * @throws \CRM_Core_Exception
+ */
+ public static function boot($loadFromDB) {
+ $bootServices = array();
+ \Civi::$statics[__CLASS__]['boot'] = &$bootServices;
+
+ $bootServices['runtime'] = array(
+ 'class' => 'CRM_Core_Config_Runtime',
+ 'obj' => ($runtime = new \CRM_Core_Config_Runtime()),
+ );
+ $runtime->initialize($loadFromDB);
+
+ if ($loadFromDB && $runtime->dsn) {
+ \CRM_Core_DAO::init($runtime->dsn);
+ }
+
+ $bootServices['paths'] = array(
+ 'class' => 'Civi\Core\Paths',
+ 'obj' => new \Civi\Core\Paths(),
+ );
+
+ $class = $runtime->userFrameworkClass;
+ $bootServices['userSystem'] = array(
+ 'class' => 'CRM_Utils_Cache_Interface',
+ 'obj' => ($userSystem = new $class()),
+ );
+ $userSystem->initialize();
+
+ $userPermissionClass = 'CRM_Core_Permission_' . $runtime->userFramework;
+ $bootServices['userPermissionClass'] = array(
+ // Ugh, silly name.
+ 'class' => 'CRM_Core_Permission_Base',
+ 'obj' => new $userPermissionClass(),
+ );
+
+ $bootServices['cache.settings'] = array(
+ 'class' => 'CRM_Utils_Cache_Interface',
+ 'obj' => \CRM_Utils_Cache::create(array(
+ 'name' => 'settings',
+ 'type' => array('*memory*', 'SqlGroup', 'ArrayCache'),
+ )),
+ );
+
+ $bootServices['settings_manager'] = array(
+ 'class' => 'Civi\Core\SettingsManager',
+ 'obj' => new \Civi\Core\SettingsManager($bootServices['cache.settings']['obj']),
+ );
+
+ $bootServices['lockManager'] = array(
+ 'class' => 'Civi\Core\Lock\LockManager',
+ 'obj' => self::createLockManager(),
+ );
+
+ if ($loadFromDB && $runtime->dsn) {
+ \CRM_Extension_System::singleton(TRUE);
+
+ $c = new self();
+ \Civi::$statics[__CLASS__]['container'] = $c->loadContainer();
+ }
+ }
+
+ public static function getBootService($name) {
+ return \Civi::$statics[__CLASS__]['boot'][$name]['obj'];
+ }
+