xml schema for installer
git-svn-id: file:///home/shish/svn/shimmie2/trunk@704 7f39781d-f577-437e-ae19-be835c7a54ca
This commit is contained in:
parent
980ebd5189
commit
4fb0092742
220
install.php
220
install.php
@ -1,7 +1,16 @@
|
|||||||
<?php if(false) { ?>
|
|
||||||
<html>
|
<html>
|
||||||
|
<!--
|
||||||
|
- install.php (c) Shish 2007
|
||||||
|
-
|
||||||
|
- Initialise the database, check that folder
|
||||||
|
- permissions are set properly, set an admin
|
||||||
|
- account.
|
||||||
|
-
|
||||||
|
- This file should be independant of the database
|
||||||
|
- and other such things that aren't ready yet
|
||||||
|
-->
|
||||||
<head>
|
<head>
|
||||||
<title>Error</title>
|
<title>Shimmie Installation</title>
|
||||||
<style>
|
<style>
|
||||||
BODY {background: #EEE;font-family: "Arial", sans-serif;font-size: 14px;}
|
BODY {background: #EEE;font-family: "Arial", sans-serif;font-size: 14px;}
|
||||||
H1, H3 {border: 1px solid black;background: #DDD;text-align: center;}
|
H1, H3 {border: 1px solid black;background: #DDD;text-align: center;}
|
||||||
@ -11,9 +20,12 @@ FORM {margin: 0px;}
|
|||||||
A {text-decoration: none;}
|
A {text-decoration: none;}
|
||||||
A:hover {text-decoration: underline;}
|
A:hover {text-decoration: underline;}
|
||||||
#block {width: 512px; margin: auto; margin-top: 64px;}
|
#block {width: 512px; margin: auto; margin-top: 64px;}
|
||||||
|
#iblock {width: 512px; margin: auto; margin-top: 16px;}
|
||||||
|
TD INPUT {width: 350px;}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<?php if(false) { ?>
|
||||||
<div id="block">
|
<div id="block">
|
||||||
<h1>Install Error</h1>
|
<h1>Install Error</h1>
|
||||||
<p>Shimmie needs to be run via a web server with PHP support -- you
|
<p>Shimmie needs to be run via a web server with PHP support -- you
|
||||||
@ -26,23 +38,25 @@ A:hover {text-decoration: underline;}
|
|||||||
documentation wiki</a>.
|
documentation wiki</a>.
|
||||||
</div>
|
</div>
|
||||||
<div style="display: none;">
|
<div style="display: none;">
|
||||||
|
<PLAINTEXT>
|
||||||
<?php }
|
<?php }
|
||||||
/*
|
|
||||||
* install.php (c) Shish 2007
|
|
||||||
*
|
|
||||||
* Initialise the database, check that folder
|
|
||||||
* permissions are set properly, set an admin
|
|
||||||
* account.
|
|
||||||
*
|
|
||||||
* This file should be independant of the database
|
|
||||||
* and other such things that aren't ready yet
|
|
||||||
*/
|
|
||||||
|
|
||||||
// FIXME: should be called from index
|
// FIXME: should be called from index
|
||||||
do_install();
|
|
||||||
assert_options(ASSERT_ACTIVE, 1);
|
assert_options(ASSERT_ACTIVE, 1);
|
||||||
assert_options(ASSERT_BAIL, 1);
|
assert_options(ASSERT_BAIL, 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file lets anyone destroy the database -- disable it
|
||||||
|
* as soon as the admin is done installing for the first time
|
||||||
|
*/
|
||||||
|
if(is_readable("config.php")) {
|
||||||
|
echo "'config.php' exists -- install function is disabled";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
require_once "lib/adodb/adodb.inc.php";
|
||||||
|
require_once "lib/adodb/adodb-xmlschema03.inc.php";
|
||||||
|
|
||||||
|
do_install();
|
||||||
|
|
||||||
// utilities {{{
|
// utilities {{{
|
||||||
function installer_write_file($fname, $data) {
|
function installer_write_file($fname, $data) {
|
||||||
$fp = fopen($fname, "w");
|
$fp = fopen($fname, "w");
|
||||||
@ -68,19 +82,16 @@ function check_gd_version() {
|
|||||||
|
|
||||||
return $gdversion;
|
return $gdversion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function check_im_version() {
|
||||||
|
if(!ini_get('safe_mode')) {
|
||||||
|
$convert_check = exec("convert");
|
||||||
|
}
|
||||||
|
return (empty($convert_check) ? 0 : 1);
|
||||||
|
}
|
||||||
// }}}
|
// }}}
|
||||||
// init {{{
|
// init {{{
|
||||||
function do_install() {
|
function do_install() {
|
||||||
/*
|
|
||||||
* This file lets anyone destroy the database -- disable it
|
|
||||||
* as soon as the admin is done installing for the first time
|
|
||||||
*/
|
|
||||||
if(is_readable("config.php")) {
|
|
||||||
echo "'config.php' exists -- install function is disabled";
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
require_once "lib/adodb/adodb.inc.php";
|
|
||||||
|
|
||||||
session_start(); // hold temp stuff in session
|
session_start(); // hold temp stuff in session
|
||||||
|
|
||||||
$stage = isset($_GET['stage']) ? $_GET['stage'] : "begin";
|
$stage = isset($_GET['stage']) ? $_GET['stage'] : "begin";
|
||||||
@ -93,31 +104,16 @@ function do_install() {
|
|||||||
|
|
||||||
|
|
||||||
function begin() {
|
function begin() {
|
||||||
if(check_gd_version() == 0) {
|
if(check_gd_version() == 0 && check_im_version() == 0) {
|
||||||
$gd = "<h3>Error</h3>\nPHP's GD extension seems to be missing; ".
|
$gd = "<h3>Error</h3>\nPHP's GD extension seems to be missing, ".
|
||||||
"you can live without it if you have imagemagick installed...";
|
"and imagemagick's \"convert\" command cannot be found - ".
|
||||||
|
"no thumbnailing engines are available.";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$gd = "";
|
$gd = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
print <<<EOD
|
print <<<EOD
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Shimmie2 Installer</title>
|
|
||||||
<style>
|
|
||||||
BODY {background: #EEE;font-family: "Arial", sans-serif;font-size: 14px;}
|
|
||||||
H1, H3 {border: 1px solid black;background: #DDD;text-align: center;}
|
|
||||||
H1 {margin-top: 0px;margin-bottom: 0px;padding: 2px;}
|
|
||||||
H3 {margin-top: 32px;padding: 1px;}
|
|
||||||
FORM {margin: 0px;}
|
|
||||||
A {text-decoration: none;}
|
|
||||||
A:hover {text-decoration: underline;}
|
|
||||||
#iblock {width: 512px; margin: auto; margin-top: 16px;}
|
|
||||||
TD INPUT {width: 350px;}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="iblock">
|
<div id="iblock">
|
||||||
<h1>Shimmie Installer</h1>
|
<h1>Shimmie Installer</h1>
|
||||||
|
|
||||||
@ -145,8 +141,6 @@ TD INPUT {width: 350px;}
|
|||||||
<a href="http://trac.shishnet.org/shimmie2/wiki/Guides/Admin/Install">the
|
<a href="http://trac.shishnet.org/shimmie2/wiki/Guides/Admin/Install">the
|
||||||
documentation wiki</a>.
|
documentation wiki</a>.
|
||||||
</div>
|
</div>
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOD;
|
EOD;
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
@ -164,26 +158,16 @@ function create_tables($dsn) { // {{{
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(substr($dsn, 0, 5) == "mysql") {
|
if(substr($dsn, 0, 5) == "mysql") {
|
||||||
if(create_tables_mysql($db)) {
|
$db->Execute("SET NAMES utf8");
|
||||||
$_SESSION['tables_created'] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(substr($dsn, 0, 5) == "pgsql" || substr($dsn, 0, 8) == "postgres") {
|
|
||||||
if(create_tables_pgsql($db)) {
|
|
||||||
$_SESSION['tables_created'] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(substr($dsn, 0, 6) == "sqlite") {
|
|
||||||
if(create_tables_sqlite($db)) {
|
|
||||||
$_SESSION['tables_created'] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
die("This database format isn't currently supported. Please use either MySQL, PostgreSQL, or SQLite.");
|
|
||||||
}
|
}
|
||||||
|
$schema = new adoSchema($db);
|
||||||
|
$sql = $schema->ParseSchema("ext/upgrade/schema.xml");
|
||||||
|
echo "<pre>"; var_dump($sql); echo "</pre>";
|
||||||
|
$result = $schema->ExecuteSchema();
|
||||||
|
|
||||||
if(!isset($_SESSION['tables_created']) || !$_SESSION['tables_created']) {
|
if(!$result) {
|
||||||
die("Error creating tables");
|
define( 'XMLS_DEBUG', TRUE );
|
||||||
|
die("Error creating tables from XML schema");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$db->Close();
|
$db->Close();
|
||||||
@ -228,9 +212,6 @@ function write_config($dsn) { // {{{
|
|||||||
else {
|
else {
|
||||||
$h_file_content = htmlentities($file_content);
|
$h_file_content = htmlentities($file_content);
|
||||||
print <<<EOD
|
print <<<EOD
|
||||||
<html>
|
|
||||||
<head><title>Shimmie2 Installer</title></head>
|
|
||||||
<body>
|
|
||||||
The web server isn't allowed to write to the config file; please copy
|
The web server isn't allowed to write to the config file; please copy
|
||||||
the text below, save it as 'config.php', and upload it into the shimmie
|
the text below, save it as 'config.php', and upload it into the shimmie
|
||||||
folder manually. Make sure that when you save it, there is no whitespace
|
folder manually. Make sure that when you save it, there is no whitespace
|
||||||
@ -239,15 +220,11 @@ function write_config($dsn) { // {{{
|
|||||||
<p><textarea cols="80" rows="2">$file_content</textarea>
|
<p><textarea cols="80" rows="2">$file_content</textarea>
|
||||||
|
|
||||||
<p>One done, <a href='index.php?q=setup'>Continue</a>
|
<p>One done, <a href='index.php?q=setup'>Continue</a>
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
EOD;
|
EOD;
|
||||||
session_destroy();
|
session_destroy();
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
} // }}}
|
} // }}}
|
||||||
// }}}
|
|
||||||
// install {{{
|
|
||||||
function install_process() { // {{{
|
function install_process() { // {{{
|
||||||
if(!isset($_POST['database_dsn']) || !isset($_POST["admin_name"]) || !isset($_POST["admin_pass"])) {
|
if(!isset($_POST['database_dsn']) || !isset($_POST["admin_name"]) || !isset($_POST["admin_pass"])) {
|
||||||
die("Install is missing some paramaters (database_dsn, admin_name, or admin_pass)");
|
die("Install is missing some paramaters (database_dsn, admin_name, or admin_pass)");
|
||||||
@ -294,111 +271,14 @@ function insert_defaults($dsn, $admin_name, $admin_pass) { // {{{
|
|||||||
$admin_pass = md5(strtolower($admin_name).$admin_pass);
|
$admin_pass = md5(strtolower($admin_name).$admin_pass);
|
||||||
$db->Execute($user_insert, Array($admin_name, $admin_pass, 'Y'));
|
$db->Execute($user_insert, Array($admin_name, $admin_pass, 'Y'));
|
||||||
|
|
||||||
if(!ini_get('safe_mode')) {
|
if(check_im_version() > 0) {
|
||||||
$convert_check = exec("convert");
|
|
||||||
if(!empty($convert_check)) {
|
|
||||||
$db->Execute($config_insert, Array('thumb_engine', 'convert'));
|
$db->Execute($config_insert, Array('thumb_engine', 'convert'));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$db->Close();
|
$db->Close();
|
||||||
}
|
}
|
||||||
} // }}}
|
} // }}}
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
|
|
||||||
// table creation {{{
|
|
||||||
/*
|
|
||||||
* Note: try and keep this as ANSI SQL compliant as possible,
|
|
||||||
* so that we can (in theory) support other databases
|
|
||||||
*/
|
|
||||||
function create_tables_common($db, $auto_incrementing_id, $boolean, $true, $false, $ip) {
|
|
||||||
$db->Execute("CREATE TABLE aliases (
|
|
||||||
oldtag VARCHAR(255) NOT NULL PRIMARY KEY,
|
|
||||||
newtag VARCHAR(255) NOT NULL
|
|
||||||
)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE config (
|
|
||||||
name VARCHAR(255) NOT NULL PRIMARY KEY,
|
|
||||||
value TEXT
|
|
||||||
)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE images (
|
|
||||||
id $auto_incrementing_id,
|
|
||||||
owner_id INTEGER NOT NULL,
|
|
||||||
owner_ip $ip,
|
|
||||||
filename VARCHAR(64) NOT NULL DEFAULT '',
|
|
||||||
filesize INTEGER NOT NULL,
|
|
||||||
hash CHAR(32) NOT NULL UNIQUE,
|
|
||||||
ext CHAR(4) NOT NULL,
|
|
||||||
source VARCHAR(255),
|
|
||||||
width INTEGER NOT NULL,
|
|
||||||
height INTEGER NOT NULL,
|
|
||||||
posted TIMESTAMP NOT NULL
|
|
||||||
)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE users (
|
|
||||||
id $auto_incrementing_id,
|
|
||||||
name VARCHAR(32) NOT NULL UNIQUE,
|
|
||||||
pass CHAR(32),
|
|
||||||
joindate DATETIME NOT NULL,
|
|
||||||
enabled $boolean NOT NULL DEFAULT $true,
|
|
||||||
admin $boolean NOT NULL DEFAULT $false,
|
|
||||||
email VARCHAR(255)
|
|
||||||
)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE layout (
|
|
||||||
title VARCHAR(64) PRIMARY KEY NOT NULL,
|
|
||||||
section VARCHAR(32) NOT NULL DEFAULT 'left',
|
|
||||||
position INTEGER NOT NULL DEFAULT 50,
|
|
||||||
visible $boolean DEFAULT $true
|
|
||||||
)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE tags (
|
|
||||||
id $auto_incrementing_id,
|
|
||||||
tag VARCHAR(64) NOT NULL UNIQUE,
|
|
||||||
count INTEGER NOT NULL DEFAULT 0
|
|
||||||
)");
|
|
||||||
$db->Execute("CREATE INDEX tags__count ON tags(count)");
|
|
||||||
|
|
||||||
$db->Execute("CREATE TABLE image_tags (
|
|
||||||
image_id INTEGER NOT NULL DEFAULT 0,
|
|
||||||
tag_id INTEGER NOT NULL DEFAULT 0,
|
|
||||||
UNIQUE (image_id, tag_id)
|
|
||||||
)");
|
|
||||||
$db->Execute("CREATE INDEX image_tags__tag_id ON image_tags(tag_id)");
|
|
||||||
$db->Execute("CREATE INDEX image_tags__image_id ON image_tags(image_id)");
|
|
||||||
|
|
||||||
|
|
||||||
$db->Execute("INSERT INTO config(name, value) VALUES(?, ?)", Array('db_version', 5));
|
|
||||||
}
|
|
||||||
function create_tables_mysql($db) {
|
|
||||||
$db->StartTrans();
|
|
||||||
$db->Execute("SET NAMES utf8");
|
|
||||||
create_tables_common($db,
|
|
||||||
"INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY",
|
|
||||||
"ENUM('Y', 'N')", "'Y'", "'N'",
|
|
||||||
"CHAR(15)"
|
|
||||||
);
|
|
||||||
return $db->CommitTrans();
|
|
||||||
}
|
|
||||||
function create_tables_pgsql($db) {
|
|
||||||
$db->StartTrans();
|
|
||||||
create_tables_common($db,
|
|
||||||
"SERIAL NOT NULL PRIMARY KEY",
|
|
||||||
"BOOLEAN", "True", "False",
|
|
||||||
"INET"
|
|
||||||
);
|
|
||||||
return $db->CommitTrans();
|
|
||||||
}
|
|
||||||
function create_tables_sqlite($db) {
|
|
||||||
$db->StartTrans();
|
|
||||||
create_tables_common($db,
|
|
||||||
"INTEGER AUTOINCREMENT PRIMARY KEY NOT NULL",
|
|
||||||
"CHAR(1)", "'Y'", "'N'",
|
|
||||||
"CHAR(15)"
|
|
||||||
);
|
|
||||||
return $db->CommitTrans();
|
|
||||||
}
|
|
||||||
// }}}
|
|
||||||
?>
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user