aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/database.php81
-rw-r--r--engine/lib/elgglib.php6
-rw-r--r--install.php38
3 files changed, 119 insertions, 6 deletions
diff --git a/engine/lib/database.php b/engine/lib/database.php
index aa7deb97a..66383afe3 100644
--- a/engine/lib/database.php
+++ b/engine/lib/database.php
@@ -221,17 +221,88 @@
}
- /**
- * Returns the number of rows returned by the last select statement, without the need to re-execute the query.
- *
- * @return int The number of rows returned by the last statement
- */
+ /**
+ * Returns the number of rows returned by the last select statement, without the need to re-execute the query.
+ *
+ * @return int The number of rows returned by the last statement
+ */
function count_last_select() {
$row = get_data_row("SELECT found_rows() as count");
if ($row)
return $row->count;
return 0;
}
+
+ /**
+ * Get the tables currently installed in the Elgg database
+ *
+ * @return array List of tables
+ */
+ function get_db_tables() {
+ $result = get_data("show tables");
+ $result = (array) $result;
+
+ $tables = array();
+
+ if (is_array($result)) {
+ foreach($result as $row) {
+ foreach($row as $element) {
+ $tables[] = $element;
+ }
+ }
+ }
+
+ return $tables;
+ }
+
+ /**
+ * Get the last database error for a particular database link
+ *
+ * @param database link $dblink
+ * @return string Database error message
+ */
+ function get_db_error($dblink) {
+ return mysql_error($dblink);
+ }
+
+ /**
+ * Runs a full database script from disk
+ *
+ * @param string $scriptlocation The full apth to the script
+ */
+ function run_sql_script($scriptlocation) {
+
+ if ($script = file_get_contents($scriptlocation)) {
+
+ $errors = array();
+
+ $script = preg_replace('/\-\-.*\n/', '', $script);
+ $sql_statements = preg_split('/;[\n\r]+/', $script);
+ foreach($sql_statements as $statement) {
+ $statement = trim($statement);
+ if (!empty($statement)) {
+ $result = update_data($statement);
+ if ($result == false) {
+ $error = mysql_error();
+ $error = trim($error);
+ if (!empty($error)) {
+ $errors[] = $error;
+ }
+ }
+ }
+ }
+ if (!empty($errors)) {
+ $errortxt = "";
+ foreach($errors as $error)
+ $errortxt .= " {$error};";
+ throw new DatabaseException("There were a number of issues: " . $errortxt);
+ }
+
+ } else {
+ throw new DatabaseException("Elgg couldn't find the requested database script at {$scriptlocation}.");
+ }
+
+ }
// Stuff for initialisation
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 53771f896..b68258470 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -24,10 +24,14 @@
* @return nothing|false
*/
- function forward($location) {
+ function forward($location = "") {
if (!headers_sent()) {
$_SESSION['messages'] = system_messages();
+ if (substr_count($location, 'http://') == 0) {
+ global $CONFIG;
+ $location = $CONFIG->url . $location;
+ }
header("Location: {$location}");
exit;
}
diff --git a/install.php b/install.php
new file mode 100644
index 000000000..5e253eb1b
--- /dev/null
+++ b/install.php
@@ -0,0 +1,38 @@
+<?php
+
+ /**
+ * Elgg install script
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.org/
+ */
+
+ /**
+ * Start the Elgg engine
+ */
+ require_once(dirname(__FILE__) . "/engine/start.php");
+ global $CONFIG;
+
+ /**
+ * If we're installed, go back to the homepage
+ */
+ forward();
+
+ /**
+ * Install the database
+ */
+ $tables = get_db_tables();
+ if (!$tables) {
+ run_sql_script(dirname(__FILE__) . "/engine/schema/mysql.sql");
+ }
+
+ /**
+ * Load the front page
+ */
+ echo page_draw(null, elgg_view("homepage"));
+
+?> \ No newline at end of file