class DrupalPhaseControl in X Autoload 7.5
Records events during a Drupal request, and forwards them to the registered observers after the first class loader cache miss.
Hierarchy
- class \Drupal\xautoload\Phases\DrupalPhaseControl implements CacheMissObserverInterface
 
Expanded class hierarchy of DrupalPhaseControl
2 files declare their use of DrupalPhaseControl
- ServiceContainerInterface.php in src/
DIC/ ServiceContainerInterface.php  - ServiceFactory.php in src/
DIC/ ServiceFactory.php  
File
- src/
Phases/ DrupalPhaseControl.php, line 13  
Namespace
Drupal\xautoload\PhasesView source
class DrupalPhaseControl implements CacheMissObserverInterface {
  /**
   * @var DrupalSystemInterface
   */
  private $system;
  /**
   * @var PhaseObserverInterface[]
   */
  private $observers;
  /**
   * @var bool
   *   TRUE, if the class finder is no longer the cached one..
   */
  private $awake = FALSE;
  /**
   * @var string[]|null
   *   Extension type by extension name.
   */
  private $extensions;
  /**
   * @var bool
   *   TRUE, if in main phase.
   */
  private $mainPhase = FALSE;
  /**
   * @var bool
   *   TRUE, if in of after boot phase.
   */
  private $bootPhase;
  /**
   * @param DrupalSystemInterface $system
   * @param PhaseObserverInterface[] $observers
   */
  public function __construct(DrupalSystemInterface $system, array $observers) {
    $this->system = $system;
    $this->observers = $observers;
  }
  /**
   * {@inheritdoc}
   */
  public function cacheMiss($finder) {
    $this->extensions = $this->system
      ->getActiveExtensions();
    foreach ($this->observers as $observer) {
      $observer
        ->wakeUp($finder, $this->extensions);
    }
    $this->awake = TRUE;
    if ($this->bootPhase) {
      // We slipped into boot phase while asleep. Need to catch up.
      foreach ($this->observers as $observer) {
        $observer
          ->enterBootPhase();
      }
    }
    if ($this->mainPhase) {
      // We slipped into main phase while asleep. Need to catch up.
      foreach ($this->observers as $observer) {
        $observer
          ->enterMainPhase();
      }
    }
  }
  public function enterBootPhase() {
    if ($this->bootPhase) {
      // We are already in the main phase. Nothing changes.
      return;
    }
    $this->bootPhase = TRUE;
    if (!$this->awake) {
      // The entire thing is not initialized yet.
      // Postpone until operateOnFinder()
      return;
    }
    foreach ($this->observers as $observer) {
      $observer
        ->enterBootPhase();
    }
  }
  /**
   * Initiate the main phase.
   *
   * Called from
   * @see xautoload_custom_theme()
   * @see xautolaod_init()
   */
  public function enterMainPhase() {
    // Main phase implies boot phase.
    $this
      ->enterBootPhase();
    if ($this->mainPhase) {
      // We are already in the main phase. Nothing changes.
      return;
    }
    $this->mainPhase = TRUE;
    if (!$this->awake) {
      // The entire thing is not initialized yet.
      // Postpone until operateOnFinder()
      return;
    }
    foreach ($this->observers as $observer) {
      $observer
        ->enterMainPhase();
    }
  }
  /**
   * Checks if new extensions have been enabled, and registers them.
   *
   * This is called from xautoload_module_implements_alter(), which is called
   * whenever a new module is enabled, but also some calls we need to ignore.
   */
  public function checkNewExtensions() {
    if (!$this->awake) {
      // The entire thing is not initialized yet.
      // Postpone until operateOnFinder()
      return;
    }
    $activeExtensions = $this->system
      ->getActiveExtensions();
    if ($activeExtensions === $this->extensions) {
      // Nothing actually changed. False alarm.
      return;
    }
    // Now check all extensions to find out if any of them is new.
    foreach ($activeExtensions as $name => $type) {
      if (!isset($this->extensions[$name])) {
        // This extension was freshly enabled.
        if ('xautoload' === $name) {
          // If xautoload is enabled in this request, then boot phase and main
          // phase are not properly initialized yet.
          $this
            ->enterMainPhase();
        }
        // Notify observers about the new extension.
        foreach ($this->observers as $observer) {
          $observer
            ->welcomeNewExtension($name, $type);
        }
      }
    }
  }
  /**
   * Called from @see xautoload_modules_enabled()
   *
   * @param $modules
   */
  public function modulesEnabled($modules) {
    if (!$this->awake) {
      // No need to postpone.
      // initMainPhase() will have these modules included.
      return;
    }
    foreach ($this->observers as $observer) {
      $observer
        ->modulesEnabled($modules);
    }
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            DrupalPhaseControl:: | 
                  private | property | TRUE, if the class finder is no longer the cached one.. | |
| 
            DrupalPhaseControl:: | 
                  private | property | TRUE, if in of after boot phase. | |
| 
            DrupalPhaseControl:: | 
                  private | property | Extension type by extension name. | |
| 
            DrupalPhaseControl:: | 
                  private | property | TRUE, if in main phase. | |
| 
            DrupalPhaseControl:: | 
                  private | property | ||
| 
            DrupalPhaseControl:: | 
                  private | property | ||
| 
            DrupalPhaseControl:: | 
                  public | function | 
            Executes the operation. Overrides CacheMissObserverInterface:: | 
                  |
| 
            DrupalPhaseControl:: | 
                  public | function | Checks if new extensions have been enabled, and registers them. | |
| 
            DrupalPhaseControl:: | 
                  public | function | ||
| 
            DrupalPhaseControl:: | 
                  public | function | Initiate the main phase. | |
| 
            DrupalPhaseControl:: | 
                  public | function | Called from | |
| 
            DrupalPhaseControl:: | 
                  public | function |