Ignore:
Timestamp:
Dec 27, 2022, 7:50:23 PM (2 years ago)
Author:
chronos
Message:
  • Modified: Updated Common package to latest version.
  • Modified: Fixes related to PHP 8.x.
Location:
trunk/Packages/Common/Modules
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Common/Modules/Setup.php

    r887 r888  
    11<?php
     2
     3class ModuleSetup extends Module
     4{
     5  public UpdateManager $UpdateManager;
     6
     7  function __construct(System $System)
     8  {
     9    global $DatabaseRevision;
     10
     11    parent::__construct($System);
     12    $this->Name = 'Setup';
     13    $this->Version = '1.0';
     14    $this->Creator = 'Chronos';
     15    $this->License = 'GNU/GPLv3';
     16    $this->Description = 'Base setup module';
     17    $this->Revision = 1;
     18    $this->Type = ModuleType::System;
     19
     20    // Check database persistence structure
     21    $this->UpdateManager = new UpdateManager();
     22    $this->UpdateManager->Database = &$this->Database;
     23    $this->UpdateManager->Revision = $DatabaseRevision;
     24    $this->UpdateManager->InstallMethod = 'FullInstall';
     25  }
     26
     27  static function Cast(Module $Module): ModuleSetup
     28  {
     29    if ($Module instanceof ModuleSetup)
     30    {
     31      return $Module;
     32    }
     33    throw new Exception('Expected ModuleSetup type but '.gettype($Module));
     34  }
     35
     36  function DoStart(): void
     37  {
     38    Core::Cast($this->System)->RegisterPage([''], 'PageSetupRedirect');
     39    Core::Cast($this->System)->RegisterPage(['setup'], 'PageSetup');
     40  }
     41
     42  function DoStop(): void
     43  {
     44    unset($this->UpdateManager);
     45    Core::Cast($this->System)->UnregisterPage(['']);
     46    Core::Cast($this->System)->UnregisterPage(['setup']);
     47  }
     48
     49  function CheckState(): bool
     50  {
     51    return $this->Database->Connected() and $this->UpdateManager->IsInstalled() and
     52      $this->UpdateManager->IsUpToDate();
     53  }
     54
     55  function DoUpgrade(): string
     56  {
     57    $Updates = new Updates();
     58    $this->UpdateManager->Trace = $Updates->Get();
     59    $Output = $this->UpdateManager->Upgrade();
     60    return $Output;
     61  }
     62}
    263
    364class PageSetup extends Page
    465{
    5   var $UpdateManager;
    6   var $ConfigDefinition;
    7   var $Config;
    8   var $DatabaseRevision;
    9   var $Revision;
    10   var $Updates;
    11   var $ConfigDir;
    12 
    13   function __construct($System)
     66  public UpdateManager $UpdateManager;
     67  public array $ConfigDefinition;
     68  public array $Config;
     69  public int $DatabaseRevision;
     70  public int $Revision;
     71  public string $ConfigDir;
     72  public array $YesNo;
     73
     74  function __construct(System $System)
    1475  {
    1576    parent::__construct($System);
    1677    $this->Title = T('Application setup');
    17     //$this->ParentClass = 'PagePortal';
     78    //$this->ParentClass = 'PageSetupRedirect';
    1879    $this->ConfigDir = dirname(dirname(dirname(__FILE__))).'/Config';
    1980    $this->YesNo = array(false => T('No'), true => T('Yes'));
    2081  }
    2182
    22   function LoginPanel()
     83  function LoginPanel(): string
    2384  {
    2485    $Output = '<h3>Přihlášení k instalaci</h3>'.
     
    3293  }
    3394
    34   function ControlPanel()
     95  function ControlPanel(): string
    3596  {
    3697    $Output = '<h3>'.T('Instance management').'</h3>';
     
    49110          $Output .= '<a href="?action=upgrade">'.T('Upgrade').'</a> ';
    50111        $Output .= '<a href="?action=insert_sample_data">Vložit vzorová data</a> ';
    51         $Output .= '<a href="?action=reload_modules">Obnovit seznam modulů</a> ';
     112        $Output .= '<a href="?action=reload-modules">Obnovit seznam modulů</a> ';
    52113        $Output .= '<a href="?action=uninstall">Odinstalovat</a> ';
    53         $Output .= '<a href="?action=modules">Správa modulů</a> ';
     114        $Output .= '<a href="'.$this->System->Link('/modules/').'">Správa modulů</a> ';
    54115        $Output .= '<a href="?action=models">Přegenerovat modely</a> ';
    55116      } else $Output .= '<a href="?action=install">Instalovat</a> ';
     
    62123  }
    63124
    64   function Show()
     125  function Show(): string
    65126  {
    66127    global $ConfigDefinition, $DatabaseRevision, $Config, $Updates;
    67128
    68     $this->UpdateManager = $this->System->Setup->UpdateManager;
     129    $this->UpdateManager = ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager;
    69130    $DefaultConfig = new DefaultConfig();
    70131    $this->ConfigDefinition = $DefaultConfig->Get();
     
    89150          $Output .= 'Odhlášen';
    90151          $Output .= $this->LoginPanel();
    91         } else
    92         if ($Action == 'models')
     152        }
     153        else if ($Action == 'models')
    93154        {
    94155          $this->System->FormManager->UpdateSQLMeta();
    95         } else
    96         if ($Action == 'upgrade')
     156        }
     157        else if ($Action == 'upgrade')
    97158        {
    98159          $Output .= '<h3>Povýšení</h3>';
    99           try {
    100             $Output .= $this->System->Setup->Upgrade();
    101           } catch (Exception $E) {
     160          try
     161          {
     162            $Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->DoUpgrade();
     163            $this->System->ModuleManager->UpgradeAll(array(ModuleCondition::System));
     164          } catch (Exception $E)
     165          {
    102166            $Output .= $this->SystemMessage('Chyba aktualizace',
    103167              'Došlo k chybě v SQL dotazu při aktualizaci: <br/>'.$E->getMessage());
    104168          }
    105169          $Output .= $this->ControlPanel();
    106         } else
    107         if ($Action == 'install')
    108         {
    109           $Output .= '<h3>Instalace</h3>';
    110           $this->System->Setup->Install();
     170        }
     171        else if ($Action == 'install')
     172        {
     173          $Output .= '<h3>Instalace systém</h3>';
     174          global $DatabaseRevision;
     175
     176          $this->Database->query("CREATE TABLE IF NOT EXISTS `".$this->UpdateManager->VersionTable."` (".
     177            '`Id` int(11) NOT NULL AUTO_INCREMENT, '.
     178            '`Revision` int(11) NOT NULL, '.
     179            'PRIMARY KEY (`Id`) '.
     180            ') ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
     181          $DbResult = $this->Database->select($this->UpdateManager->VersionTable, 'Id');
     182          if ($DbResult->num_rows == 0)
     183          {
     184            $this->Database->query("INSERT INTO `".$this->UpdateManager->VersionTable.
     185              "` (`Id`, `Revision`) VALUES (1, ".$DatabaseRevision.");");
     186          }
     187          $this->System->ModuleManager->InstallAll(array(ModuleCondition::System));
    111188          $this->System->ModuleManager->LoadModules();
    112189          $this->System->ModuleManager->SaveState();
    113           //$Output .= $this->System->Setup->Upgrade();
    114           $Output .= $this->ControlPanel();
    115         } else
    116         if ($Action == 'uninstall')
    117         {
    118           $Output .= '<h3>Odinstalace</h3>';
    119           $this->System->Setup->Uninstall();
    120           $Output .= $this->ControlPanel();
    121         } else
    122         if ($Action == 'reload_modules')
     190          //$Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->Upgrade();
     191          $Output .= $this->ControlPanel();
     192        }
     193        else if ($Action == 'uninstall')
     194        {
     195          $Output .= '<h3>Odinstalace vše</h3>';
     196          $this->System->ModuleManager->UninstallAll(array(ModuleCondition::All));
     197          $this->Database->query('DROP TABLE IF EXISTS `'.$this->UpdateManager->VersionTable.'`');
     198          $Output .= $this->ControlPanel();
     199        }
     200        else if ($Action == 'reload-modules')
    123201        {
    124202          $Output .= '<h3>Znovunačtení seznamu modulů</h3>';
     
    126204          $this->System->ModuleManager->SaveState();
    127205          $Output .= $this->ControlPanel();
    128         } else
    129         if ($Action == 'insert_sample_data')
     206        }
     207        else if ($Action == 'insert_sample_data')
    130208        {
    131209          $Output .= '<h3>Vložení vzorových dat</h3>';
    132           $this->System->Setup->InsertSampleData();
    133           $Output .= $this->ControlPanel();
    134         } else
    135         if ($Action == 'modules')
    136         {
    137           $Output .= $this->ShowModules();
    138         } else
    139         if ($Action == 'configure_save')
     210          $this->System->ModuleManager->Perform(array(ModuleAction::InsertSampleData), array(ModuleCondition::Installed));
     211          $Output .= $this->ControlPanel();
     212        }
     213        else if ($Action == 'configure_save')
    140214        {
    141215           $Output .= $this->ConfigSave($this->Config);
    142216           $Output .= $this->ControlPanel();
    143         } else
    144         if ($Action == 'configure')
     217        }
     218        else if ($Action == 'configure')
    145219        {
    146220          $Output .= $this->PrepareConfig($this->Config);
    147         } else
     221        }
     222        else
    148223        {
    149224          $Output .= $this->ControlPanel();
     
    163238  }
    164239
    165   function ShowModules()
    166   {
    167     $Output = '';
    168     if (array_key_exists('op', $_GET)) $Operation = $_GET['op'];
    169       else $Operation = '';
    170     if ($Operation == 'install')
    171     {
    172       $this->System->ModuleManager->Modules[$_GET['name']]->Install();
    173       $this->System->ModuleManager->SaveState();
    174       $Output .= 'Modul '.$_GET['name'].' instalován<br/>';
    175     } else
    176     if ($Operation == 'uninstall')
    177     {
    178       $this->System->ModuleManager->Modules[$_GET['name']]->Uninstall();
    179       $this->System->ModuleManager->SaveState();
    180       $Output .= 'Modul '.$_GET['name'].' odinstalován<br/>';
    181     } else
    182     if ($Operation == 'enable')
    183     {
    184       $this->System->ModuleManager->Modules[$_GET['name']]->Enable();
    185       $this->System->ModuleManager->SaveState();
    186       $Output .= 'Modul '.$_GET['name'].' povolen<br/>';
    187     } else
    188     if ($Operation == 'disable')
    189     {
    190       $this->System->ModuleManager->Modules[$_GET['name']]->Disable();
    191       $this->System->ModuleManager->SaveState();
    192       $Output .= 'Modul '.$_GET['name'].' zakázán<br/>';
    193     } else
    194     if ($Operation == 'upgrade')
    195     {
    196       $this->System->ModuleManager->Modules[$_GET['name']]->Upgrade();
    197       $this->System->ModuleManager->SaveState();
    198       $Output .= 'Modul '.$_GET['name'].' povýšen<br/>';
    199     }
    200     $Output .= '<h3>Správa modulů</h3>';
    201     $Output .= $this->ShowList();
    202     return $Output;
    203   }
    204 
    205   function ShowList()
    206   {
    207     $Output = '';
    208 
    209     $Pageing = new Paging();
    210     $Pageing->TotalCount = count($this->System->ModuleManager->Modules);
    211     $Table = new VisualTable();
    212     $Table->SetColumns(array(
    213       array('Name' => 'Name', 'Title' => 'Jméno'),
    214       array('Name' => 'Creator', 'Title' => 'Tvůrce'),
    215       array('Name' => 'Version', 'Title' => 'Verze'),
    216       array('Name' => 'License', 'Title' => 'Licence'),
    217       array('Name' => 'Installed', 'Title' => 'Instalováno'),
    218       array('Name' => 'Enabled', 'Title' => 'Povoleno'),
    219       array('Name' => 'Description', 'Title' => 'Popis'),
    220       array('Name' => 'Dependencies', 'Title' => 'Závislosti'),
    221       array('Name' => '', 'Title' => 'Akce'),
    222     ));
    223     foreach ($this->System->ModuleManager->Modules as $Module)
    224     {
    225       if (($Module->Dependencies) > 0) $Dependencies = implode(',', $Module->Dependencies);
    226        else $Dependencies = '&nbsp;';
    227       $Actions = '';
    228       if ($Module->Installed == true)
    229       {
    230         $Actions .= ' <a href="?action=modules&amp;op=uninstall&amp;name='.$Module->Name.'">Odinstalovat</a>';
    231         if ($Module->Enabled == true) $Actions .= ' <a href="?action=modules&amp;op=disable&amp;name='.$Module->Name.'">Zakázat</a>';
    232         else $Actions .= ' <a href="?action=modules&amp;op=enable&amp;name='.$Module->Name.'">Povolit</a>';
    233         if ($Module->InstalledVersion != $Module->Version) $Actions .= ' <a href="?action=modules&amp;op=upgrade&amp;name='.$Module->Name.'">Povýšit</a>';
    234       } else $Actions .= ' <a href="?action=modules&amp;op=install&amp;name='.$Module->Name.'">Instalovat</a>';
    235 
    236       $Table->Table->Cells[] = array($Module->Name,
    237         $Module->Creator, $Module->Version,
    238         $Module->License, $this->YesNo[$Module->Installed],
    239         $this->YesNo[$Module->Enabled], $Module->Description,
    240         $Dependencies, $Actions);
    241     }
    242     $Output .= $Pageing->Show();
    243     $Output .= $Table->Show();
    244     $Output .= $Pageing->Show();
    245     //$Output .= '<p><a href="?A=SaveToDb">Uložit do databáze</a></p>';
    246     return $Output;
    247   }
    248 
    249   function PrepareConfig($Config)
     240  function PrepareConfig($Config): string
    250241  {
    251242    $Output = '';
     
    255246      $Output .= 'Varování: Konfigurační soubor nebude možné zapsat, protože soubor "'.$this->ConfigDir.'/Config.php" není povolen pro zápis!';
    256247    $Output .= '<h3>Nastavení systému</h3>'.
    257         '<form action="?action=configure_save" method="post">'.
    258         '<table>';
     248      '<form action="?action=configure_save" method="post">'.
     249      '<table>';
    259250    foreach ($this->ConfigDefinition as $Def)
    260251    {
     
    278269    }
    279270    $Output .= '</td></tr>'.
    280         '<tr><td colspan="2"><input type="submit" name="configure_save" value="'.T('Save').'"/></td></tr>'.
    281         '</table>'.
    282         '</form>';
     271      '<tr><td colspan="2"><input type="submit" name="configure_save" value="'.T('Save').'"/></td></tr>'.
     272      '</table>'.
     273      '</form>';
    283274    return $Output;
    284275  }
     
    322313  }
    323314
    324   function CreateConfig($Config)
     315  function CreateConfig($Config): string
    325316  {
    326317    $Output = "<?php\n\n".
     
    359350class PageSetupRedirect extends Page
    360351{
    361   function Show()
     352  function Show(): string
    362353  {
    363354    $Output = '';
    364     if (!$this->Database->Connected()) $Output .= T('Can\'t connect to database').'<br>';
    365     else {
    366       if (!$this->System->Setup->UpdateManager->IsInstalled())
    367         $Output .= T('System requires database initialization').'<br>';
    368       else
    369       if (!$this->System->Setup->UpdateManager->IsUpToDate())
    370         $Output .= T('System requires database upgrade').'<br>';
    371     }
    372     $Output .= sprintf(T('Front page was not configured. Continue to %s'), '<a href="'.$this->System->Link('/setup/').'">'.T('setup').'</a>');
     355    if (!$this->Database->Connected())
     356    {
     357      $Output .= T('Can\'t connect to database.').'<br>';
     358    } else
     359    {
     360      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsInstalled())
     361      {
     362        $Output .= T('System requires database initialization.').'<br>';
     363      } else
     364      if (!ModuleSetup::Cast($this->System->GetModule('Setup'))->UpdateManager->IsUpToDate())
     365      {
     366        $Output .= T('System requires database upgrade.').'<br>';
     367      }
     368    }
     369    $Output .= sprintf(T('Front page was not configured. Continue to %s.'), '<a href="'.$this->System->Link('/setup/').'">'.T('setup').'</a>');
    373370    return $Output;
    374371  }
    375372}
    376 
    377 class Setup extends Model
    378 {
    379   var $UpdateManager;
    380 
    381   function Start()
    382   {
    383     global $DatabaseRevision;
    384 
    385     $this->System->RegisterPage('', 'PageSetupRedirect');
    386     $this->System->RegisterPage('setup', 'PageSetup');
    387 
    388     // Check database persistence structure
    389     $this->UpdateManager = new UpdateManager();
    390     $this->UpdateManager->Database = &$this->Database;
    391     $this->UpdateManager->Revision = $DatabaseRevision;
    392     $this->UpdateManager->InstallMethod = 'FullInstall';
    393   }
    394 
    395   function Stop()
    396   {
    397     unset($this->UpdateManager);
    398     $this->System->UnregisterPage('');
    399     $this->System->UnregisterPage('setup');
    400   }
    401 
    402   function CheckState()
    403   {
    404     return $this->Database->Connected() and $this->UpdateManager->IsInstalled() and
    405       $this->UpdateManager->IsUpToDate();
    406   }
    407 
    408   function Install()
    409   {
    410     global $DatabaseRevision;
    411 
    412     $this->Database->query('CREATE TABLE IF NOT EXISTS `'.$this->UpdateManager->VersionTable.'` (
    413   `Id` int(11) NOT NULL AUTO_INCREMENT,
    414   `Revision` int(11) NOT NULL,
    415   PRIMARY KEY (`Id`)
    416 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
    417     $this->Database->query('INSERT INTO `'.$this->UpdateManager->VersionTable.'` (`Id`, `Revision`) VALUES
    418       (1, '.$DatabaseRevision.');');
    419     $this->Database->query("CREATE TABLE IF NOT EXISTS `Module` (
    420   `Id` int(11) NOT NULL AUTO_INCREMENT,
    421   `Name` varchar(255) NOT NULL,
    422   `Title` varchar(255) NOT NULL,
    423   PRIMARY KEY (`Id`)
    424 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;");
    425   }
    426 
    427   function Uninstall()
    428   {
    429     $this->System->ModuleManager->UninstallAll();
    430     $this->Database->query('DROP TABLE `Module`');
    431     $this->Database->query('DROP TABLE `'.$this->UpdateManager->VersionTable.'`');
    432   }
    433 
    434   function IsInstalled()
    435   {
    436     $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->UpdateManager->VersionTable.'"');
    437     return $DbResult->num_rows > 0;
    438   }
    439 
    440   function Upgrade()
    441   {
    442     $Updates = new Updates();
    443     $this->UpdateManager->Trace = $Updates->Get();
    444     $Output = $this->UpdateManager->Upgrade();
    445     return $Output;
    446   }
    447 }
Note: See TracChangeset for help on using the changeset viewer.