<?php

class AppModule
{
  var $Id;
  var $Name;
  var $Version;
  var $License; 
  var $Creator;
  var $Description;
  var $Installed;
  var $Running;
  var $Dependencies;
  /** @var Database */
  var $Database;
  /** @var System */
  var $System;
  /** @var ModularSystem */
  var $Manager;
  var $OnChange;
  
  function __construct($System)
  {
    $this->System = &$System;
    $this->Database = &$System->Database;
  }
  
  function Install()
  {
  }
  
  function Uninstall()
  {
  }
  
  function Start()
  {
  }
  
  function Stop()
  {
  } 
}

class AppModuleManager 
{
  var $Modules;
  
  function __construct()
  {
    $this->Modules = array();      
  }
  
  function StartAll()
  {
    foreach($this->Modules as $Index => $Module)
    {
      //DebugLog('Init module '.$Module->Name);
      $this->Modules[$Index]->Start();
    }
  }

  function StopAll()
  {
    foreach($this->Modules as $Index => $Module)
    {
      //DebugLog('Init module '.$Module->Name);
      $this->Modules[$Index]->Stop();
    }
  }
  
  function ModulePresent($Name)
  {
    return(array_key_exists($Name, $this->Modules));
  }
  
  function RegisterModule(AppModule $Module)
  {
    $this->Modules[$Module->Name] = &$Module;  
    $Module->Manager = &$this;
    $Module->OnChange = &$this->OnModuleChange;
  }
  
  function UnregisterModule($Module)
  {
    unset($this->Modules[array_search($Module, $this->Modules)]);  
  }
}

?>