|
<?php
|
|
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
|
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
|
// original author(s).
|
|
//
|
|
// This code is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
|
// License for more details.
|
|
//
|
|
// File: ./includes/install.inc.php
|
|
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/includes/install.inc.php $
|
|
// Author(s): Richard Karnesky <mailto:karnesky@gmail.com> and
|
|
// Matthias Steffens <mailto:refbase@extracts.de>
|
|
//
|
|
// Created: 16-Aug-06, 18:00
|
|
// Modified: $Date: 2017-04-13 02:00:18 +0000 (Thu, 13 Apr 2017) $
|
|
// $Author: karnesky $
|
|
// $Revision: 1416 $
|
|
|
|
// This file contains functions
|
|
// that are used when installing
|
|
// or updating a refbase database.
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// This function attempts to find a file (or program) on disk. It searches directories
|
|
// given in '$fileLocations' for existing file/program names given in '$fileNames'.
|
|
// Note that, currently, this function won't look into subdirectories.
|
|
//
|
|
// Authors: Richard Karnesky <mailto:karnesky@gmail.com> and
|
|
// Matthias Steffens <mailto:refbase@extracts.de>
|
|
function locateFile($fileLocations, $fileNames, $returnParentDirOnly)
|
|
{
|
|
$filePath = "";
|
|
|
|
foreach ($fileLocations as $location)
|
|
{
|
|
foreach ($fileNames as $name)
|
|
{
|
|
if (file_exists("$location/$name"))
|
|
{
|
|
if ($returnParentDirOnly)
|
|
$filePath = realpath($location) . "/";
|
|
else
|
|
$filePath = realpath("$location/$name");
|
|
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $filePath;
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// Connect to the MySQL database with admin permissions:
|
|
// TODO: I18n
|
|
function connectToMySQLDatabaseAsAdmin($adminUserName, $adminPassword)
|
|
{
|
|
global $hostName; // these variables are specified in 'db.inc.php'
|
|
global $databaseName;
|
|
|
|
global $connection;
|
|
|
|
// Establish a *new* connection that has admin permissions
|
|
// (1) OPEN the database connection:
|
|
if (!($connection = @ mysqli_connect($hostName, $adminUserName, $adminPassword, $databaseName)))
|
|
if (mysqli_errno($connection) != 0) // this works around a stupid(?) behaviour of the Roxen webserver that returns 'errno: 0' on success! ?:-(
|
|
showErrorMsg("The following error occurred while trying to connect to the host:", "");
|
|
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// Check for the presence of a value in a table,
|
|
// and if it doesn't exist, add the given row to that same table:
|
|
//
|
|
// Authors: Richard Karnesky <mailto:karnesky@gmail.com> and
|
|
// Matthias Steffens <mailto:refbase@extracts.de>
|
|
function insertIfNotExists($keysArray, $table, $values, $userID = "")
|
|
{
|
|
global $connection;
|
|
|
|
$selectClauseArray = array();
|
|
$whereClauseArray = array();
|
|
|
|
foreach ($keysArray as $keyColumn => $keyValue)
|
|
{
|
|
$selectClauseArray[] = $keyColumn;
|
|
$whereClauseArray[] = $keyColumn . " = " . quote_smart($keyValue);
|
|
}
|
|
|
|
$query = "SELECT " . implode(", ", $selectClauseArray)
|
|
. " FROM " . $table
|
|
. " WHERE " . implode(" AND ", $whereClauseArray);
|
|
|
|
if ($userID != "") // note that 'if (!empty($userID))' doesn't work here since '$userID = 0' would incorrectly be treated as 'empty'
|
|
$query .= " AND user_id = " . $userID;
|
|
|
|
$result = queryMySQLDatabase($query); // function 'queryMySQLDatabase()' is defined in 'include.inc.php'
|
|
|
|
$rowsFound = @ mysqli_num_rows($result);
|
|
if ($rowsFound == 0)
|
|
{
|
|
$query = "INSERT INTO " . $table . " VALUES " . $values;
|
|
$result = queryMySQLDatabase($query);
|
|
|
|
return "true";
|
|
}
|
|
else
|
|
{
|
|
return "false";
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// Check for the presence of a column in a table,
|
|
// and if it doesn't exist, add the given column to that same table:
|
|
//
|
|
// Author: Richard Karnesky <mailto:karnesky@gmail.com>
|
|
function addColumnIfNotExists($column, $table, $properties)
|
|
{
|
|
global $connection;
|
|
|
|
$present = false;
|
|
|
|
$queryFields = "SHOW FIELDS FROM " . $table;
|
|
$result = queryMySQLDatabase($queryFields); // function 'queryMySQLDatabase()' is defined in 'include.inc.php'
|
|
|
|
while ($row = @ mysqli_fetch_array($result)) // for all fields found, check if any of their names matches the field name that we want to add
|
|
if ($row["Field"] == $column)
|
|
$present = true;
|
|
|
|
if (!$present)
|
|
{
|
|
$query = "ALTER TABLE " . $table . " ADD COLUMN " . $column . " " . $properties;
|
|
$result = queryMySQLDatabase($query);
|
|
|
|
return "true";
|
|
}
|
|
else
|
|
{
|
|
return "false";
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// Check for the presence of a table in the currently selected database,
|
|
// and if it doesn't exist, add the given table to that same database:
|
|
// This is similar to "CREATE TABLE IF NOT EXISTS ..." but allows us
|
|
// to return appropriate feedback
|
|
function addTableIfNotExists($table, $properties)
|
|
{
|
|
global $connection;
|
|
|
|
$present = false;
|
|
|
|
$queryFields = "SHOW TABLES";
|
|
$result = queryMySQLDatabase($queryFields); // function 'queryMySQLDatabase()' is defined in 'include.inc.php'
|
|
|
|
while ($row = @ mysqli_fetch_array($result)) // for all tables found, check if any of their names matches the table name that we want to add
|
|
if ($row[0] == $table)
|
|
$present = true;
|
|
|
|
if (!$present)
|
|
{
|
|
$query = "CREATE TABLE " . $table . " " . $properties;
|
|
$result = queryMySQLDatabase($query);
|
|
|
|
return "true";
|
|
}
|
|
else
|
|
{
|
|
return "false";
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
|
|
// Show error in red:
|
|
function fieldError($fieldName, $errors)
|
|
{
|
|
if (isset($errors[$fieldName]))
|
|
echo returnMsg($errors[$fieldName], "warning", "strong", "", "\n\t\t\t", "\n\t\t\t<br>"); // function 'returnMsg()' is defined in 'include.inc.php'
|
|
}
|
|
|
|
// --------------------------------------------------------------------
|
|
?>
|