File: D:/HostingSpaces/PvdBoogaard/indoorski.nl/backup/oude-site/cms/api/class.upgradeprocess.php
<?php
/**
* Base class for upgrade checks
*
* @package IWP
*/
class iwp_upgradeprocess extends iwp_base
{
/**
* @var $error The last error message
*/
public $error = '';
public $errormessage = null;
/**
* The last warning message, or null if not set
*
* @var string
*/
public $warningmessage = null;
/**
* CheckUpgrade stub function
*
* @return boolean returns false if we need to run the upgrade function
*/
public function CheckUpgrade() {}
public function IgnoreError($mysqlError) { return false; }
/**
* Check if a database table exists
*
* @param string $table The table name to check
*
* @return boolean If the table exists return true
*/
public function TableExists($table)
{
$query = "SHOW TABLES LIKE '".$table."'";
$result = $this->db->FetchOne($query);
// If there is a table with this name already we don't need to run this
// part of the upgrade script
// We have to convert the name to lower case before comparing since
// if MySQL is on windows the tables are converted to lowercase
// when they are returned from our sql statement
if (strtolower($result) == strtolower($table)) {
return true;
} else {
return false;
}
}
/**
* Check if a column exists in a table
*
* @param $table The table with the column we are checking for
* @param $column The column to check for
*
* @return boolean If the column exists in the table return true
*/
public function ColumnExists($table, $column)
{
$query = 'SHOW COLUMNS FROM '.$table." LIKE '".$column."'";
$result = $this->db->Query($query);
$row = $this->db->Fetch($result);
if ($row['Field'] == $column) {
return true;
} else {
return false;
}
}
/**
* GetIndexInfo
*
* Get information about the indexes on $table and return an array with
* this information
*
* @param string $table The name of the table to get information about the indexes for
*
* @return array The array containing the index information in the format
$indexes = array (
'indexname' => array (
'unique' => true/false,
'type' => btree/fulltext,
'columns' = array (
'field1',
'field2',
'field3',
),
),
'index2name' => array (
...
),
)
*/
public function GetIndexInfo($table)
{
$indexes = array();
$query = 'SHOW INDEX FROM '.$table;
$result = $this->db->Query($query);
if ($result === false) {
return array();
}
while ($row = $this->db->Fetch($result)) {
if (!isset($indexes[$row['Key_name']])) {
if (!isset($row['Index_type'])) {
$row['Index_type'] = 'UNDEFINED';
}
$indexes[$row['Key_name']] = array (
'unique' => ($row['Non_unique'] == 0),
'type' => $row['Index_type'],
);
if (!isset($indexes[$row['Key_name']]['columns'])
|| !is_array($indexes[$row['Key_name']]['columns'])) {
$indexes[$row['Key_name']]['columns'] = array();
}
}
$indexes[$row['Key_name']]['columns'][] = $row['Column_name'];
}
return $indexes;
}
/**
* IndexExists
*
* Check if an index exists on some table columns
*
* @param string $table The name of the table
* @param array $columns The array of column names the index is on. Order counts.
* @param bool $unique Is the index a unique index ?
* @param string $type The type of index to check for (BTREE or FULLTEXT)
*
* @return bool Does the index exist as expected or not ?
*/
public function IndexExists($table, $columns, $unique=false, $type='BTREE')
{
$keymatches = array();
$indexname = '';
if (empty($table)) {
$this->error = 'Table name is empty';
return false;
}
if (empty($columns)) {
$this->error = 'Columns is empty';
return false;
}
if (!is_array($columns)) {
$columns = (array)$columns;
}
if (!in_array($type, array('BTREE', 'FULLTEXT', 'UNDEFINED'))) {
$this->error = 'Type of index was not an expected type';
return false;
}
$indexes = $this->GetIndexInfo($table);
if (empty($indexes)) {
$this->error = 'Could not get index information';
return false;
}
foreach ($indexes as $name => $index) {
// Since MySQL can use the first part of the array, lets check
// to see if the required index is already part of another index
$slice = array_slice($index['columns'], 0, count($columns));
// Check if the index is one we can use
if (($index['type'] == $type || $index['type'] == 'UNDEFINED')
&& $slice == $columns) {
return true;
}
}
return false;
}
}