// Copyright: Matthias Steffens 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 and // Matthias Steffens // // 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 and // Matthias Steffens 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 and // Matthias Steffens 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 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
"); // function 'returnMsg()' is defined in 'include.inc.php' } // -------------------------------------------------------------------- ?>