<?php

include('Database.php');

class DatabaseVersioning
{
  var $Version;
  var $VersionInDb;
  var $FullStructure;
  var $Database;
  var $Updates;
  
  function __construct($Database)
  {
	$this->Database = $Database;
  }
  
  function Check()
  {
    ksort($this->Updates);
	$this->Database->query('CREATE TABLE IF NOT EXISTS `SystemVersion` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Version` varchar(255) NOT NULL,
  `InstallTime` DATETIME NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;');
	$DbResult = $this->Database->query('SELECT `Version` FROM `SystemVersion` WHERE `Id`=1');
	if($DbResult->num_rows > 0) 
	{
	  $DbRow = $DbResult->fetch_assoc();
	  $this->VersionInDb = $DbRow['Version'];
	  echo('DbVersion: '.$this->VersionInDb."\r\n");
      $this->Update();	
	} else 
	{
	  $this->VersionInDb = key(array_slice($this->Updates, -1, 1, TRUE));
      echo('Importing full structure'."\r\n");
      echo('DbVersion: '.$this->VersionInDb."\r\n");
	  $this->Database->query($this->FullStructure);
      $this->Database->insert('SystemVersion', array('Id' => 1, 'Version' => $this->VersionInDb, 
        'InstallTime' => 'NOW()'));
	}
  }	
  
  function Update()
  {	 
	$I = $this->VersionInDb;
	$I++;
	while(true)
    {
      if(array_key_exists($I, $this->Updates))
      {
		echo('Update '.$I.': '.$this->Updates[$I]."\r\n");
        $this->Database->query($this->Updates[$I]);      
        $this->Database->update('SystemVersion', '`Id`=1', array('Version' => $I, 'InstallTime' => 'NOW()'));
        $I++;
      } else break;
	}	
  } 
}

class Application
{
  function CheckVersion()
  {
    $DatabaseVersioning = new DatabaseVersioning($this->Database);
    $DatabaseVersioning->FullStructure = 'CREATE TABLE IF NOT EXISTS `Server` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  `IpAddress` varchar(16) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `User` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) NOT NULL,
  `Password` varchar(255) NOT NULL,
  `FullName` varchar(255) NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
    $DatabaseVersioning->Updates = array(
  1 => 'CREATE TABLE `updater`.`Server` (
`Id` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `Id` )
) ENGINE = InnoDB;',
  2 => 'ALTER TABLE `Server` ADD `IpAddress` VARCHAR( 16 ) NOT NULL;',
  3 => 'CREATE TABLE `updater`.`User` (
`Id` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR( 255 ) NOT NULL ,
`Password` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `Id` )
) ENGINE = InnoDB;',
  4 => 'ALTER TABLE `User` ADD `FullName` VARCHAR( 255 ) NOT NULL;',
  5 => 'ALTER TABLE `User` ADD `RegistrationTime` DATETIME NOT NULL;',
);
    $DatabaseVersioning->Check();
  }
}

$Application = new Application();
$Application->Database = new Database('localhost', 'updater', 'senoslama', 'updater');
$Application->CheckVersion();

?>
