You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

191 lines
6.0 KiB

<?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'
}
// --------------------------------------------------------------------
?>