<?php

require_once("../config/db.inc.php");

require_once("mysql_table_defs.php");

define("DATABASTE","rcube");
define("DBUSER","rcube");
define("DBPASS","rcube");
define("DBNAME","rcube");
define("DBHOST","localhost");


  function getAllTables () {
    $erg=mysql_query("SHOW TABLES");
    if ($erg===false) {
        return false;
    } else {
        while ($row = mysql_fetch_array ($erg)) {
            $liste[]=$row[0];
        }
        return $liste;
    }
    return $erg;
  }
  
  
  function GetFields($table_name) {
    $result = mysql_query("SHOW COLUMNS FROM `$table_name`");
    if (!$result) {
        return false;
    }
    $fields=array();
    if (mysql_num_rows($result) > 0) {
        $i=0;
        while ($row = mysql_fetch_assoc($result)) {
          $fields[$row['Field']]= $row;
        }
    }
    return $fields;
  }
  
  
  function isFieldValid($definition,$field) {
    if ($definition['Field'] == $field['Field'] and
        $definition['Type'] == $field['Type'] and
        $definition['Null'] == $field['Null'] and
        $definition['Key'] == $field['Key'] and
        $definition['Extra'] == $field['Extra']) {
        return TRUE;
    } else {
        return FALSE;
    }
  }

// just for better reading if called via webbrowser
echo "<pre>\n";

mysql_connect(DBHOST,DBUSER,DBPASS) or die('Could not connect: ' . mysql_error());
mysql_select_db(DBNAME) or die('could not select db: '.DBNAME.', '.mysql_error());

// checking for existance of tables

$tables=array(); // initialize array $tables
$tables= getAllTables();

  
  // used to print out what we should expect as definitions
  $fields=getFields($rcmail_config['db_table_cache']);
   print_r($fields);


  foreach ($table as $cur_table) {
      echo "Table: ".$cur_table['name'].'... ';
      if (!in_array($cur_table['name'],$tables)) {
          echo " NOT found!";
          $result=mysql_query($cur_table['create_table']);
          if (!$result) {
              echo " creation failed\n";
          } else {
              echo " successfully created\n";
          }
      } else {
          echo " found.\n";
      }
      
      // check fields:
      $fields=getFields($cur_table['name']);
      foreach ($cur_table['fields'] as $cur_field) {
          echo "   field: ".$cur_field['Field'].' ... ';
          if (!is_array($fields[$cur_field['Field']])) {
              echo " NOT found.";
              $result=mysql_query($cur_field['add_syntax']);
              if (!$result) {
                  echo " addition failed\n";
              } else {
                  echo " successfully added\n";
              }
              if ($cur_field['index']!="") {
                  $result=mysql_query($cur_field['index']);
                  if (!$result) {
                      echo "     index addition failed\n";
                  } else {
                      echo "     index added\n";
                  }

              }
              
          } else {
              //print_r($cur_field);
              //echo "====";
              //print_r($fields[$cur_field['Field']]);
              if (!isFieldValid($cur_field,$fields[$cur_field['Field']])) {
                  echo "is different... ";
                  $result=mysql_query($cur_field['alter_syntax']);
                  if (!$result) {
                      echo " change failed.\n";
                  } else {
                      echo " successfully changed\n";
                  }
                  
                  if (($cur_field['index']!="") and
                      ($fields[$cur_field['Field']]['Key']!=$cur_field['Key'])) {
                      $result=mysql_query($cur_field['index']);
                      if (!$result) {
                          echo "    index addition failed\n";
                      } else {
                          echo "    index added\n";
                      }
                  }
              } else {              
                  echo " found.\n";
              }
          }
      }
  }

echo "</pre>\n";
  
  
//  var_dump($table_users_fields);
  









?>
