Database = &$Database; $this->Classes = array(); $this->FormTypes = array(); $this->Type = new Type($this); $this->ShowRelation = false; } function RegisterClass(string $Name, array $Class): void { $this->Classes[$Name] = $Class; } function UnregisterClass(string $Name): void { unset($this->Classes[$Name]); } function RegisterFormType(string $Name, array $Class): void { $this->FormTypes[$Name] = $Class; } function UnregisterFormType(string $Name): void { unset($this->FormTypes[$Name]); } function UpdateSQLMeta(): void { $this->Database->query('DELETE FROM ModelField'); $this->Database->query('DELETE FROM Model'); $this->Database->query('DELETE FROM DataType WHERE Parent IS NOT NULL'); $this->Database->query('DELETE FROM DataType'); foreach ($this->Type->TypeDefinitionList as $Name => $Type) { $DbResult = $this->Database->select('DataType', 'Id', 'Name="'.$Name.'"'); if ($DbResult->num_rows == 0) { $this->Database->insert('DataType', array('Name' => $Name, 'Title' => $Type['Class'])); } else { $DbRow = $DbResult->fetch_assoc(); $this->Database->update('DataType', 'Id='.$DbRow['Id'], array('Name' => $Name, 'Title' => $Type['Class'])); } } foreach ($this->Classes as $Class) if (!array_key_exists('SQL', $Class) and ($Class['Table'] != '')) { if (!$this->Database->TableExists($Class['Table'])) continue; echo($Class['Table'].'
'); $Module = 1; $DbResult = $this->Database->select('Model', 'Id', 'Name="'.$Class['Table'].'"'); if ($DbResult->num_rows == 0) { $this->Database->insert('Model', array('Name' => $Class['Table'], 'Title' => $Class['Title'], 'Module' => $Module)); $Model = $this->Database->insert_id; } else { $DbRow = $DbResult->fetch_assoc(); $Model = $DbRow['Id']; $this->Database->update('Model', 'Id='.$DbRow['Id'], array('Name' => $Class['Table'], 'Title' => $Class['Title'], 'Module' => $Module)); } foreach ($Class['Items'] as $Name => $Field) { echo($Name.', '); $DbResult = $this->Database->select('DataType', 'Id', 'Name="'.$Field['Type'].'"'); if ($DbResult->num_rows > 0) { $DbRow = $DbResult->fetch_assoc(); $Type = $DbRow['Id']; } else { $Type = $this->FormTypes[$Field['Type']]; // Search parent type $DbResult = $this->Database->select('DataType', 'Id', 'Name="'.$Type['Type'].'"'); if ($DbResult->num_rows > 0) { $DbRow = $DbResult->fetch_assoc(); $ParentType = $DbRow['Id']; } else $ParentType = null; $this->Database->insert('DataType', array('Name' => $Field['Type'], 'Title' => '', 'Parent' => $ParentType)); $Type = $this->Database->insert_id; } $DbResult = $this->Database->select('ModelField', 'Id', '(Name="'.$Name.'") AND (Model='.$Model.')'); if ($DbResult->num_rows == 0) { $this->Database->insert('ModelField', array('Name' => $Name, 'Title' => $Field['Caption'], 'Model' => $Model, 'Type' => $Type)); } else { $DbRow = $DbResult->fetch_assoc(); $this->Database->update('ModelField', 'Id='.$DbRow['Id'], array('Name' => $Name, 'Title' => $Field['Caption'], 'Model' => $Model, 'Type' => $Type)); } } echo('
'); } } }