Changeset 897 for trunk/Packages/Common


Ignore:
Timestamp:
Jan 22, 2021, 12:04:30 AM (4 years ago)
Author:
chronos
Message:
  • Modified: Setup module is always installed and enabled to be executed as base system module. From Setup module all other system modules can be installed.
  • Added: Allow to install, uninstall, enable, disable and upgrade all user modules.
  • Added: Created ModuleManager app module for managing other modules.
  • Modified: Keep InstalledVersion for installed modules in ModulesConfig.php.
  • Added: Distinction between system, library and application module types.
Location:
trunk/Packages/Common
Files:
2 added
3 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/AppModule.php

    r896 r897  
    88{
    99  const System = 0;
    10   const Normal = 1;
     10  const Library = 1;
    1111  const Application = 2;
    1212}
     
    3333  const NotRunning = 6;
    3434  const System = 7;
    35   const User = 8;
     35  const Library = 8;
     36  const Application = 9;
    3637}
    3738
     
    5758  public $OnChange;
    5859  public array $Models;
    59   public bool $SystemModule;
    6060
    6161  function __construct(Application $System)
     
    6464    $this->Database = &$System->Database;
    6565    $this->Installed = false;
     66    $this->InstalledVersion = '';
    6667    $this->Enabled = false;
    6768    $this->Running = false;
     
    7273    $this->Description = '';
    7374    $this->Dependencies = array();
    74     $this->Type = ModuleType::Normal;
     75    $this->Type = ModuleType::Library;
    7576    $this->Models = array();
    76     $this->SystemModule = false;
    7777  }
    7878
     
    8787    $List = array();
    8888    $this->Manager->EnumDependenciesCascade($this, $List, array(ModuleCondition::NotInstalled));
    89     $this->Manager->Perform($List, array(ModuleAction::Install), array(ModuleCondition::NotInstalled));
     89    $this->Manager->PerformList($List, array(ModuleAction::Install), array(ModuleCondition::NotInstalled));
    9090    $this->DoBeforeInstall();
    9191    $this->InstallModels();
     
    104104    $List = array();
    105105    $this->Manager->EnumSuperiorDependenciesCascade($this, $List, array(ModuleCondition::Installed));
    106     $this->Manager->Perform($List, array(ModuleAction::Uninstall), array(ModuleCondition::Installed));
     106    $this->Manager->PerformList($List, array(ModuleAction::Uninstall), array(ModuleCondition::Installed));
    107107    $this->DoUninstall();
    108108    $this->UninstallModels();
     
    116116    $List = array();
    117117    $this->Manager->EnumSuperiorDependenciesCascade($this, $List, array(ModuleCondition::Installed));
    118     $this->Manager->Perform($List, array(ModuleAction::Upgrade), array(ModuleCondition::Installed));
     118    $this->Manager->PerformList($List, array(ModuleAction::Upgrade), array(ModuleCondition::Installed));
    119119    $this->DoUpgrade();
    120120  }
     
    133133    $List = array();
    134134    $this->Manager->EnumDependenciesCascade($this, $List, array(ModuleCondition::NotRunning));
    135     $this->Manager->Perform($List, array(ModuleAction::Start), array(ModuleCondition::NotRunning));
     135    $this->Manager->PerformList($List, array(ModuleAction::Start), array(ModuleCondition::NotRunning));
    136136    $this->DoStart();
    137137    $this->Running = true;
     
    144144    $List = array();
    145145    $this->Manager->EnumSuperiorDependenciesCascade($this, $List, array(ModuleCondition::Running));
    146     $this->Manager->Perform($List, array(ModuleAction::Stop), array(ModuleCondition::Running));
     146    $this->Manager->PerformList($List, array(ModuleAction::Stop), array(ModuleCondition::Running));
    147147    $this->DoStop();
    148148  }
     
    160160    $List = array();
    161161    $this->Manager->EnumDependenciesCascade($this, $List, array(ModuleCondition::NotEnabled));
    162     $this->Manager->Perform($List, array(ModuleAction::Enable), array(ModuleCondition::NotEnabled));
     162    $this->Manager->PerformList($List, array(ModuleAction::Enable), array(ModuleCondition::NotEnabled));
    163163    $this->Enabled = true;
    164164  }
     
    171171    $List = array();
    172172    $this->Manager->EnumSuperiorDependenciesCascade($this, $List, array(ModuleCondition::Enabled));
    173     $this->Manager->Perform($List, array(ModuleAction::Disable), array(ModuleCondition::Enabled));
     173    $this->Manager->PerformList($List, array(ModuleAction::Disable), array(ModuleCondition::Enabled));
    174174  }
    175175
     
    252252  }
    253253
    254   function Perform(array $List, array $Actions, array $Conditions = array(ModuleCondition::All)): void
     254  function Perform(array $Actions, array $Conditions = array(ModuleCondition::All)): void
     255  {
     256    $this->PerformList($this->Modules, $Actions, $Conditions);
     257  }
     258
     259  function PerformList(array $List, array $Actions, array $Conditions = array(ModuleCondition::All)): void
    255260  {
    256261    foreach ($List as $Module)
     
    263268        ($Module->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
    264269        (!$Module->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
    265         ($Module->SystemModule and in_array(ModuleCondition::System, $Conditions)) or
    266         (!$Module->SystemModule and in_array(ModuleCondition::User, $Conditions)))
     270        (($Module->Type == ModuleType::System) and in_array(ModuleCondition::System, $Conditions)) or
     271        (($Module->Type == ModuleType::Application) and in_array(ModuleCondition::Application, $Conditions)) or
     272        (($Module->Type == ModuleType::Library) and in_array(ModuleCondition::Library, $Conditions)))
    267273      {
    268274        foreach ($Actions as $Action)
     
    294300        ($DepModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    295301        (!$DepModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)) or
    296         ($DepModule->SystemModule and in_array(ModuleCondition::System, $Conditions)) or
    297         (!$DepModule->SystemModule and in_array(ModuleCondition::User, $Conditions)))
     302        (($Module->Type == ModuleType::System) and in_array(ModuleCondition::System, $Conditions)) or
     303        (($Module->Type == ModuleType::Application) and in_array(ModuleCondition::Application, $Conditions)) or
     304        (($Module->Type == ModuleType::Library) and in_array(ModuleCondition::Library, $Conditions)))
    298305      {
    299306        array_push($List, $DepModule);
     
    315322          ($RefModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    316323          (!$RefModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)) or
    317           ($RefModule->SystemModule and in_array(ModuleCondition::System, $Conditions)) or
    318           (!$RefModule->SystemModule and in_array(ModuleCondition::User, $Conditions))))
     324          (($Module->Type == ModuleType::System) and in_array(ModuleCondition::System, $Conditions)) or
     325          (($Module->Type == ModuleType::Application) and in_array(ModuleCondition::Application, $Conditions)) or
     326          (($Module->Type == ModuleType::Library) and in_array(ModuleCondition::Library, $Conditions))))
    319327        {
    320328        array_push($List, $RefModule);
     
    324332  }
    325333
    326   function Start(): void
    327   {
    328     $ModuleSetup = $this->LoadModule(dirname(__FILE__).'/Setup.php');
    329     $this->LoadState();
    330     if (!$ModuleSetup->Installed)
    331     {
    332       $ModuleSetup->Install();
    333       $this->SaveState();
    334     }
    335     $ModuleSetup->Start();
    336     if (ModuleSetup::Cast($ModuleSetup)->CheckState())
    337     {
    338       $this->LoadModules();
    339       if (file_exists($this->FileName)) $this->LoadState();
    340       $this->InstallSystem();
    341       $this->StartSystem();
    342       $this->StartEnabled();
    343     }
    344   }
    345 
    346   function StartAll(): void
    347   {
    348     $this->Perform($this->Modules, array(ModuleAction::Start));
    349   }
    350 
    351   function StartEnabled(): void
    352   {
    353     $this->Perform($this->Modules, array(ModuleAction::Start), array(ModuleCondition::Enabled));
    354   }
    355 
    356   function StartSystem(): void
    357   {
    358     $this->Perform($this->Modules, array(ModuleAction::Start), array(ModuleCondition::System));
    359   }
    360 
    361   function StopAll(): void
    362   {
    363     $this->Perform($this->Modules, array(ModuleAction::Stop));
    364   }
    365 
    366   function InstallAll(): void
    367   {
    368     $this->Perform($this->Modules, array(ModuleAction::Install));
     334  function StartAll(array $Conditions = array(ModuleCondition::All)): void
     335  {
     336    $this->Perform(array(ModuleAction::Start), $Conditions);
     337  }
     338
     339  function StopAll(array $Conditions = array(ModuleCondition::All)): void
     340  {
     341    $this->Perform(array(ModuleAction::Stop), $Conditions);
     342  }
     343
     344  function InstallAll(array $Conditions = array(ModuleCondition::All)): void
     345  {
     346    $this->Perform(array(ModuleAction::Install), $Conditions);
    369347    $this->SaveState();
    370348  }
    371349
    372   function InstallSystem(): void
    373   {
    374     $this->Perform($this->Modules, array(ModuleAction::Install), array(ModuleCondition::System));
     350  function UninstallAll(array $Conditions = array(ModuleCondition::All)): void
     351  {
     352    $this->Perform(array(ModuleAction::Uninstall), $Conditions);
    375353    $this->SaveState();
    376354  }
    377355
    378   function UninstallAll(): void
    379   {
    380     $this->Perform($this->Modules, array(ModuleAction::Uninstall));
     356  function EnableAll(array $Conditions = array(ModuleCondition::All)): void
     357  {
     358    $this->Perform(array(ModuleAction::Enable), $Conditions);
    381359    $this->SaveState();
    382360  }
    383361
    384   function EnableAll(): void
    385   {
    386     $this->Perform($this->Modules, array(ModuleAction::Enable));
     362  function DisableAll(array $Conditions = array(ModuleCondition::All)): void
     363  {
     364    $this->Perform(array(ModuleAction::Disable), $Conditions);
    387365    $this->SaveState();
    388366  }
    389367
    390   function DisableAll(): void
    391   {
    392     $this->Perform($this->Modules, array(ModuleAction::Disable));
     368  function UpgradeAll(array $Conditions = array(ModuleCondition::All)): void
     369  {
     370    $this->Perform(array(ModuleAction::Upgrade), $Conditions);
    393371    $this->SaveState();
    394372  }
     
    426404  {
    427405    $ConfigModules = array();
    428     include($this->FileName);
     406    include $this->FileName;
    429407    foreach ($ConfigModules as $Mod)
    430408    {
    431       if (array_key_exists($Mod['Name'], $this->Modules))
    432       {
    433         $this->Modules[$Mod['Name']] = $this->Modules[$Mod['Name']];
    434         $this->Modules[$Mod['Name']]->Enabled = $Mod['Enabled'];
    435         $this->Modules[$Mod['Name']]->Installed = $Mod['Installed'];
    436         $this->Modules[$Mod['Name']]->InstalledVersion = $Mod['Version'];
     409      $ModuleName = $Mod['Name'];
     410      if (array_key_exists($ModuleName, $this->Modules))
     411      {
     412        if (array_key_exists('Enabled', $Mod))
     413        {
     414          $this->Modules[$ModuleName]->Enabled = $Mod['Enabled'];
     415        }
     416        if (array_key_exists('Installed', $Mod))
     417        {
     418          $this->Modules[$ModuleName]->Installed = $Mod['Installed'];
     419        }
     420        if (array_key_exists('InstalledVersion', $Mod))
     421        {
     422          $this->Modules[$ModuleName]->InstalledVersion = $Mod['InstalledVersion'];
     423        }
    437424      }
    438425    }
     
    447434        'Name' => $Module->Name,
    448435        'Enabled' => $Module->Enabled,
    449         'Version' => $Module->Version,
     436        'InstalledVersion' => $Module->InstalledVersion,
    450437        'Installed' => $Module->Installed
    451438      );
  • trunk/Packages/Common/Common.php

    r887 r897  
    1717include_once(dirname(__FILE__).'/Locale.php');
    1818include_once(dirname(__FILE__).'/Update.php');
    19 include_once(dirname(__FILE__).'/Setup.php');
    2019include_once(dirname(__FILE__).'/Table.php');
    2120include_once(dirname(__FILE__).'/Process.php');
     
    2322include_once(dirname(__FILE__).'/BigInt.php');
    2423include_once(dirname(__FILE__).'/Int128.php');
     24include_once(dirname(__FILE__).'/Modules/Setup.php');
     25include_once(dirname(__FILE__).'/Modules/ModuleManager.php');
    2526
    2627class PackageCommon
  • trunk/Packages/Common/Database.php

    r890 r897  
    4444  public bool $LogSQLQuery;
    4545  public string $LogFile;
     46  public string $Database;
    4647
    4748  function __construct()
     
    5657    $this->LogSQLQuery = false;
    5758    $this->LogFile = dirname(__FILE__).'/../../Query.log';
     59    $this->Database = '';
    5860  }
    5961
     
    6365      else if ($this->Type == 'pgsql') $ConnectionString = 'pgsql:dbname='.$Database.';host='.$Host;
    6466      else $ConnectionString = '';
     67    $this->Database = $Database;
    6568    try {
    6669      $this->PDO = new PDO($ConnectionString, $User, $Password);
    67 
    6870    } catch (Exception $E)
    6971    {
     
    235237    $this->PDO->commit();
    236238  }
     239
     240  public function TableExists(string $Name): bool
     241  {
     242    $DbResult = $this->query('SELECT * FROM information_schema.tables  WHERE table_schema = "'.$this->Database.
     243    '" AND table_name = "'.$Name.'" LIMIT 1');
     244    return $DbResult->num_rows != 0;
     245  }
    237246}
    238247
  • trunk/Packages/Common/Modules/Setup.php

    r896 r897  
    11<?php
    2 
    3 class PageSetupModules extends Page
    4 {
    5   public array $YesNo;
    6 
    7   function __construct(System $System)
    8   {
    9     parent::__construct($System);
    10     $this->FullTitle = T('Modules');
    11     $this->ShortTitle = T('Modules');
    12     $this->ParentClass = 'PageSetup';
    13     $this->YesNo = array(false => T('No'), true => T('Yes'));
    14   }
    15 
    16   function Show(): string
    17   {
    18     $Output = '';
    19     if (array_key_exists('op', $_GET)) $Operation = $_GET['op'];
    20       else $Operation = '';
    21     if ($Operation == 'install')
    22     {
    23       $this->System->ModuleManager->GetModule($_GET['name'])->Install();
    24       $this->System->ModuleManager->SaveState();
    25       $Output .= 'Modul '.$_GET['name'].' instalován<br/>';
    26     } else
    27     if ($Operation == 'uninstall')
    28     {
    29       $this->System->ModuleManager->GetModule($_GET['name'])->Uninstall();
    30       $this->System->ModuleManager->SaveState();
    31       $Output .= 'Modul '.$_GET['name'].' odinstalován<br/>';
    32     } else
    33     if ($Operation == 'enable')
    34     {
    35       $this->System->ModuleManager->GetModule($_GET['name'])->Enable();
    36       $this->System->ModuleManager->SaveState();
    37       $Output .= 'Modul '.$_GET['name'].' povolen<br/>';
    38     } else
    39     if ($Operation == 'disable')
    40     {
    41       $this->System->ModuleManager->GetModule($_GET['name'])->Disable();
    42       $this->System->ModuleManager->SaveState();
    43       $Output .= 'Modul '.$_GET['name'].' zakázán<br/>';
    44     } else
    45     if ($Operation == 'upgrade')
    46     {
    47       $this->System->ModuleManager->GetModule($_GET['name'])->Upgrade();
    48       $this->System->ModuleManager->SaveState();
    49       $Output .= 'Modul '.$_GET['name'].' povýšen<br/>';
    50     }
    51     $Output .= '<h3>Správa modulů</h3>';
    52     $Output .= $this->ShowList();
    53     return $Output;
    54   }
    55 
    56   function ShowList(): string
    57   {
    58     $Output = '';
    59 
    60     $Pageing = new Paging();
    61     $Pageing->TotalCount = count($this->System->ModuleManager->Modules);
    62     $Table = new VisualTable();
    63     $Table->SetColumns(array(
    64       array('Name' => 'Name', 'Title' => 'Jméno'),
    65       array('Name' => 'Creator', 'Title' => 'Tvůrce'),
    66       array('Name' => 'Version', 'Title' => 'Verze'),
    67       array('Name' => 'License', 'Title' => 'Licence'),
    68       array('Name' => 'Installed', 'Title' => 'Instalováno'),
    69       array('Name' => 'Enabled', 'Title' => 'Povoleno'),
    70       array('Name' => 'Description', 'Title' => 'Popis'),
    71       array('Name' => 'Dependencies', 'Title' => 'Závislosti'),
    72       array('Name' => '', 'Title' => 'Akce'),
    73     ));
    74     foreach ($this->System->ModuleManager->Modules as $Module)
    75     {
    76       if (($Module->Dependencies) > 0) $Dependencies = implode(',', $Module->Dependencies);
    77        else $Dependencies = '&nbsp;';
    78       $Actions = '';
    79       if ($Module->Installed == true)
    80       {
    81         $Actions .= ' <a href="?action=modules&amp;op=uninstall&amp;name='.$Module->Name.'">Odinstalovat</a>';
    82         if ($Module->Enabled == true) $Actions .= ' <a href="?action=modules&amp;op=disable&amp;name='.$Module->Name.'">Zakázat</a>';
    83         else $Actions .= ' <a href="?action=modules&amp;op=enable&amp;name='.$Module->Name.'">Povolit</a>';
    84         if ($Module->InstalledVersion != $Module->Version) $Actions .= ' <a href="?action=modules&amp;op=upgrade&amp;name='.$Module->Name.'">Povýšit</a>';
    85       } else $Actions .= ' <a href="?action=modules&amp;op=install&amp;name='.$Module->Name.'">Instalovat</a>';
    86 
    87       $Table->Table->Cells[] = array($Module->Name,
    88         $Module->Creator, $Module->Version,
    89         $Module->License,  $this->YesNo[$Module->Installed],
    90         $this->YesNo[$Module->Enabled], $Module->Description,
    91         $Dependencies, $Actions);
    92     }
    93     $Output .= $Pageing->Show();
    94     $Output .= $Table->Show();
    95     $Output .= $Pageing->Show();
    96     //$Output .= '<p><a href="?A=SaveToDb">Uložit do databáze</a></p>';
    97     return $Output;
    98   }
    99 }
    1002
    1013class PageSetup extends Page
     
    14850          $Output .= '<a href="?action=upgrade">'.T('Upgrade').'</a> ';
    14951        $Output .= '<a href="?action=insert_sample_data">Vložit vzorová data</a> ';
    150         $Output .= '<a href="?action=reload_modules">Obnovit seznam modulů</a> ';
     52        $Output .= '<a href="?action=reload-modules">Obnovit seznam modulů</a> ';
    15153        $Output .= '<a href="?action=uninstall">Odinstalovat</a> ';
    152         $Output .= '<a href="'.$this->System->Link('/setup/modules/').'">Správa modulů</a> ';
     54        $Output .= '<a href="'.$this->System->Link('/modules/').'">Správa modulů</a> ';
    15355        $Output .= '<a href="?action=models">Přegenerovat modely</a> ';
    15456      } else $Output .= '<a href="?action=install">Instalovat</a> ';
     
    198100          try
    199101          {
    200             $Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->Upgrade();
     102            $this->System->ModuleManager->UpgradeAll(array(ModuleCondition::System));
    201103          } catch (Exception $E)
    202104          {
     
    208110        else if ($Action == 'install')
    209111        {
    210           $Output .= '<h3>Instalace</h3>';
    211           ModuleSetup::Cast($this->System->GetModule('Setup'))->Install();
     112          $Output .= '<h3>Instalace systém</h3>';
     113          $this->System->ModuleManager->InstallAll(array(ModuleCondition::System));
    212114          $this->System->ModuleManager->LoadModules();
    213115          $this->System->ModuleManager->SaveState();
     
    217119        else if ($Action == 'uninstall')
    218120        {
    219           $Output .= '<h3>Odinstalace</h3>';
    220           ModuleSetup::Cast($this->System->GetModule('Setup'))->Uninstall();
    221           $Output .= $this->ControlPanel();
    222         }
    223         else if ($Action == 'reload_modules')
     121          $Output .= '<h3>Odinstalace vše</h3>';
     122          $this->System->ModuleManager->UninstallAll(array(ModuleCondition::System));
     123          $Output .= $this->ControlPanel();
     124        }
     125        else if ($Action == 'reload-modules')
    224126        {
    225127          $Output .= '<h3>Znovunačtení seznamu modulů</h3>';
     
    376278  {
    377279    $Output = '';
    378     if (!$this->Database->Connected()) $Output .= T('Can\'t connect to database').'<br>';
    379     else {
     280    if (!$this->Database->Connected())
     281    {
     282      $Output .= T('Can\'t connect to database.').'<br>';
     283    } else
     284    {
    380285      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsInstalled())
    381         $Output .= T('System requires database initialization').'<br>';
    382       else
     286      {
     287        $Output .= T('System requires database initialization.').'<br>';
     288      } else
    383289      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsUpToDate())
    384         $Output .= T('System requires database upgrade').'<br>';
    385     }
    386     $Output .= sprintf(T('Front page was not configured. Continue to %s'), '<a href="'.$this->System->Link('/setup/').'">'.T('setup').'</a>');
     290      {
     291        $Output .= T('System requires database upgrade.').'<br>';
     292      }
     293    }
     294    $Output .= sprintf(T('Front page was not configured. Continue to %s.'), '<a href="'.$this->System->Link('/setup/').'">'.T('setup').'</a>');
    387295    return $Output;
    388296  }
     
    405313    $this->Dependencies = array();
    406314    $this->Revision = 1;
    407     $this->SystemModule = true;
     315    $this->Type = ModuleType::System;
    408316
    409317    // Check database persistence structure
     
    427335    Core::Cast($this->System)->RegisterPage([''], 'PageSetupRedirect');
    428336    Core::Cast($this->System)->RegisterPage(['setup'], 'PageSetup');
    429     Core::Cast($this->System)->RegisterPage(['setup', 'modules'], 'PageSetupModules');
    430337  }
    431338
     
    435342    Core::Cast($this->System)->UnregisterPage(['']);
    436343    Core::Cast($this->System)->UnregisterPage(['setup']);
    437     Core::Cast($this->System)->UnregisterPage(['setup', 'modules']);
    438344  }
    439345
     
    442348    return $this->Database->Connected() and $this->UpdateManager->IsInstalled() and
    443349      $this->UpdateManager->IsUpToDate();
    444   }
    445 
    446   function DoInstall(): void
    447   {
    448     global $DatabaseRevision;
    449 
    450     $this->Database->query('CREATE TABLE IF NOT EXISTS `'.$this->UpdateManager->VersionTable.'` (
    451       `Id` int(11) NOT NULL AUTO_INCREMENT,
    452       `Revision` int(11) NOT NULL,
    453       PRIMARY KEY (`Id`)
    454     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
    455     $this->Database->query("INSERT INTO `".$this->UpdateManager->VersionTable."` (`Id`, `Revision`) VALUES
    456       (1, ".$DatabaseRevision.");");
    457     $this->Database->query("CREATE TABLE IF NOT EXISTS `Module` (
    458       `Id` int(11) NOT NULL AUTO_INCREMENT,
    459       `Name` varchar(255) NOT NULL,
    460       `Title` varchar(255) NOT NULL,
    461       PRIMARY KEY (`Id`)
    462     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
    463     $this->Database->query("CREATE TABLE IF NOT EXISTS `ModuleModel` (
    464       `Id` int(11) NOT NULL AUTO_INCREMENT,
    465       `Name` varchar(255) NOT NULL,
    466       `Module` int(11) NOT NULL,
    467       PRIMARY KEY (`Id`)
    468     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
    469     $this->Database->query('ALTER TABLE `ModuleModel`
    470       ADD CONSTRAINT `ModuleModel_ibfk_1` FOREIGN KEY (`Module`) REFERENCES `Module` (`Id`);');
    471     $this->Database->query("CREATE TABLE IF NOT EXISTS `ModuleModelProperty` (
    472       `Id` int(11) NOT NULL AUTO_INCREMENT,
    473       `Name` varchar(255) NOT NULL,
    474       `Model` int(11) NOT NULL,
    475       `Type` int(11) NOT NULL,
    476       `Nullable` tinyint(1) NOT NULL,
    477       PRIMARY KEY (`Id`)
    478     ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
    479     $this->Database->query('ALTER TABLE `ModuleModelProperty`
    480       ADD CONSTRAINT `ModuleModelProperty_ibfk_1` FOREIGN KEY (`Model`) REFERENCES `ModuleModel` (`Id`);');
    481   }
    482 
    483   function DoUninstall(): void
    484   {
    485     $this->System->ModuleManager->UninstallAll();
    486     $this->Database->query('DROP TABLE `ModuleModelProperty`');
    487     $this->Database->query('DROP TABLE `ModuleModel`');
    488     $this->Database->query('DROP TABLE `Module`');
    489     $this->Database->query('DROP TABLE `'.$this->UpdateManager->VersionTable.'`');
    490   }
    491 
    492   function IsInstalled(): bool
    493   {
    494     $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->UpdateManager->VersionTable.'"');
    495     return $DbResult->num_rows > 0;
    496350  }
    497351
     
    503357    return $Output;
    504358  }
    505 
    506   function InsertSampleData(): void
    507   {
    508   }
    509359}
Note: See TracChangeset for help on using the changeset viewer.