<?php

class UpdateManager
{
  var $Revision;
  var $Trace;
  var $VersionTable;
  var $Database;
  var $InstallMethod;
  
  function __construct()
  {
	  $this->Revision = 0;
	  $this->Trace = array();
	  $this->VersionTable = 'DbVersion';
  }
  
  function GetDbVersion()
  {
	  $DbResult = $this->Database->select('DbVersion', '*', 'Id=1');
	  $Version = $DbResult->fetch_assoc();	 
    return($Version['Revision']);
  }
  
  function IsInstalled()
  {	 
	  $DbResult = $this->Database->query('SHOW TABLES LIKE "'.$this->VersionTable.'"');
    return($DbResult->num_rows > 0);
  }

  function IsUpToDate()
  {
	  return($this->Revision <= $this->GetDbVersion());
  }
  
  function Update()
  {
	  $DbRevision = $this->GetDbVersion();
  	$Output = 'Počáteční revize databáze: '.$DbRevision.'<br/>'; 
	  while($this->Revision > $DbRevision)
    {
	    $TraceItem = $this->Trace[$DbRevision];
	    $Output .= 'Aktualizace na verzi: '.$TraceItem['Revision'].'<br/>';	    
	    $RevUpdate = $TraceItem['Function'];	  
	    $RevUpdate($this);
 	    $DbRevision = $TraceItem['Revision'];
 	    $this->Database->query('UPDATE `DbVersion` SET `Revision`= '.$TraceItem['Revision'].' WHERE `Id`=1');
	  }
	  return($Output);	 
  }
  
  function Install()
  {  	
  	$InstallMethod = $this->InstallMethod; 
  	$InstallMethod($this);
  }
  
  function Uninstall()
  {
    
  }
  
  function Execute($Query)
  {
	  echo($Query.'<br/>');
	  flush();
	  return($this->Database->query($Query));
  }
}
