| 1 | <?php
|
|---|
| 2 |
|
|---|
| 3 | include('Database.php');
|
|---|
| 4 |
|
|---|
| 5 | class DatabaseVersioning
|
|---|
| 6 | {
|
|---|
| 7 | var $Version;
|
|---|
| 8 | var $VersionInDb;
|
|---|
| 9 | var $FullStructure;
|
|---|
| 10 | var $Database;
|
|---|
| 11 | var $Updates;
|
|---|
| 12 |
|
|---|
| 13 | function __construct($Database)
|
|---|
| 14 | {
|
|---|
| 15 | $this->Database = $Database;
|
|---|
| 16 | }
|
|---|
| 17 |
|
|---|
| 18 | function Check()
|
|---|
| 19 | {
|
|---|
| 20 | ksort($this->Updates);
|
|---|
| 21 | $this->Database->query('CREATE TABLE IF NOT EXISTS `SystemVersion` (
|
|---|
| 22 | `Id` int(11) NOT NULL AUTO_INCREMENT,
|
|---|
| 23 | `Version` varchar(255) NOT NULL,
|
|---|
| 24 | `InstallTime` DATETIME NOT NULL,
|
|---|
| 25 | PRIMARY KEY (`Id`)
|
|---|
| 26 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
|
|---|
| 27 | $DbResult = $this->Database->query('SELECT `Version` FROM `SystemVersion` WHERE `Id`=1');
|
|---|
| 28 | if($DbResult->num_rows > 0)
|
|---|
| 29 | {
|
|---|
| 30 | $DbRow = $DbResult->fetch_assoc();
|
|---|
| 31 | $this->VersionInDb = $DbRow['Version'];
|
|---|
| 32 | echo('DbVersion: '.$this->VersionInDb."\r\n");
|
|---|
| 33 | $this->Update();
|
|---|
| 34 | } else
|
|---|
| 35 | {
|
|---|
| 36 | $this->VersionInDb = key(array_slice($this->Updates, -1, 1, TRUE));
|
|---|
| 37 | echo('Importing full structure'."\r\n");
|
|---|
| 38 | echo('DbVersion: '.$this->VersionInDb."\r\n");
|
|---|
| 39 | $this->Database->query($this->FullStructure);
|
|---|
| 40 | $this->Database->insert('SystemVersion', array('Id' => 1, 'Version' => $this->VersionInDb,
|
|---|
| 41 | 'InstallTime' => 'NOW()'));
|
|---|
| 42 | }
|
|---|
| 43 | }
|
|---|
| 44 |
|
|---|
| 45 | function Update()
|
|---|
| 46 | {
|
|---|
| 47 | $I = $this->VersionInDb;
|
|---|
| 48 | $I++;
|
|---|
| 49 | while(true)
|
|---|
| 50 | {
|
|---|
| 51 | if(array_key_exists($I, $this->Updates))
|
|---|
| 52 | {
|
|---|
| 53 | echo('Update '.$I.': '.$this->Updates[$I]."\r\n");
|
|---|
| 54 | $this->Database->query($this->Updates[$I]);
|
|---|
| 55 | $this->Database->update('SystemVersion', '`Id`=1', array('Version' => $I, 'InstallTime' => 'NOW()'));
|
|---|
| 56 | $I++;
|
|---|
| 57 | } else break;
|
|---|
| 58 | }
|
|---|
| 59 | }
|
|---|
| 60 | }
|
|---|
| 61 |
|
|---|
| 62 | class Application
|
|---|
| 63 | {
|
|---|
| 64 | function CheckVersion()
|
|---|
| 65 | {
|
|---|
| 66 | $DatabaseVersioning = new DatabaseVersioning($this->Database);
|
|---|
| 67 | $DatabaseVersioning->FullStructure = 'CREATE TABLE IF NOT EXISTS `Server` (
|
|---|
| 68 | `Id` int(11) NOT NULL AUTO_INCREMENT,
|
|---|
| 69 | `Name` varchar(255) NOT NULL,
|
|---|
| 70 | `IpAddress` varchar(16) NOT NULL,
|
|---|
| 71 | PRIMARY KEY (`Id`)
|
|---|
| 72 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
|---|
| 73 |
|
|---|
| 74 | CREATE TABLE IF NOT EXISTS `User` (
|
|---|
| 75 | `Id` int(11) NOT NULL AUTO_INCREMENT,
|
|---|
| 76 | `Name` varchar(255) NOT NULL,
|
|---|
| 77 | `Password` varchar(255) NOT NULL,
|
|---|
| 78 | `FullName` varchar(255) NOT NULL,
|
|---|
| 79 | PRIMARY KEY (`Id`)
|
|---|
| 80 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
|
|---|
| 81 | $DatabaseVersioning->Updates = array(
|
|---|
| 82 | 1 => 'CREATE TABLE `updater`.`Server` (
|
|---|
| 83 | `Id` INT NOT NULL AUTO_INCREMENT ,
|
|---|
| 84 | `Name` VARCHAR( 255 ) NOT NULL ,
|
|---|
| 85 | PRIMARY KEY ( `Id` )
|
|---|
| 86 | ) ENGINE = InnoDB;',
|
|---|
| 87 | 2 => 'ALTER TABLE `Server` ADD `IpAddress` VARCHAR( 16 ) NOT NULL;',
|
|---|
| 88 | 3 => 'CREATE TABLE `updater`.`User` (
|
|---|
| 89 | `Id` INT NOT NULL AUTO_INCREMENT ,
|
|---|
| 90 | `Name` VARCHAR( 255 ) NOT NULL ,
|
|---|
| 91 | `Password` VARCHAR( 255 ) NOT NULL ,
|
|---|
| 92 | PRIMARY KEY ( `Id` )
|
|---|
| 93 | ) ENGINE = InnoDB;',
|
|---|
| 94 | 4 => 'ALTER TABLE `User` ADD `FullName` VARCHAR( 255 ) NOT NULL;',
|
|---|
| 95 | 5 => 'ALTER TABLE `User` ADD `RegistrationTime` DATETIME NOT NULL;',
|
|---|
| 96 | );
|
|---|
| 97 | $DatabaseVersioning->Check();
|
|---|
| 98 | }
|
|---|
| 99 | }
|
|---|
| 100 |
|
|---|
| 101 | $Application = new Application();
|
|---|
| 102 | $Application->Database = new Database('localhost', 'updater', 'senoslama', 'updater');
|
|---|
| 103 | $Application->CheckVersion();
|
|---|
| 104 |
|
|---|
| 105 | ?>
|
|---|