Changeset 897
- Timestamp:
- Jan 22, 2021, 12:04:30 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 12 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Application/Core.php
r896 r897 140 140 RegisterFormClasses($this->FormManager); 141 141 142 $this->ModuleManager->Start(); 142 $this->StartModules(); 143 } 144 145 function StartModules(): void 146 { 147 $ModuleSetup = $this->ModuleManager->LoadModule(dirname(__FILE__).'/Modules/Setup.php'); 148 $ModuleSetup->Install(); 149 $ModuleSetup->Start(); 150 $this->ModuleManager->LoadModules(); 151 $this->ModuleManager->LoadModule(dirname(__FILE__).'/Modules/ModuleManager.php'); 152 if (file_exists($this->ModuleManager->FileName)) $this->ModuleManager->LoadState(); 153 $this->ModuleManager->StartAll(array(ModuleCondition::Enabled)); 143 154 } 144 155 -
trunk/Application/DefaultConfig.php
r887 r897 12 12 array('Name' => 'Database/User', 'Type' => 'String', 'Default' => 'root', 'Title' => 'Uživatel'), 13 13 array('Name' => 'Database/Password', 'Type' => 'Password', 'Default' => '', 'Title' => 'Heslo'), 14 array('Name' => 'Database/Database', 'Type' => 'String', 'Default' => ' centrala', 'Title' => 'Databáze'),14 array('Name' => 'Database/Database', 'Type' => 'String', 'Default' => 'dbhost', 'Title' => 'Databáze'), 15 15 array('Name' => 'Database/Prefix', 'Type' => 'String', 'Default' => '', 'Title' => 'Prefix'), 16 16 array('Name' => 'Database/Charset', 'Type' => 'String', 'Default' => 'utf8', 'Title' => 'Znaková sada'), -
trunk/Common/Form/Form.php
r887 r897 450 450 if (!array_key_exists('SQL', $Class) and ($Class['Table'] != '')) 451 451 { 452 $DbResult = $this->Database->query('SELECT * FROM information_schema.tables WHERE table_schema = "centrala_big" 453 AND table_name = "'.$Class['Table'].'" LIMIT 1'); 454 if ($DbResult->num_rows == 0) continue; 452 if (!$this->Database->TableExists($Class['Table'])) continue; 455 453 456 454 echo($Class['Table'].'<br>'); -
trunk/Modules/Config/Config.php
r895 r897 13 13 $this->Dependencies = array('System'); 14 14 $this->Revision = 1; 15 $this-> SystemModule = true;15 $this->Type = ModuleType::System; 16 16 } 17 17 -
trunk/Modules/NetworkConfigLinux/Generators/DNS.php
r887 r897 160 160 $TTL = 86400; 161 161 $BaseDir = '/var/cache/bind'; 162 //$BaseDir = '/home/chronos/Projekty/centrala/trunk/var/named';163 162 if (!file_exists($BaseDir)) die('Base directory "'.$BaseDir.'" not exists.'); 164 163 $MailServer = 'centrala'; -
trunk/Modules/Subject/Subject.php
r895 r897 127 127 'Filter' => '1', 128 128 )); 129 ModuleIS::Cast( $this->System->GetModule('IS'))->RegisterDashboardItem('Subject',129 ModuleIS::Cast(Core::Cast($this->System)->GetModule('IS'))->RegisterDashboardItem('Subject', 130 130 array($this, 'ShowDashboardItem')); 131 131 } -
trunk/Modules/System/System.php
r896 r897 2 2 3 3 include_once(dirname(__FILE__).'/SystemModels.php'); 4 5 class PageModules extends Page6 {7 function __construct(System $System)8 {9 parent::__construct($System);10 $this->FullTitle = 'Správa modulů';11 $this->ShortTitle = 'Moduly';12 $this->ParentClass = 'PagePortal';13 }14 15 function ShowList(): string16 {17 $Output = '';18 $DbResult = $this->Database->query('SELECT COUNT(*) FROM `Module`');19 $DbRow = $DbResult->fetch_row();20 $PageList = GetPageList('Modules', $DbRow[0]);21 22 $Output .= $PageList['Output'];23 $Output .= '<table class="WideTable" style="font-size: small;">';24 25 $TableColumns = array(26 array('Name' => 'Name', 'Title' => 'Jméno'),27 array('Name' => 'Creator', 'Title' => 'Tvůrce'),28 array('Name' => 'Version', 'Title' => 'Verze'),29 array('Name' => 'License', 'Title' => 'Licence'),30 array('Name' => 'Installed', 'Title' => 'Instalováno'),31 array('Name' => 'Description', 'Title' => 'Popis'),32 array('Name' => 'Dependencies', 'Title' => 'Závislosti'),33 array('Name' => '', 'Title' => 'Akce'),34 );35 $Order = GetOrderTableHeader('Modules', $TableColumns, 'Name', 0);36 $Output .= $Order['Output'];37 $Query = 'SELECT *, (SELECT GROUP_CONCAT(`T1`.`Name` SEPARATOR ", ") FROM `ModuleLink` '.38 'LEFT JOIN `Module` AS `T1` ON `T1`.`Id` = `ModuleLink`.`LinkedModule` '.39 'WHERE `ModuleLink`.`Module` = `Module`.`Id`) AS `Dependencies` '.40 'FROM `Module` '.$Order['SQL'].$PageList['SQLLimit'];41 42 $DbResult = $this->Database->query($Query);43 while ($Module = $DbResult->fetch_assoc())44 {45 if ($Module['Dependencies'] != '') $Dependencies = $Module['Dependencies'];46 else $Dependencies = ' ';47 if ($Module['Installed'] == 1) $Installed = 'Ano';48 else $Installed = 'Ne';49 if ($Module['Installed'] == 1) $Actions = '<a href="?A=Uninstall&Id='.$Module['Id'].'">Odinstalovat</a>';50 else $Actions = '<a href="?A=Install&Id='.$Module['Id'].'">Instalovat</a>';51 $Output .= '<tr><td>'.$Module['Name'].'</td>'.52 '<td>'.$Module['Creator'].'</td>'.53 '<td>'.$Module['Version'].'</td>'.54 '<td>'.$Module['License'].'</td>'.55 '<td>'.$Installed.'</td>'.56 '<td>'.$Module['Description'].'</td>'.57 '<td>'.$Dependencies.'</td>'.58 '<td>'.$Actions.'</td></tr>';59 }60 $Output .= '</table>';61 $Output .= $PageList['Output'];62 $Output .= '<p><a href="?A=SaveToDb">Uložit do databáze</a></p>';63 return $Output;64 }65 66 function Show(): string67 {68 $Output = '';69 if (array_key_exists('A', $_GET))70 {71 if ($_GET['A'] == 'SaveToDb')72 {73 $Output .= ModuleSystem::Cast($this->System->GetModule('System'))->SaveToDatabase();74 $Output .= $this->SystemMessage('Načtení modulů', 'Seznam modulů v databázi zaktualizován');75 } else76 if ($_GET['A'] == 'Install')77 {78 $this->System->ModuleManager->LoadModules(false);79 $ModuleName = $this->System->ModuleManager->SearchModuleById($_GET['Id']);80 if ($ModuleName != '')81 {82 $this->System->ModuleManager->GetModule($ModuleName)->Install();83 } else $Output .= 'Modul id '.$_GET['Id'].' nenalezen';84 85 } else86 if ($_GET['A'] == 'Uninstall')87 {88 $ModuleName = $this->System->ModuleManager->SearchModuleById($_GET['Id']);89 if ($ModuleName != '')90 {91 $this->System->ModuleManager->GetModule($ModuleName)->UnInstall();92 } else $Output .= 'Modul id '.$_GET['Id'].' nenalezen';93 } else $Output .= 'Neplatná akce';94 }95 $Output .= $this->ShowList();96 return $Output;97 }98 }99 4 100 5 class ModuleSystem extends AppModule … … 111 16 $this->Description = 'Base system module'; 112 17 $this->Dependencies = array(); 113 $this-> SystemModule = true;18 $this->Type = ModuleType::System; 114 19 } 115 20 … … 120 25 } 121 26 122 function DoBeforeInstall(): void123 {124 $this->Manager->OnInstallModel = array($this, 'InstallModel');125 $this->Manager->OnUninstallModel = array($this, 'UninstallModel');126 }127 128 function DoAfterUninstall(): void129 {130 $this->Manager->OnInstallModel = null;131 $this->Manager->OnUninstallModel = null;132 }133 134 function DoInstall(): void135 {136 $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemVersion` (137 `Id` int(11) NOT NULL AUTO_INCREMENT,138 `Version` varchar(255) COLLATE utf8_czech_ci NOT NULL,139 `Description` datetime NOT NULL,140 PRIMARY KEY (`Id`)141 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1;');142 $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemModule` (143 `Id` int(11) NOT NULL AUTO_INCREMENT,144 `Name` varchar(255) COLLATE utf8_czech_ci NOT NULL,145 `Creator` varchar(255) COLLATE utf8_czech_ci NOT NULL,146 `Version` varchar(255) COLLATE utf8_czech_ci NOT NULL,147 `License` varchar(255) COLLATE utf8_czech_ci NOT NULL,148 `Installed` int(11) NOT NULL,149 `Description` text COLLATE utf8_czech_ci NOT NULL,150 PRIMARY KEY (`Id`)151 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1;');152 153 $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemModuleDependency` (154 `Id` int(11) NOT NULL AUTO_INCREMENT,155 `Module` int(11) NOT NULL,156 `DependencyModule` int(11) NOT NULL,157 PRIMARY KEY (`Id`),158 KEY (`Module`),159 KEY (`DependencyModule`),160 UNIQUE (`Module` , `DependencyModule`)161 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1;');162 $this->Database->query('ALTER TABLE `SystemModuleDependency` ADD CONSTRAINT `SystemModuleDependency_ibfk_1` FOREIGN KEY ( `Module` ) REFERENCES `SystemModule` (`Id`)');163 $this->Database->query('ALTER TABLE `SystemModuleDependency` ADD CONSTRAINT `SystemModuleDependency_ibfk_2` FOREIGN KEY ( `DependencyModule` ) REFERENCES `SystemModule` (`Id`)');164 165 $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemModel` (166 `Id` int(11) NOT NULL AUTO_INCREMENT,167 `Name` varchar(255) COLLATE utf8_czech_ci NOT NULL,168 `Module` int(11) NOT NULL,169 KEY (`Module`),170 PRIMARY KEY (`Id`)171 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1;');172 $this->Database->query('ALTER TABLE `SystemModel` ADD CONSTRAINT `SystemModel_ibfk_1` FOREIGN KEY ( `Module` ) REFERENCES `SystemModule` (`Id`)');173 174 $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemModelProperty` (175 `Id` int(11) NOT NULL AUTO_INCREMENT,176 `Name` varchar(255) COLLATE utf8_czech_ci NOT NULL,177 `Type` varchar(255) COLLATE utf8_czech_ci NOT NULL,178 `Model` int(11) NOT NULL,179 KEY (`Model`),180 PRIMARY KEY (`Id`)181 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1;');182 $this->Database->query('ALTER TABLE `SystemModelProperty` ADD CONSTRAINT `SystemModelProperty_ibfk_1` FOREIGN KEY ( `Model` ) REFERENCES `SystemModel` (`Id`)');183 }184 185 function DoUnInstall(): void186 {187 // Delete tables with reverse order188 $this->Database->query('ALTER TABLE `SystemModelProperty` DROP FOREIGN KEY `SystemModelProperty_ibfk_1`');189 $this->Database->query('DROP TABLE IF EXISTS `SystemModelProperty`');190 $this->Database->query('ALTER TABLE `SystemModel` DROP FOREIGN KEY `SystemModel_ibfk_1`');191 $this->Database->query('DROP TABLE IF EXISTS `SystemModel`');192 $this->Database->query('ALTER TABLE `SystemModuleDependency` DROP FOREIGN KEY `SystemModuleDependency_ibfk_1`');193 $this->Database->query('ALTER TABLE `SystemModuleDependency` DROP FOREIGN KEY `SystemModuleDependency_ibfk_2`');194 $this->Database->query('DROP TABLE IF EXISTS `SystemModuleDependency`');195 $this->Database->query('DROP TABLE IF EXISTS `SystemModule`');196 $this->Database->query('DROP TABLE IF EXISTS `SystemVersion`');197 }198 199 27 function DoStart(): void 200 28 { 201 $this->Manager->OnInstallModel = array($this, 'InstallModel');202 $this->Manager->OnUninstallModel = array($this, 'UninstallModel');203 204 Core::Cast($this->System)->RegisterPage(['module'], 'PageModules');205 29 $this->System->FormManager->RegisterClass('Action', array( 206 30 'Title' => 'Akce', … … 239 63 'Name' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''), 240 64 'Items' => array('Type' => 'TActionListType', 'Caption' => 'Položky', 'Default' => ''), 241 ),242 ));243 $this->System->FormManager->RegisterClass('Module', array(244 'Title' => 'Moduly',245 'Table' => 'Module',246 'Items' => array(247 'Name' => array('Type' => 'String', 'Caption' => 'Systémové jméno', 'Default' => ''),248 'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),249 'Description' => array('Type' => 'Text', 'Caption' => 'Popis', 'Default' => ''),250 'Version' => array('Type' => 'String', 'Caption' => 'Verze', 'Default' => ''),251 'License' => array('Type' => 'String', 'Caption' => 'Licence', 'Default' => ''),252 'Creator' => array('Type' => 'String', 'Caption' => 'Tvůrce', 'Default' => ''),253 'HomePage' => array('Type' => 'Hyperlink', 'Caption' => 'Domovské stránky', 'Default' => ''),254 'Installed' => array('Type' => 'Boolean', 'Caption' => 'Instalováno', 'Default' => '', 'ReadOnly' => true),255 'Models' => array('Type' => 'TModelListModule', 'Caption' => 'Modely', 'Default' => ''),256 'Links' => array('Type' => 'TModuleLinkListModule', 'Caption' => 'Vazby', 'Default' => ''),257 ),258 'Actions' => array(259 array('Caption' => 'Aktualizovat z disku', 'URL' => '/module/?A=SaveToDb'),260 ),261 ));262 $this->System->FormManager->RegisterFormType('TModule', array(263 'Type' => 'Reference',264 'Table' => 'Module',265 'Id' => 'Id',266 'Name' => 'Title',267 'Filter' => '1',268 ));269 $this->System->FormManager->RegisterFormType('TModelListModule', array(270 'Type' => 'ManyToOne',271 'Table' => 'Model',272 'Id' => 'Id',273 'Ref' => 'Module',274 'Filter' => '1',275 ));276 $this->System->FormManager->RegisterClass('Model', array(277 'Title' => 'Modely',278 'Table' => 'Model',279 'Items' => array(280 'Name' => array('Type' => 'String', 'Caption' => 'Systémové jméno', 'Default' => ''),281 'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),282 'Module' => array('Type' => 'TModule', 'Caption' => 'Module', 'Default' => ''),283 'Query' => array('Type' => 'String', 'Caption' => 'SQL dotaz', 'Default' => ''),284 'DefaultSortColumn' => array('Type' => 'String', 'Caption' => 'Výchozí sloupce řazení', 'Default' => ''),285 'DefaultSortOrder' => array('Type' => 'Text', 'Caption' => 'Výchozí směr řazení', 'Default' => ''),286 'Fields' => array('Type' => 'TModelFieldListModel', 'Caption' => 'Pole', 'Default' => ''),287 ),288 ));289 $this->System->FormManager->RegisterFormType('TModel', array(290 'Type' => 'Reference',291 'Table' => 'Model',292 'Id' => 'Id',293 'Name' => 'Title',294 'Filter' => '1',295 ));296 $this->System->FormManager->RegisterFormType('TModelFieldListModel', array(297 'Type' => 'ManyToOne',298 'Table' => 'ModelField',299 'Id' => 'Id',300 'Ref' => 'Model',301 'Filter' => '1',302 ));303 $this->System->FormManager->RegisterClass('ModelField', array(304 'Title' => 'Pole modelu',305 'Table' => 'ModelField',306 'Items' => array(307 'Name' => array('Type' => 'String', 'Caption' => 'Systémové jméno', 'Default' => ''),308 'Title' => array('Type' => 'String', 'Caption' => 'Název', 'Default' => ''),309 'Model' => array('Type' => 'TModel', 'Caption' => 'Model', 'Default' => ''),310 'Query' => array('Type' => 'String', 'Caption' => 'SQL dotaz', 'Default' => ''),311 'Type' => array('Type' => 'String', 'Caption' => 'Typ', 'Default' => ''),312 'DefaultValue' => array('Type' => 'String', 'Caption' => 'Výchozí hodnota', 'Default' => ''),313 'IsNull' => array('Type' => 'Boolean', 'Caption' => 'Také nulová hodnota', 'Default' => ''),314 'Suffix' => array('Type' => 'String', 'Caption' => 'Text za', 'Default' => ''),315 ),316 ));317 $this->System->FormManager->RegisterFormType('TModuleLink', array(318 'Type' => 'Reference',319 'Table' => 'ModuleLink',320 'Id' => 'Id',321 'Name' => 'Module',322 'Filter' => '1',323 ));324 $this->System->FormManager->RegisterFormType('TModuleLinkListModule', array(325 'Type' => 'ManyToOne',326 'Table' => 'ModuleLink',327 'Id' => 'Id',328 'Ref' => 'Module',329 'Filter' => '1',330 ));331 $this->System->FormManager->RegisterClass('ModuleLink', array(332 'Title' => 'Vazby modulu',333 'Table' => 'ModuleLink',334 'Items' => array(335 'Module' => array('Type' => 'TModule', 'Caption' => 'Modul', 'Default' => ''),336 'LinkedModule' => array('Type' => 'TModule', 'Caption' => 'Vázaný modul', 'Default' => ''),337 'Type' => array('Type' => 'String', 'Caption' => 'Typ vazby', 'Default' => ''),338 65 ), 339 66 )); … … 412 139 'Filter' => '1', 413 140 )); 414 $this->System->FormManager->RegisterFormType('TModule', array(415 'Type' => 'Reference',416 'Table' => 'Module',417 'Id' => 'Id',418 'Name' => 'Name',419 'Filter' => '1',420 ));421 422 //$this->Manager->OnModuleChange = array($this, 'ModuleChange');423 //$this->LoadFromDatabase();424 }425 426 function InstallModel(ModelDesc $ModelDesc)427 {428 $Query = "CREATE TABLE IF NOT EXISTS `".$ModelDesc->Name."` (\n";429 $Query .= ' `'.$ModelDesc->PrimaryKey.'` int(11) NOT NULL AUTO_INCREMENT,'."\n";430 foreach ($ModelDesc->Columns as $Column)431 {432 $Query .= " `".$Column->Name."` ";433 if ($Column->Type == ModelColumnType::Integer) $Query .= 'int(11)';434 else if ($Column->Type == ModelColumnType::String) $Query .= 'varchar(255)';435 else if ($Column->Type == ModelColumnType::Float) $Query .= 'varchar(255)';436 else if ($Column->Type == ModelColumnType::Text) $Query .= 'text';437 else if ($Column->Type == ModelColumnType::DateTime) $Query .= 'datetime';438 else if ($Column->Type == ModelColumnType::Reference) $Query .= 'int(11)';439 else if ($Column->Type == ModelColumnType::Boolean) $Query .= 'tinyint(1)';440 else if ($Column->Type == ModelColumnType::Date) $Query .= 'date';441 else if ($Column->Type == ModelColumnType::BigInt) $Query .= 'bigint(20)';442 else if ($Column->Type == ModelColumnType::Enum)443 {444 $Query .= 'enum("'.implode('", "', $Column->States).'")';445 }446 447 if ($Column->Nullable) $Query .= '';448 else $Query .= ' NOT NULL';449 450 $Query .= ' COLLATE utf8_general_ci';451 452 if ($Column->HasDefault)453 {454 if ($Column->Default == null)455 $Query .= ' DEFAULT NULL';456 else $Query .= ' DEFAULT '.$Column->GetDefault();457 }458 $Query .= ",\n";459 }460 $Query .= ' PRIMARY KEY (`'.$ModelDesc->PrimaryKey.'`)';461 foreach ($ModelDesc->Columns as $Column)462 {463 if ($Column->Type == ModelColumnType::Reference)464 $Query .= ','."\n".' KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';465 else if ($Column->Unique)466 $Query .= ','."\n".' UNIQUE KEY `'.$Column->Name.'` (`'.$Column->Name.'`)';467 }468 $Query .= "\n";469 470 if ($ModelDesc->Memory) $Engine = 'MEMORY';471 else $Engine = 'InnoDB';472 $Query .= ') ENGINE='.$Engine.' DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;';473 $I = 1;474 foreach ($ModelDesc->Columns as $Column)475 {476 if ($Column->Type == ModelColumnType::Reference)477 $Query .= "ALTER TABLE `".$ModelDesc->Name."` ".478 "ADD CONSTRAINT `".$ModelDesc->Name."_ibfk_".$I."` FOREIGN KEY (`".$Column->Name."`) REFERENCES `".$Column->RefTable."` (`Id`);";479 $I++;480 }481 $this->Database->query($Query);482 }483 484 function UninstallModel(ModelDesc $ModelDesc)485 {486 $this->Database->query('DROP TABLE IF EXISTS `'.$ModelDesc->Name.'`');487 }488 489 function IsInstalled(): bool490 {491 if ($this->InstalledChecked == false)492 {493 $DbResult = $this->Database->query('SELECT table_name FROM information_schema.tables494 WHERE table_schema = "'.$this->Database->Database.'" AND table_name = "SystemVersion";');495 if ($DbResult->num_rows > 0) $this->Installed = true;496 else $this->Installed = false;497 $this->InstalledChecked = true;498 }499 return $this->Installed;500 }501 502 function ModuleChange($Module): void503 {504 //if ($this->IsInstalled())505 {506 507 if ($Module->IsInstalled()) $Installed = 1;508 else $Installed = 0;509 $this->Database->query('UPDATE `Module` SET `Installed`=1 WHERE `Name`="'.$Module->Name.'"');510 }511 }512 513 function LoadFromDatabase(): void514 {515 //DebugLog('Loading modules...');516 $this->Modules = array();517 $Query = 'SELECT `Id`, `Name`,`Installed` FROM `Module`';518 $DbResult = $this->Database->query($Query);519 while ($Module = $DbResult->fetch_array())520 {521 //echo($Module['Name'].',');522 include_once('Modules/'.$Module['Name'].'/'.$Module['Name'].'.php');523 $ModuleClassName = 'Module'.$Module['Name'];524 $NewModule = new $ModuleClassName($this->Database, $this->Manager);525 $NewModule->Id = $Module['Id'];526 $NewModule->Installed = $Module['Installed'];527 $this->Manager->RegisterModule($NewModule);528 }529 }530 531 function SaveToDatabase(): string532 {533 $Output = '';534 $Modules = array();535 $DbResult = $this->Database->query('SELECT * FROM `Module`');536 while ($DbRow = $DbResult->fetch_assoc())537 {538 $Modules[$DbRow['Name']] = $DbRow;539 if ($this->System->ModuleManager->ModulePresent($DbRow['Name']))540 $this->System->ModuleManager->GetModule($DbRow['Name'])->Id = $DbRow['Id'];541 }542 543 // Add missing544 foreach ($this->System->ModuleManager->Modules as $Module)545 {546 if (!array_key_exists($Module->Name, $Modules))547 {548 $this->Database->insert('Module', array('Name' => $Module->Name,549 'Version' => $Module->Version, 'Creator' => $Module->Creator,550 'HomePage' => $Module->HomePage, 'Title' => $Module->Title,551 'Description' => $Module->Description, 'License' => $Module->License,552 'Installed' => $Module->Installed));553 $this->System->ModuleManager->GetModule($Module->Name)->Id = $this->Database->insert_id;554 }555 else $this->Database->update('Module', 'Name = "'.$Module->Name.'"', array(556 'Version' => $Module->Version, 'Creator' => $Module->Creator,557 'HomePage' => $Module->HomePage, 'Title' => $Module->Title,558 'Description' => $Module->Description, 'License' => $Module->License,559 'Installed' => $Module->Installed));560 }561 562 // Remove exceeding563 foreach ($Modules as $Module)564 if (!$this->System->ModuleManager->ModulePresent($Module['Name']))565 {566 $Output .= 'Removing module '.$Module['Name'].' from list</br/>';567 $this->Database->query('DELETE FROM `ModuleLink` WHERE `Module` = '.$Module['Id']);568 $this->Database->query('DELETE FROM `ModuleLink` WHERE `LinkedModule` = '.$Module['Id']);569 $DbResult = $this->Database->query('SELECT Id FROM `PermissionOperation` WHERE `Module` = '.$Module['Id']);570 while ($DbRow = $DbResult->fetch_assoc())571 {572 $this->Database->query('DELETE FROM `PermissionGroupAssignment` WHERE `AssignedOperation` = '.$DbRow['Id']);573 $this->Database->query('DELETE FROM `PermissionUserAssignment` WHERE `AssignedOperation` = '.$DbRow['Id']);574 }575 $this->Database->query('DELETE FROM `PermissionOperation` WHERE `Module` = '.$Module['Id']);576 $this->Database->query('DELETE FROM `Model` WHERE `Module` = '.$Module['Id']);577 $DbResult = $this->Database->query('SELECT Id FROM `Model` WHERE `Module` = '.$Module['Id']);578 while ($DbRow = $DbResult->fetch_assoc())579 $this->Database->query('DELETE FROM `ModelField` WHERE `Model` = '.$DbRow['Id']);580 $this->Database->query('DELETE FROM `Module` WHERE `Id` = '.$Module['Id']);581 }582 583 // Reload dependencies584 $DbDependency = array();585 $DbResult = $this->Database->query('SELECT * FROM `ModuleLink`');586 while ($DbRow = $DbResult->fetch_assoc())587 $DbDependency[$DbRow['Module']][] = $DbRow['LinkedModule'];588 589 foreach ($this->System->ModuleManager->Modules as $Module)590 {591 // Add missing592 foreach ($Module->Dependencies as $Dependency)593 {594 if (!array_key_exists($Module->Id, $DbDependency) or595 !in_array($this->System->ModuleManager->GetModule($Dependency)->Id, $DbDependency[$Module->Id]))596 {597 if ($this->System->ModuleManager->ModulePresent($Dependency))598 $DependencyId = $this->System->ModuleManager->GetModule($Dependency)->Id;599 else throw new Exception('Dependent module '.$Dependency.' not found');600 $this->Database->insert('ModuleLink', array('Module' => $Module->Id,601 'LinkedModule' => $DependencyId, 'Type' => 'DependOn'));602 }603 }604 605 // Remove exceeding606 if (array_key_exists($Module->Id, $DbDependency))607 foreach ($DbDependency[$Module->Id] as $Dep)608 {609 $DepModName = $this->System->ModuleManager->SearchModuleById($Dep);610 if (!in_array($DepModName, $Module->Dependencies))611 $this->Database->query('DELETE FROM `ModuleLink` WHERE `Module` = '.612 $Module->Id.' AND LinkedModule='.$Dep);613 }614 }615 return $Output;616 141 } 617 142 -
trunk/Modules/User/UserModel.php
r895 r897 62 62 $this->OnlineStateTimeout = 600; // in seconds 63 63 $this->PasswordHash = new PasswordHash(); 64 $this->User = array('Id' => null , 'Member' => null);64 $this->User = array('Id' => null); 65 65 } 66 66 … … 130 130 { 131 131 $Query = $this->Database->select('User', '*', 'Id IS NULL'); 132 $this->User = array('Id' => null , 'Member' => null);132 $this->User = array('Id' => null); 133 133 $Result = USER_NOT_LOGGED; 134 134 } -
trunk/Modules/Wiki/Wiki.php
r895 r897 30 30 while ($DbRow = $DbResult->fetch_assoc()) 31 31 { 32 $this->System->RegisterPage([$DbRow['NormalizedName']], 'PageWiki');33 $this->System->RegisterMenuItem(array(32 Core::Cast($this->System)->RegisterPage([$DbRow['NormalizedName']], 'PageWiki'); 33 Core::Cast($this->System)->RegisterMenuItem(array( 34 34 'Title' => $DbRow['Name'], 35 35 'Hint' => '', 36 'Link' => $this->System->Link('/'.$DbRow['NormalizedName'].'/'),36 'Link' => Core::Cast($this->System)->Link('/'.$DbRow['NormalizedName'].'/'), 37 37 'Permission' => LICENCE_ANONYMOUS, 38 38 'Icon' => '', -
trunk/Packages/Common/AppModule.php
r896 r897 8 8 { 9 9 const System = 0; 10 const Normal= 1;10 const Library = 1; 11 11 const Application = 2; 12 12 } … … 33 33 const NotRunning = 6; 34 34 const System = 7; 35 const User = 8; 35 const Library = 8; 36 const Application = 9; 36 37 } 37 38 … … 57 58 public $OnChange; 58 59 public array $Models; 59 public bool $SystemModule;60 60 61 61 function __construct(Application $System) … … 64 64 $this->Database = &$System->Database; 65 65 $this->Installed = false; 66 $this->InstalledVersion = ''; 66 67 $this->Enabled = false; 67 68 $this->Running = false; … … 72 73 $this->Description = ''; 73 74 $this->Dependencies = array(); 74 $this->Type = ModuleType:: Normal;75 $this->Type = ModuleType::Library; 75 76 $this->Models = array(); 76 $this->SystemModule = false;77 77 } 78 78 … … 87 87 $List = array(); 88 88 $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)); 90 90 $this->DoBeforeInstall(); 91 91 $this->InstallModels(); … … 104 104 $List = array(); 105 105 $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)); 107 107 $this->DoUninstall(); 108 108 $this->UninstallModels(); … … 116 116 $List = array(); 117 117 $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)); 119 119 $this->DoUpgrade(); 120 120 } … … 133 133 $List = array(); 134 134 $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)); 136 136 $this->DoStart(); 137 137 $this->Running = true; … … 144 144 $List = array(); 145 145 $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)); 147 147 $this->DoStop(); 148 148 } … … 160 160 $List = array(); 161 161 $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)); 163 163 $this->Enabled = true; 164 164 } … … 171 171 $List = array(); 172 172 $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)); 174 174 } 175 175 … … 252 252 } 253 253 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 255 260 { 256 261 foreach ($List as $Module) … … 263 268 ($Module->Enabled and in_array(ModuleCondition::Enabled, $Conditions)) or 264 269 (!$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))) 267 273 { 268 274 foreach ($Actions as $Action) … … 294 300 ($DepModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or 295 301 (!$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))) 298 305 { 299 306 array_push($List, $DepModule); … … 315 322 ($RefModule->Installed and in_array(ModuleCondition::Installed, $Conditions)) or 316 323 (!$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)))) 319 327 { 320 328 array_push($List, $RefModule); … … 324 332 } 325 333 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); 369 347 $this->SaveState(); 370 348 } 371 349 372 function InstallSystem(): void373 { 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); 375 353 $this->SaveState(); 376 354 } 377 355 378 function UninstallAll(): void379 { 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); 381 359 $this->SaveState(); 382 360 } 383 361 384 function EnableAll(): void385 { 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); 387 365 $this->SaveState(); 388 366 } 389 367 390 function DisableAll(): void391 { 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); 393 371 $this->SaveState(); 394 372 } … … 426 404 { 427 405 $ConfigModules = array(); 428 include ($this->FileName);406 include $this->FileName; 429 407 foreach ($ConfigModules as $Mod) 430 408 { 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 } 437 424 } 438 425 } … … 447 434 'Name' => $Module->Name, 448 435 'Enabled' => $Module->Enabled, 449 ' Version' => $Module->Version,436 'InstalledVersion' => $Module->InstalledVersion, 450 437 'Installed' => $Module->Installed 451 438 ); -
trunk/Packages/Common/Common.php
r887 r897 17 17 include_once(dirname(__FILE__).'/Locale.php'); 18 18 include_once(dirname(__FILE__).'/Update.php'); 19 include_once(dirname(__FILE__).'/Setup.php');20 19 include_once(dirname(__FILE__).'/Table.php'); 21 20 include_once(dirname(__FILE__).'/Process.php'); … … 23 22 include_once(dirname(__FILE__).'/BigInt.php'); 24 23 include_once(dirname(__FILE__).'/Int128.php'); 24 include_once(dirname(__FILE__).'/Modules/Setup.php'); 25 include_once(dirname(__FILE__).'/Modules/ModuleManager.php'); 25 26 26 27 class PackageCommon -
trunk/Packages/Common/Database.php
r890 r897 44 44 public bool $LogSQLQuery; 45 45 public string $LogFile; 46 public string $Database; 46 47 47 48 function __construct() … … 56 57 $this->LogSQLQuery = false; 57 58 $this->LogFile = dirname(__FILE__).'/../../Query.log'; 59 $this->Database = ''; 58 60 } 59 61 … … 63 65 else if ($this->Type == 'pgsql') $ConnectionString = 'pgsql:dbname='.$Database.';host='.$Host; 64 66 else $ConnectionString = ''; 67 $this->Database = $Database; 65 68 try { 66 69 $this->PDO = new PDO($ConnectionString, $User, $Password); 67 68 70 } catch (Exception $E) 69 71 { … … 235 237 $this->PDO->commit(); 236 238 } 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 } 237 246 } 238 247 -
trunk/Packages/Common/Modules/Setup.php
r896 r897 1 1 <?php 2 3 class PageSetupModules extends Page4 {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(): string17 {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 } else27 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 } else33 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 } else39 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 } else45 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(): string57 {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 = ' ';78 $Actions = '';79 if ($Module->Installed == true)80 {81 $Actions .= ' <a href="?action=modules&op=uninstall&name='.$Module->Name.'">Odinstalovat</a>';82 if ($Module->Enabled == true) $Actions .= ' <a href="?action=modules&op=disable&name='.$Module->Name.'">Zakázat</a>';83 else $Actions .= ' <a href="?action=modules&op=enable&name='.$Module->Name.'">Povolit</a>';84 if ($Module->InstalledVersion != $Module->Version) $Actions .= ' <a href="?action=modules&op=upgrade&name='.$Module->Name.'">Povýšit</a>';85 } else $Actions .= ' <a href="?action=modules&op=install&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 }100 2 101 3 class PageSetup extends Page … … 148 50 $Output .= '<a href="?action=upgrade">'.T('Upgrade').'</a> '; 149 51 $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> '; 151 53 $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> '; 153 55 $Output .= '<a href="?action=models">Přegenerovat modely</a> '; 154 56 } else $Output .= '<a href="?action=install">Instalovat</a> '; … … 198 100 try 199 101 { 200 $ Output .= ModuleSetup::Cast($this->System->GetModule('Setup'))->Upgrade();102 $this->System->ModuleManager->UpgradeAll(array(ModuleCondition::System)); 201 103 } catch (Exception $E) 202 104 { … … 208 110 else if ($Action == 'install') 209 111 { 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)); 212 114 $this->System->ModuleManager->LoadModules(); 213 115 $this->System->ModuleManager->SaveState(); … … 217 119 else if ($Action == 'uninstall') 218 120 { 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') 224 126 { 225 127 $Output .= '<h3>Znovunačtení seznamu modulů</h3>'; … … 376 278 { 377 279 $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 { 380 285 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 383 289 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>'); 387 295 return $Output; 388 296 } … … 405 313 $this->Dependencies = array(); 406 314 $this->Revision = 1; 407 $this-> SystemModule = true;315 $this->Type = ModuleType::System; 408 316 409 317 // Check database persistence structure … … 427 335 Core::Cast($this->System)->RegisterPage([''], 'PageSetupRedirect'); 428 336 Core::Cast($this->System)->RegisterPage(['setup'], 'PageSetup'); 429 Core::Cast($this->System)->RegisterPage(['setup', 'modules'], 'PageSetupModules');430 337 } 431 338 … … 435 342 Core::Cast($this->System)->UnregisterPage(['']); 436 343 Core::Cast($this->System)->UnregisterPage(['setup']); 437 Core::Cast($this->System)->UnregisterPage(['setup', 'modules']);438 344 } 439 345 … … 442 348 return $this->Database->Connected() and $this->UpdateManager->IsInstalled() and 443 349 $this->UpdateManager->IsUpToDate(); 444 }445 446 function DoInstall(): void447 {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`) VALUES456 (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(): void484 {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(): bool493 {494 $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->UpdateManager->VersionTable.'"');495 return $DbResult->num_rows > 0;496 350 } 497 351 … … 503 357 return $Output; 504 358 } 505 506 function InsertSampleData(): void507 {508 }509 359 }
Note:
See TracChangeset
for help on using the changeset viewer.