- Timestamp:
- Feb 4, 2021, 11:55:44 PM (4 years ago)
- Location:
- trunk/Packages/Common
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/Common/AppModule.php
r897 r898 71 71 $this->Version = ''; 72 72 $this->Creator = ''; 73 $this->Title = ''; 73 74 $this->Description = ''; 74 75 $this->Dependencies = array(); … … 85 86 { 86 87 if ($this->Installed) return; 88 echo('Install mod '.$this->Name.'<br/>'); 87 89 $List = array(); 88 90 $this->Manager->EnumDependenciesCascade($this, $List, array(ModuleCondition::NotInstalled)); 89 91 $this->Manager->PerformList($List, array(ModuleAction::Install), array(ModuleCondition::NotInstalled)); 90 $this->DoBeforeInstall();91 $this->InstallModels();92 $this->DoInstall();93 92 $this->Installed = true; 94 93 $this->Enabled = true; // Automatically enable installed module 95 94 $this->InstalledVersion = $this->Version; 96 95 $this->Manager->Modules[$this->Name] = $this; 96 $this->DoBeforeInstall(); 97 if ($this->Manager->OnInstallModule != null) 98 { 99 call_user_func($this->Manager->OnInstallModule, $this); 100 } 101 $this->InstallModels(); 102 $this->DoInstall(); 97 103 } 98 104 … … 107 113 $this->DoUninstall(); 108 114 $this->UninstallModels(); 115 if ($this->Manager->OnUninstallModule != null) 116 { 117 call_user_func($this->Manager->OnUninstallModule, $this); 118 } 109 119 $this->DoAfterUninstall(); 110 120 } … … 214 224 foreach ($this->GetModels() as $Model) 215 225 { 216 call_user_func($this->Manager->OnInstallModel, $Model::GetDesc() );226 call_user_func($this->Manager->OnInstallModel, $Model::GetDesc(), $this); 217 227 } 218 228 } … … 225 235 foreach (array_reverse($this->GetModels()) as $Model) 226 236 { 227 call_user_func($this->Manager->OnUninstallModel, $Model::GetDesc() );237 call_user_func($this->Manager->OnUninstallModel, $Model::GetDesc(), $this); 228 238 } 229 239 } … … 241 251 public $OnInstallModel; 242 252 public $OnUninstsallModel; 253 public $OnInstallModule; 254 public $OnUninstsallModule; 243 255 244 256 function __construct(System $System) … … 250 262 $this->OnInstallModel = null; 251 263 $this->OnUninstallModel = null; 264 $this->OnInstallModule = null; 265 $this->OnUninstallModule = null; 252 266 } 253 267 … … 456 470 } 457 471 472 function GetUniqueModuleId() 473 { 474 $Id = 1; 475 foreach ($this->Modules as $Module) 476 { 477 if ($Module->Id >= $Id) $Id = $Module->Id + 1; 478 } 479 return $Id; 480 } 481 458 482 function LoadModule(string $FileName): AppModule 459 483 { … … 461 485 $ModuleName = 'Module'.pathinfo($FileName, PATHINFO_FILENAME); 462 486 $Module = new $ModuleName($this->System); 487 $Module->Id = $this->GetUniqueModuleId(); 463 488 $this->RegisterModule($Module); 464 489 return $Module; -
trunk/Packages/Common/Base.php
r894 r898 150 150 const Enum = 8; 151 151 const BigInt = 9; 152 153 static function GetName(int $Index) 154 { 155 $Text = array('Integer', 'String', 'Float', 'Text', 'DateTime', 'Reference', 'Boolean', 'Date', 'Enum', 'BigInt'); 156 return $Text[$Index]; 157 } 152 158 } 153 159 -
trunk/Packages/Common/Database.php
r897 r898 129 129 } 130 130 131 function delete(string $Table, string $Condition) 131 function delete(string $Table, string $Condition): void 132 132 { 133 133 $this->query('DELETE FROM `'.$this->Prefix.$Table.'` WHERE '.$Condition); 134 134 } 135 135 136 function insert(string $Table, array $Data) 136 function insert(string $Table, array $Data): void 137 137 { 138 138 $this->query($this->GetInsert($Table, $Data)); -
trunk/Packages/Common/Modules/ModuleManager.php
r897 r898 22 22 $this->Manager->OnInstallModel = array($this, 'InstallModel'); 23 23 $this->Manager->OnUninstallModel = array($this, 'UninstallModel'); 24 $this->Manager->OnInstallModule = array($this, 'InstallModule'); 25 $this->Manager->OnUninstallModule = array($this, 'UninstallModule'); 24 26 25 27 Core::Cast($this->System)->RegisterPage(['modules'], 'PageModules'); … … 140 142 function DoBeforeInstall(): void 141 143 { 144 $this->AddModelDatabase(Module::GetDesc()); 145 $this->Manager->OnInstallModule = array($this, 'InstallModule'); 146 $this->Manager->OnUninstallModule = array($this, 'UninstallModule'); 147 $this->AddModelDatabase(ModuleModel::GetDesc()); 142 148 $this->Manager->OnInstallModel = array($this, 'InstallModel'); 143 149 $this->Manager->OnUninstallModel = array($this, 'UninstallModel'); … … 148 154 $this->Manager->OnInstallModel = null; 149 155 $this->Manager->OnUninstallModel = null; 156 $this->RemoveModelDatabase(ModuleModel::GetDesc()); 157 $this->Manager->OnInstallModule = null; 158 $this->Manager->OnUninstallModule = null; 159 $this->RemoveModelDatabase(Module::GetDesc()); 150 160 } 151 161 152 162 function GetModels(): array 153 163 { 154 return array(Module::GetClassName(), ModuleModel::GetClassName(), ModuleModelField::GetClassName(), 155 ModuleDependency::GetClassName()); 156 } 157 158 function InstallModel(ModelDesc $ModelDesc) 164 return array(ModuleModelField::GetClassName(), ModuleDependency::GetClassName()); 165 } 166 167 function AddModelDatabase(ModelDesc $ModelDesc) 159 168 { 160 169 $Query = "CREATE TABLE IF NOT EXISTS `".$ModelDesc->Name."` (\n"; … … 212 221 } 213 222 214 function UninstallModel(ModelDesc $ModelDesc)223 function RemoveModelDatabase(ModelDesc $ModelDesc) 215 224 { 216 225 /*$Query = ''; … … 227 236 */ 228 237 $this->Database->query('SET foreign_key_checks = 0; DROP TABLE IF EXISTS `'.$ModelDesc->Name.'`'); 238 } 239 240 function InstallModel(ModelDesc $ModelDesc, AppModule $Module) 241 { 242 $this->AddModelDatabase($ModelDesc); 243 $this->Database->insert('ModuleModel', array('Name' => $ModelDesc->Name, 'Module' => $Module->Id)); 244 $ModelId = $this->Database->insert_id; 245 foreach ($ModelDesc->Columns as $Field) 246 { 247 $this->Database->insert('ModuleModelField', array('Name' => $Field->Name, 'Model' => $ModelId, 248 'Type' => ModelColumnType::GetName($Field->Type), 'Nullable' => (int)$Field->Nullable)); 249 } 250 } 251 252 function UninstallModel(ModelDesc $ModelDesc, AppModule $Module) 253 { 254 $this->Database->delete('ModuleModel', '(Name='.$ModelDesc->Name.') AND (Module='.$Module->Id.')'); 255 $this->RemoveModelDatabase($ModelDesc); 256 } 257 258 function InstallModule(AppModule $Module) 259 { 260 echo('Install module '.$Module->Name); 261 $this->Database->insert('Module', array( 262 'Name' => $Module->Name, 263 'Title' => $Module->Title, 264 'Creator' => $Module->Creator, 265 'Version' => $Module->Version, 266 'License' => $Module->License, 267 'Installed' => (int)$Module->Installed, 268 'Description' => $Module->Description, 269 'InstalledVersion' => $Module->InstalledVersion 270 )); 271 $Module->Id = $this->Database->insert_id; 272 } 273 274 function UninstallModule(AppModule $Module) 275 { 276 echo('Uninstall module '.$Module->Name); 277 $this->Database->delete('Module', 'Name='.$Module->Name); 229 278 } 230 279 … … 519 568 $Desc = new ModelDesc(self::GetClassName()); 520 569 $Desc->AddString('Name'); 521 $Desc->AddReference('Mod ule', ModuleModel::GetClassName());570 $Desc->AddReference('Model', ModuleModel::GetClassName()); 522 571 $Desc->AddString('Type'); 523 572 $Desc->AddBoolean('Nullable');
Note:
See TracChangeset
for help on using the changeset viewer.