Changeset 895 for trunk/Packages/Common


Ignore:
Timestamp:
Jan 12, 2021, 10:29:50 PM (4 years ago)
Author:
chronos
Message:
  • Modified: Setup is now AppModule and it is installed and stated as first module.
  • Modified: Improved modular system.
Location:
trunk/Packages/Common
Files:
3 edited

Legend:

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

    r894 r895  
    3232  const Running = 5;
    3333  const NotRunning = 6;
     34  const System = 7;
     35  const User = 8;
    3436}
    3537
     
    5557  public $OnChange;
    5658  public array $Models;
     59  public bool $SystemModule;
    5760
    5861  function __construct(Application $System)
     
    7174    $this->Type = ModuleType::Normal;
    7275    $this->Models = array();
     76    $this->SystemModule = false;
    7377  }
    7478
     
    8488    $this->Manager->EnumDependenciesCascade($this, $List, array(ModuleCondition::NotInstalled));
    8589    $this->Manager->Perform($List, array(ModuleAction::Install), array(ModuleCondition::NotInstalled));
     90    $this->DoBeforeInstall();
    8691    $this->InstallModels();
    8792    $this->DoInstall();
    8893    $this->Installed = true;
     94    $this->Enabled = true; // Automatically enable installed module
    8995    $this->InstalledVersion = $this->Version;
    9096    $this->Manager->Modules[$this->Name] = $this;
     
    101107    $this->DoUninstall();
    102108    $this->UninstallModels();
     109    $this->DoAfterUninstall();
    103110  }
    104111
     
    175182  }
    176183
     184  protected function DoBeforeInstall(): void
     185  {
     186  }
     187
    177188  protected function DoInstall(): void
    178189  {
     
    183194  }
    184195
    185   protected function DoUpgrade(): void
    186   {
     196  protected function DoAfterUninstall(): void
     197  {
     198  }
     199
     200  protected function DoUpgrade(): string
     201  {
     202    return '';
    187203  }
    188204
     
    194210  function InstallModels(): void
    195211  {
    196     foreach ($this->GetModels() as $Model)
    197     {
    198       $this->InstallModel($Model::GetDesc());
     212    if ($this->Manager->OnInstallModel != null)
     213    {
     214      foreach ($this->GetModels() as $Model)
     215      {
     216        call_user_func($this->Manager->OnInstallModel, $Model::GetDesc());
     217      }
    199218    }
    200219  }
     
    202221  function UninstallModels(): void
    203222  {
    204     foreach (array_reverse($this->GetModels()) as $Model)
    205     {
    206       $this->UninstallModel($Model::GetDesc());
    207     }
    208   }
    209 
    210   function InstallModel(ModelDesc $ModelDesc)
    211   {
    212     $Query = "CREATE TABLE IF NOT EXISTS `".$ModelDesc->Name."` (\n";
    213     $Query .= '  `'.$ModelDesc->PrimaryKey.'` int(11) NOT NULL AUTO_INCREMENT,'."\n";
    214     foreach ($ModelDesc->Columns as $Column)
    215     {
    216       $Query .= "  `".$Column->Name."` ";
    217       if ($Column->Type == ModelColumnType::Integer) $Query .= 'int(11)';
    218       else if ($Column->Type == ModelColumnType::String) $Query .= 'varchar(255)';
    219       else if ($Column->Type == ModelColumnType::Float) $Query .= 'varchar(255)';
    220       else if ($Column->Type == ModelColumnType::Text) $Query .= 'text';
    221       else if ($Column->Type == ModelColumnType::DateTime) $Query .= 'datetime';
    222       else if ($Column->Type == ModelColumnType::Reference) $Query .= 'int(11)';
    223       else if ($Column->Type == ModelColumnType::Boolean) $Query .= 'tinyint(1)';
    224       else if ($Column->Type == ModelColumnType::Date) $Query .= 'date';
    225       else if ($Column->Type == ModelColumnType::BigInt) $Query .= 'bigint(20)';
    226       else if ($Column->Type == ModelColumnType::Enum)
    227       {
    228         $Query .= 'enum("'.implode('", "', $Column->States).'")';
    229       }
    230 
    231       if ($Column->Nullable) $Query .= '';
    232         else $Query .= ' NOT NULL';
    233 
    234       $Query .= ' COLLATE utf8_general_ci';
    235 
    236       if ($Column->HasDefault)
    237       {
    238         if ($Column->Default == null)
    239           $Query .= ' DEFAULT NULL';
    240         $Query .= ' DEFAULT '.$Column->GetDefault();
    241       }
    242       $Query .= ",\n";
    243     }
    244     $Query .= '  PRIMARY KEY (`'.$ModelDesc->PrimaryKey.'`)';
    245     foreach ($ModelDesc->Columns as $Column)
    246     {
    247       if ($Column->Type == ModelColumnType::Reference)
    248         $Query .= ','."\n".'  KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';
    249       else if ($Column->Unique)
    250         $Query .= ','."\n".'  UNIQUE KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';
    251     }
    252     $Query .= "\n";
    253 
    254     if ($ModelDesc->Memory) $Engine = 'MEMORY';
    255       else $Engine = 'InnoDB';
    256     $Query .= ') ENGINE='.$Engine.' DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;';
    257     $I = 1;
    258     foreach ($ModelDesc->Columns as $Column)
    259     {
    260       if ($Column->Type == ModelColumnType::Reference)
    261         $Query .= "ALTER TABLE `".$ModelDesc->Name."` ".
    262         "ADD CONSTRAINT `".$ModelDesc->Name."_ibfk_".$I."` FOREIGN KEY (`".$Column->Name."`) REFERENCES `".$Column->RefTable."` (`Id`);";
    263       $I++;
    264     }
    265     $this->Database->query($Query);
    266   }
    267 
    268   function UninstallModel(ModelDesc $ModelDesc)
    269   {
    270     $this->Database->query('DROP TABLE IF EXISTS `'.$ModelDesc->Name.'`');
     223    if ($this->Manager->OnUninstallModel != null)
     224    {
     225      foreach (array_reverse($this->GetModels()) as $Model)
     226      {
     227        call_user_func($this->Manager->OnUninstallModel, $Model::GetDesc());
     228      }
     229    }
    271230  }
    272231}
     
    280239  public string $ModulesDir;
    281240  public $OnLoadModules;
     241  public $OnInstallModel;
     242  public $OnUninstsallModel;
    282243
    283244  function __construct(System $System)
     
    287248    $this->FileName = dirname(__FILE__).'/../../Config/ModulesConfig.php';
    288249    $this->ModulesDir = dirname(__FILE__).'/../../Modules';
     250    $this->OnInstallModel = null;
     251    $this->OnUninstallModel = null;
    289252  }
    290253
    291254  function Perform(array $List, array $Actions, array $Conditions = array(ModuleCondition::All)): void
    292255  {
    293     foreach ($List as $Index => $Module)
     256    foreach ($List as $Module)
    294257    {
    295258      if (in_array(ModuleCondition::All, $Conditions) or
     
    299262        (!$Module->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)) or
    300263        ($Module->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or
    301         (!$Module->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)))
     264        (!$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)))
    302267      {
    303268        foreach ($Actions as $Action)
     
    328293        (!$DepModule->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
    329294        ($DepModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    330         (!$DepModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions)))
     295        (!$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)))
    331298      {
    332299        array_push($List, $DepModule);
     
    347314          (!$RefModule->Enabled and in_array(ModuleCondition::NotEnabled, $Conditions)) or
    348315          ($RefModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or
    349           (!$RefModule->Installed and in_array(ModuleCondition::NotInstalled, $Conditions))))
    350       {
     316          (!$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))))
     319        {
    351320        array_push($List, $RefModule);
    352321        $this->EnumSuperiorDependenciesCascade($RefModule, $List, $Conditions);
     
    357326  function Start(): void
    358327  {
    359     $this->LoadModules();
    360     if (file_exists($this->FileName)) $this->LoadState();
    361     $this->StartEnabled();
     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    }
    362344  }
    363345
     
    370352  {
    371353    $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));
    372359  }
    373360
     
    383370  }
    384371
     372  function InstallSystem(): void
     373  {
     374    $this->Perform($this->Modules, array(ModuleAction::Install), array(ModuleCondition::System));
     375    $this->SaveState();
     376  }
     377
    385378  function UninstallAll(): void
    386379  {
     
    425418    foreach ($this->Modules as $Module)
    426419    {
    427       //DebugLog($Module->Name.' '.$Module->Id);
    428420      if ($Module->Id == $Id) return $Module->Name;
    429421    }
     
    452444    foreach ($this->Modules as $Module)
    453445    {
    454       $Data[] = array('Name' => $Module->Name, 'Enabled' => $Module->Enabled,
    455         'Version' => $Module->Version, 'Installed' => $Module->Installed);
     446      $Data[] = array(
     447        'Name' => $Module->Name,
     448        'Enabled' => $Module->Enabled,
     449        'Version' => $Module->Version,
     450        'Installed' => $Module->Installed
     451      );
    456452    }
    457453    if (file_put_contents($this->FileName, "<?php \n\n\$ConfigModules = ".var_export($Data, true).";\n") === FALSE)
     
    473469  }
    474470
     471  function LoadModule(string $FileName): AppModule
     472  {
     473    include_once($FileName);
     474    $ModuleName = 'Module'.pathinfo($FileName, PATHINFO_FILENAME);
     475    $Module = new $ModuleName($this->System);
     476    $this->RegisterModule($Module);
     477    return $Module;
     478  }
     479
    475480  function LoadModulesFromDir(string $Directory): void
    476481  {
     
    480485      if (is_dir($Directory.'/'.$Item) and ($Item != '.') and ($Item != '..') and ($Item != '.svn'))
    481486      {
    482         include_once($Directory.'/'.$Item.'/'.$Item.'.php');
    483         $ModuleName = 'Module'.$Item;
    484         $this->RegisterModule(new $ModuleName($this->System));
     487        $this->LoadModule($Directory.'/'.$Item.'/'.$Item.'.php');
    485488      }
    486489    }
  • trunk/Packages/Common/Application.php

    r887 r895  
    6565  function GetModule(string $Name): AppModule
    6666  {
    67     return $this->ModuleManager->Modules[$Name];
     67    if (array_key_exists($Name, $this->ModuleManager->Modules))
     68      return $this->ModuleManager->Modules[$Name];
     69      else return null;
    6870  }
    6971
  • trunk/Packages/Common/Setup.php

    r891 r895  
    11<?php
    22
    3 class PageSetup extends Page
     3class PageSetupModules extends Page
    44{
    5   public UpdateManager $UpdateManager;
    6   public array $ConfigDefinition;
    7   public array $Config;
    8   public int $DatabaseRevision;
    9   public int $Revision;
    10   public string $ConfigDir;
    115  public array $YesNo;
    126
     
    148  {
    159    parent::__construct($System);
    16     $this->FullTitle = T('Application setup');
    17     $this->ShortTitle = T('Application setup');
    18     //$this->ParentClass = 'PagePortal';
    19     $this->ConfigDir = dirname(dirname(dirname(__FILE__))).'/Config';
     10    $this->FullTitle = T('Modules');
     11    $this->ShortTitle = T('Modules');
     12    $this->ParentClass = 'PageSetup';
    2013    $this->YesNo = array(false => T('No'), true => T('Yes'));
    2114  }
    2215
    23   function LoginPanel(): string
    24   {
    25     $Output = '<h3>Přihlášení k instalaci</h3>'.
    26       '<form action="?" method="post">'.
    27       '<table>'.
    28       '<tr><td>Systémové heslo:</td><td> <input type="password" name="SystemPassword" value=""/></td></tr>'.
    29       '</table>'.
    30       '<input type="submit" name="login" value="'.T('Login').'"/>'.
    31       '</form>';
    32     return $Output;
    33   }
    34 
    35   function ControlPanel(): string
    36   {
    37     $Output = '<h3>'.T('Instance management').'</h3>';
    38 
    39     $Output .= 'Je připojení k databázi: '.$this->YesNo[$this->UpdateManager->Database->Connected()].'<br/>';
    40     if ($this->UpdateManager->Database->Connected())
    41     {
    42       $Output .= 'Je instalováno: '.$this->YesNo[$this->UpdateManager->IsInstalled()].'<br/>';
    43       if ($this->UpdateManager->IsInstalled())
    44         $Output .= 'Je aktuální: '.$this->YesNo[$this->UpdateManager->IsUpToDate()].'<br/>'.
    45         'Verze databáze: '.$this->UpdateManager->GetDbVersion().'<br/>';
    46       $Output .= 'Verze databáze kódu: '.$this->UpdateManager->Revision.'<br/>';
    47       if ($this->UpdateManager->IsInstalled())
    48       {
    49         if (!$this->UpdateManager->IsUpToDate())
    50           $Output .= '<a href="?action=upgrade">'.T('Upgrade').'</a> ';
    51         $Output .= '<a href="?action=insert_sample_data">Vložit vzorová data</a> ';
    52         $Output .= '<a href="?action=reload_modules">Obnovit seznam modulů</a> ';
    53         $Output .= '<a href="?action=uninstall">Odinstalovat</a> ';
    54         $Output .= '<a href="?action=modules">Správa modulů</a> ';
    55         $Output .= '<a href="?action=models">Přegenerovat modely</a> ';
    56       } else $Output .= '<a href="?action=install">Instalovat</a> ';
    57     }
    58     $Output .= '<a href="?action=configure">Nastavit</a> ';
    59     $Output .= '<a href="?action=logout">Odhlásit</a> ';
    60     $Output .= '<a href="'.$this->System->Link('/').'">'.T('Go to main page').'</a> ';
    61     $Output .= '';
    62     return $Output;
    63   }
    64 
    6516  function Show(): string
    66   {
    67     global $ConfigDefinition, $DatabaseRevision, $Config, $Updates;
    68 
    69     $this->UpdateManager = $this->System->Setup->UpdateManager;
    70     $DefaultConfig = new DefaultConfig();
    71     $this->ConfigDefinition = $DefaultConfig->Get();
    72     $this->DatabaseRevision = $DatabaseRevision;
    73     $this->Config = &$Config;
    74 
    75     $Output = '';
    76     if (isset($this->Config))
    77     {
    78       if (!array_key_exists('SystemPassword', $_SESSION)) $_SESSION['SystemPassword'] = '';
    79       if (array_key_exists('login', $_POST)) $_SESSION['SystemPassword'] = $_POST['SystemPassword'];
    80       if (sha1($_SESSION['SystemPassword']) != $this->Config['SystemPassword'])
    81       {
    82         $Output .= $this->LoginPanel();
    83       } else
    84       {
    85         if (array_key_exists('action', $_GET)) $Action = $_GET['action'];
    86           else $Action = '';
    87         if ($Action == 'logout')
    88         {
    89           $_SESSION['SystemPassword'] = '';
    90           $Output .= 'Odhlášen';
    91           $Output .= $this->LoginPanel();
    92         } else
    93         if ($Action == 'models')
    94         {
    95           $this->System->FormManager->UpdateSQLMeta();
    96         } else
    97         if ($Action == 'upgrade')
    98         {
    99           $Output .= '<h3>Povýšení</h3>';
    100           try {
    101             $Output .= $this->System->Setup->Upgrade();
    102           } catch (Exception $E) {
    103             $Output .= $this->SystemMessage('Chyba aktualizace',
    104               'Došlo k chybě v SQL dotazu při aktualizaci: <br/>'.$E->getMessage());
    105           }
    106           $Output .= $this->ControlPanel();
    107         } else
    108         if ($Action == 'install')
    109         {
    110           $Output .= '<h3>Instalace</h3>';
    111           $this->System->Setup->Install();
    112           $this->System->ModuleManager->LoadModules();
    113           $this->System->ModuleManager->SaveState();
    114           //$Output .= $this->System->Setup->Upgrade();
    115           $Output .= $this->ControlPanel();
    116         } else
    117         if ($Action == 'uninstall')
    118         {
    119           $Output .= '<h3>Odinstalace</h3>';
    120           $this->System->Setup->Uninstall();
    121           $Output .= $this->ControlPanel();
    122         } else
    123         if ($Action == 'reload_modules')
    124         {
    125           $Output .= '<h3>Znovunačtení seznamu modulů</h3>';
    126           $this->System->ModuleManager->LoadModules();
    127           $this->System->ModuleManager->SaveState();
    128           $Output .= $this->ControlPanel();
    129         } else
    130         if ($Action == 'insert_sample_data')
    131         {
    132           $Output .= '<h3>Vložení vzorových dat</h3>';
    133           $this->System->Setup->InsertSampleData();
    134           $Output .= $this->ControlPanel();
    135         } else
    136         if ($Action == 'modules')
    137         {
    138           $Output .= $this->ShowModules();
    139         } else
    140         if ($Action == 'configure_save')
    141         {
    142            $Output .= $this->ConfigSave($this->Config);
    143            $Output .= $this->ControlPanel();
    144         } else
    145         if ($Action == 'configure')
    146         {
    147           $Output .= $this->PrepareConfig($this->Config);
    148         } else
    149         {
    150           $Output .= $this->ControlPanel();
    151         }
    152       }
    153     } else
    154     {
    155       if (array_key_exists('configure_save', $_POST))
    156       {
    157         $Output .= $this->ConfigSave(array());
    158         $Output .= 'Pokračujte k přihlášení <a href="">zde</a>';
    159       } else {
    160         $Output .= $this->PrepareConfig(array());
    161       }
    162     }
    163     return $Output;
    164   }
    165 
    166   function ShowModules(): string
    16717  {
    16818    $Output = '';
     
    23787      $Table->Table->Cells[] = array($Module->Name,
    23888        $Module->Creator, $Module->Version,
    239         $Module->License, $this->YesNo[$Module->Installed],
     89        $Module->License,  $this->YesNo[$Module->Installed],
    24090        $this->YesNo[$Module->Enabled], $Module->Description,
    24191        $Dependencies, $Actions);
     
    24595    $Output .= $Pageing->Show();
    24696    //$Output .= '<p><a href="?A=SaveToDb">Uložit do databáze</a></p>';
     97    return $Output;
     98  }
     99}
     100
     101class PageSetup extends Page
     102{
     103  public UpdateManager $UpdateManager;
     104  public array $ConfigDefinition;
     105  public array $Config;
     106  public int $DatabaseRevision;
     107  public int $Revision;
     108  public string $ConfigDir;
     109  public array $YesNo;
     110
     111  function __construct(System $System)
     112  {
     113    parent::__construct($System);
     114    $this->FullTitle = T('Application setup');
     115    $this->ShortTitle = T('Application setup');
     116    //$this->ParentClass = 'PagePortal';
     117    $this->ConfigDir = dirname(dirname(dirname(__FILE__))).'/Config';
     118    $this->YesNo = array(false => T('No'), true => T('Yes'));
     119  }
     120
     121  function LoginPanel(): string
     122  {
     123    $Output = '<h3>Přihlášení k instalaci</h3>'.
     124      '<form action="?" method="post">'.
     125      '<table>'.
     126      '<tr><td>Systémové heslo:</td><td> <input type="password" name="SystemPassword" value=""/></td></tr>'.
     127      '</table>'.
     128      '<input type="submit" name="login" value="'.T('Login').'"/>'.
     129      '</form>';
     130    return $Output;
     131  }
     132
     133  function ControlPanel(): string
     134  {
     135    $Output = '<h3>'.T('Instance management').'</h3>';
     136
     137    $Output .= 'Je připojení k databázi: '.$this->YesNo[$this->UpdateManager->Database->Connected()].'<br/>';
     138    if ($this->UpdateManager->Database->Connected())
     139    {
     140      $Output .= 'Je instalováno: '.$this->YesNo[$this->UpdateManager->IsInstalled()].'<br/>';
     141      if ($this->UpdateManager->IsInstalled())
     142        $Output .= 'Je aktuální: '.$this->YesNo[$this->UpdateManager->IsUpToDate()].'<br/>'.
     143        'Verze databáze: '.$this->UpdateManager->GetDbVersion().'<br/>';
     144      $Output .= 'Verze databáze kódu: '.$this->UpdateManager->Revision.'<br/>';
     145      if ($this->UpdateManager->IsInstalled())
     146      {
     147        if (!$this->UpdateManager->IsUpToDate())
     148          $Output .= '<a href="?action=upgrade">'.T('Upgrade').'</a> ';
     149        $Output .= '<a href="?action=insert_sample_data">Vložit vzorová data</a> ';
     150        $Output .= '<a href="?action=reload_modules">Obnovit seznam modulů</a> ';
     151        $Output .= '<a href="?action=uninstall">Odinstalovat</a> ';
     152        $Output .= '<a href="'.$this->System->Link('/setup/modules/').'">Správa modulů</a> ';
     153        $Output .= '<a href="?action=models">Přegenerovat modely</a> ';
     154      } else $Output .= '<a href="?action=install">Instalovat</a> ';
     155    }
     156    $Output .= '<a href="?action=configure">Nastavit</a> ';
     157    $Output .= '<a href="?action=logout">Odhlásit</a> ';
     158    $Output .= '<a href="'.$this->System->Link('/').'">'.T('Go to main page').'</a> ';
     159    $Output .= '';
     160    return $Output;
     161  }
     162
     163  function Show(): string
     164  {
     165    global $ConfigDefinition, $DatabaseRevision, $Config, $Updates;
     166
     167    $this->UpdateManager = ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager;
     168    $DefaultConfig = new DefaultConfig();
     169    $this->ConfigDefinition = $DefaultConfig->Get();
     170    $this->DatabaseRevision = $DatabaseRevision;
     171    $this->Config = &$Config;
     172
     173    $Output = '';
     174    if (isset($this->Config))
     175    {
     176      if (!array_key_exists('SystemPassword', $_SESSION)) $_SESSION['SystemPassword'] = '';
     177      if (array_key_exists('login', $_POST)) $_SESSION['SystemPassword'] = $_POST['SystemPassword'];
     178      if (sha1($_SESSION['SystemPassword']) != $this->Config['SystemPassword'])
     179      {
     180        $Output .= $this->LoginPanel();
     181      } else
     182      {
     183        if (array_key_exists('action', $_GET)) $Action = $_GET['action'];
     184          else $Action = '';
     185        if ($Action == 'logout')
     186        {
     187          $_SESSION['SystemPassword'] = '';
     188          $Output .= 'Odhlášen';
     189          $Output .= $this->LoginPanel();
     190        }
     191        else if ($Action == 'models')
     192        {
     193          $this->System->FormManager->UpdateSQLMeta();
     194        }
     195        else if ($Action == 'upgrade')
     196        {
     197          $Output .= '<h3>Povýšení</h3>';
     198          try
     199          {
     200            $Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->Upgrade();
     201          } catch (Exception $E)
     202          {
     203            $Output .= $this->SystemMessage('Chyba aktualizace',
     204              'Došlo k chybě v SQL dotazu při aktualizaci: <br/>'.$E->getMessage());
     205          }
     206          $Output .= $this->ControlPanel();
     207        }
     208        else if ($Action == 'install')
     209        {
     210          $Output .= '<h3>Instalace</h3>';
     211          ModuleSetup::Cast($this->System->GetModule('Setup'))->Install();
     212          $this->System->ModuleManager->LoadModules();
     213          $this->System->ModuleManager->SaveState();
     214          //$Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->Upgrade();
     215          $Output .= $this->ControlPanel();
     216        }
     217        else if ($Action == 'uninstall')
     218        {
     219          $Output .= '<h3>Odinstalace</h3>';
     220          ModuleSetup::Cast($this->System->GetModule('Setup'))->Uninstall();
     221          $Output .= $this->ControlPanel();
     222        }
     223        else if ($Action == 'reload_modules')
     224        {
     225          $Output .= '<h3>Znovunačtení seznamu modulů</h3>';
     226          $this->System->ModuleManager->LoadModules();
     227          $this->System->ModuleManager->SaveState();
     228          $Output .= $this->ControlPanel();
     229        }
     230        else if ($Action == 'insert_sample_data')
     231        {
     232          $Output .= '<h3>Vložení vzorových dat</h3>';
     233          ModuleSetup::Cast($this->System->GetModule('Setup'))->InsertSampleData();
     234          $Output .= $this->ControlPanel();
     235        }
     236        else if ($Action == 'configure_save')
     237        {
     238           $Output .= $this->ConfigSave($this->Config);
     239           $Output .= $this->ControlPanel();
     240        }
     241        else if ($Action == 'configure')
     242        {
     243          $Output .= $this->PrepareConfig($this->Config);
     244        }
     245        else
     246        {
     247          $Output .= $this->ControlPanel();
     248        }
     249      }
     250    } else
     251    {
     252      if (array_key_exists('configure_save', $_POST))
     253      {
     254        $Output .= $this->ConfigSave(array());
     255        $Output .= 'Pokračujte k přihlášení <a href="">zde</a>';
     256      } else {
     257        $Output .= $this->PrepareConfig(array());
     258      }
     259    }
    247260    return $Output;
    248261  }
     
    256269      $Output .= 'Varování: Konfigurační soubor nebude možné zapsat, protože soubor "'.$this->ConfigDir.'/Config.php" není povolen pro zápis!';
    257270    $Output .= '<h3>Nastavení systému</h3>'.
    258         '<form action="?action=configure_save" method="post">'.
    259         '<table>';
     271      '<form action="?action=configure_save" method="post">'.
     272      '<table>';
    260273    foreach ($this->ConfigDefinition as $Def)
    261274    {
     
    279292    }
    280293    $Output .= '</td></tr>'.
    281         '<tr><td colspan="2"><input type="submit" name="configure_save" value="'.T('Save').'"/></td></tr>'.
    282         '</table>'.
    283         '</form>';
     294      '<tr><td colspan="2"><input type="submit" name="configure_save" value="'.T('Save').'"/></td></tr>'.
     295      '</table>'.
     296      '</form>';
    284297    return $Output;
    285298  }
     
    365378    if (!$this->Database->Connected()) $Output .= T('Can\'t connect to database').'<br>';
    366379    else {
    367       if (!$this->System->Setup->UpdateManager->IsInstalled())
     380      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsInstalled())
    368381        $Output .= T('System requires database initialization').'<br>';
    369382      else
    370       if (!$this->System->Setup->UpdateManager->IsUpToDate())
     383      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsUpToDate())
    371384        $Output .= T('System requires database upgrade').'<br>';
    372385    }
     
    376389}
    377390
    378 class Setup extends Model
     391class ModuleSetup extends AppModule
    379392{
    380393  public UpdateManager $UpdateManager;
    381394
    382   function Start()
     395  function __construct(System $System)
    383396  {
    384397    global $DatabaseRevision;
    385398
    386     $this->System->RegisterPage([''], 'PageSetupRedirect');
    387     $this->System->RegisterPage(['setup'], 'PageSetup');
     399    parent::__construct($System);
     400    $this->Name = 'Setup';
     401    $this->Version = '1.0';
     402    $this->Creator = 'Chronos';
     403    $this->License = 'GNU/GPLv3';
     404    $this->Description = 'Base setup module';
     405    $this->Dependencies = array();
     406    $this->Revision = 1;
     407    $this->SystemModule = true;
    388408
    389409    // Check database persistence structure
     
    394414  }
    395415
    396   function Stop()
     416  static function Cast(AppModule $AppModule): ModuleSetup
     417  {
     418    if ($AppModule instanceof ModuleSetup)
     419    {
     420      return $AppModule;
     421    }
     422    throw new Exception('Expected ModuleSetup type but '.gettype($AppModule));
     423  }
     424
     425  function DoStart(): void
     426  {
     427    $this->System->RegisterPage([''], 'PageSetupRedirect');
     428    $this->System->RegisterPage(['setup'], 'PageSetup');
     429    $this->System->RegisterPage(['setup', 'modules'], 'PageSetupModules');
     430  }
     431
     432  function DoStop(): void
    397433  {
    398434    unset($this->UpdateManager);
    399435    $this->System->UnregisterPage(['']);
    400436    $this->System->UnregisterPage(['setup']);
     437    $this->System->UnregisterPage(['setup', 'modules']);
    401438  }
    402439
     
    407444  }
    408445
    409   function Install()
     446  function DoInstall(): void
    410447  {
    411448    global $DatabaseRevision;
     
    444481  }
    445482
    446   function Uninstall()
     483  function DoUninstall(): void
    447484  {
    448485    $this->System->ModuleManager->UninstallAll();
     
    459496  }
    460497
    461   function Upgrade(): string
     498  function DoUpgrade(): string
    462499  {
    463500    $Updates = new Updates();
     
    466503    return $Output;
    467504  }
     505
     506  function InsertSampleData(): void
     507  {
     508  }
    468509}
Note: See TracChangeset for help on using the changeset viewer.