439 lines
17 KiB
PHP
439 lines
17 KiB
PHP
<?php
|
|
/**
|
|
* @author Paul Baranowski <paul@paulbaranowski.org>
|
|
* @version $Revision: 2475 $
|
|
* @package Campcaster
|
|
* @subpackage StorageServer
|
|
* @copyright 2006 MDLF, Inc.
|
|
* @license http://www.gnu.org/licenses/gpl.txt
|
|
* @link http://www.campware.org
|
|
*/
|
|
|
|
// Do not allow remote execution
|
|
$arr = array_diff_assoc($_SERVER, $_ENV);
|
|
if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
|
|
header("HTTP/1.1 400");
|
|
header("Content-type: text/plain; charset=UTF-8");
|
|
echo "400 Not executable\r\n";
|
|
exit(1);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Install database tables
|
|
//------------------------------------------------------------------------------
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['treeTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['treeTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['treeTable']." (
|
|
id int not null PRIMARY KEY,
|
|
name varchar(255) not null default'',
|
|
-- parid int,
|
|
type varchar(255) not null default'',
|
|
param varchar(255))";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['treeTable']."_id_seq");
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['treeTable']."_id_idx
|
|
ON ".$CC_CONFIG['treeTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['treeTable']."_name_idx
|
|
ON ".$CC_CONFIG['treeTable']." (name)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['treeTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['structTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['structTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['structTable']." (
|
|
rid int not null PRIMARY KEY,
|
|
objid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
|
|
parid int not null REFERENCES ".$CC_CONFIG['treeTable']." ON DELETE CASCADE,
|
|
level int)";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['structTable']."_id_seq");
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_rid_idx
|
|
ON ".$CC_CONFIG['structTable']." (rid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_objid_idx
|
|
ON ".$CC_CONFIG['structTable']." (objid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_parid_idx
|
|
ON ".$CC_CONFIG['structTable']." (parid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['structTable']."_level_idx
|
|
ON ".$CC_CONFIG['structTable']." (level)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_level_idx
|
|
ON ".$CC_CONFIG['structTable']." (objid, level)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['structTable']."_objid_parid_idx
|
|
ON ".$CC_CONFIG['structTable']." (objid, parid)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['structTable']."\n";
|
|
}
|
|
|
|
//
|
|
// Insert the RootNode if its not there yet.
|
|
//
|
|
$sql = "SELECT * FROM ".$CC_CONFIG['treeTable']
|
|
." WHERE name='".$CC_CONFIG['RootNode']."'"
|
|
." AND type='RootNode'";
|
|
$row = $CC_DBC->GetRow($sql);
|
|
if (!PEAR::isError($row) && !$row) {
|
|
echo " * Creating ROOT NODE in ".$CC_CONFIG['treeTable']."...";
|
|
$oid = $CC_DBC->nextId($CC_CONFIG['treeTable']."_id_seq");
|
|
if (PEAR::isError($oid)) {
|
|
echo $oid->getMessage()."\n";
|
|
//print_r($oid);
|
|
exit();
|
|
}
|
|
$CC_DBC->query("
|
|
INSERT INTO ".$CC_CONFIG['treeTable']."
|
|
(id, name, type)
|
|
VALUES
|
|
($oid, '".$CC_CONFIG['RootNode']."', 'RootNode')
|
|
");
|
|
echo "done.\n";
|
|
} else {
|
|
echo " * Skipping: Root node already exists in ".$CC_CONFIG['treeTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['classTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['classTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['classTable']." (
|
|
id int not null PRIMARY KEY,
|
|
cname varchar(20))";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_id_idx
|
|
ON ".$CC_CONFIG['classTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['classTable']."_cname_idx
|
|
ON ".$CC_CONFIG['classTable']." (cname)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['classTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['cmembTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['cmembTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['cmembTable']." (
|
|
objid int not null,
|
|
cid int not null)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['cmembTable']."_idx
|
|
ON ".$CC_CONFIG['cmembTable']." (objid, cid)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['cmembTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['subjTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['subjTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['subjTable']." (
|
|
id int not null PRIMARY KEY,
|
|
login varchar(255) not null default'',
|
|
pass varchar(255) not null default'',
|
|
type char(1) not null default 'U',
|
|
realname varchar(255) not null default'',
|
|
lastlogin timestamp,
|
|
lastfail timestamp
|
|
)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_id_idx
|
|
ON ".$CC_CONFIG['subjTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['subjTable']."_login_idx
|
|
ON ".$CC_CONFIG['subjTable']." (login)";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['subjTable']."_id_seq");
|
|
echo "done.\n";
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['subjTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['smembTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['smembTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['smembTable']." (
|
|
id int not null PRIMARY KEY,
|
|
uid int not null default 0,
|
|
gid int not null default 0,
|
|
level int not null default 0,
|
|
mid int)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['smembTable']."_id_idx
|
|
ON ".$CC_CONFIG['smembTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['smembTable']."_id_seq");
|
|
echo "done.\n";
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['smembTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['permTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['permTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['permTable']." (
|
|
permid int not null PRIMARY KEY,
|
|
subj int REFERENCES ".$CC_CONFIG['subjTable']." ON DELETE CASCADE,
|
|
action varchar(20),
|
|
obj int,
|
|
type char(1))";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_permid_idx
|
|
ON ".$CC_CONFIG['permTable']." (permid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['permTable']."_subj_obj_idx
|
|
ON ".$CC_CONFIG['permTable']." (subj, obj)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['permTable']."_all_idx
|
|
ON ".$CC_CONFIG['permTable']." (subj, action, obj)";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['permTable']."_id_seq");
|
|
echo "done.\n";
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['permTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['sessTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['sessTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['sessTable']." (
|
|
sessid char(32) not null PRIMARY KEY,
|
|
userid int REFERENCES ".$CC_CONFIG['subjTable']." ON DELETE CASCADE,
|
|
login varchar(255),
|
|
ts timestamp)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['sessTable']."_sessid_idx
|
|
ON ".$CC_CONFIG['sessTable']." (sessid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['sessTable']."_userid_idx
|
|
ON ".$CC_CONFIG['sessTable']." (userid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['sessTable']."_login_idx
|
|
ON ".$CC_CONFIG['sessTable']." (login)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['sessTable']."\n";
|
|
}
|
|
|
|
/**
|
|
* file states:
|
|
* <ul>
|
|
* <li>empty</li>
|
|
* <li>incomplete</li>
|
|
* <li>ready</li>
|
|
* <li>edited</li>
|
|
* <li>deleted</li>
|
|
* </ul>
|
|
* file types:
|
|
* <ul>
|
|
* <li>audioclip</li>
|
|
* <li>playlist</li>
|
|
* <li>webstream</li>
|
|
* </ul>
|
|
* access types:
|
|
* <ul>
|
|
* <li>access</li>
|
|
* <li>download</li>
|
|
* </ul>
|
|
*/
|
|
if (!camp_db_table_exists($CC_CONFIG['filesTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['filesTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['filesTable']." (
|
|
id int not null,
|
|
gunid bigint not null, -- global unique ID
|
|
name varchar(255) not null default'', -- human file id ;)
|
|
mime varchar(255) not null default'', -- mime type
|
|
ftype varchar(128) not null default'', -- file type
|
|
state varchar(128) not null default'empty', -- file state
|
|
currentlyaccessing int not null default 0, -- access counter
|
|
editedby int REFERENCES ".$CC_CONFIG['subjTable'].", -- who edits it
|
|
mtime timestamp(6) with time zone, -- lst modif.time
|
|
md5 char(32)
|
|
)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_id_idx
|
|
ON ".$CC_CONFIG['filesTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['filesTable']."_gunid_idx
|
|
ON ".$CC_CONFIG['filesTable']." (gunid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_name_idx
|
|
ON ".$CC_CONFIG['filesTable']." (name)";
|
|
camp_install_query($sql);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['filesTable']."_md5_idx
|
|
ON ls_files (md5)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['filesTable']."\n";
|
|
}
|
|
|
|
/**
|
|
* id subjns subject predns predicate objns object
|
|
* y1 literal xmbf NULL namespace literal http://www.sotf.org/xbmf
|
|
* x1 gunid <gunid> xbmf contributor NULL NULL
|
|
* x2 mdid x1 xbmf role literal Editor
|
|
*
|
|
* predefined shortcuts:
|
|
* _L = literal
|
|
* _G = gunid (global id of media file)
|
|
* _I = mdid (local id of metadata record)
|
|
* _nssshortcut = namespace shortcut definition
|
|
* _blank = blank node
|
|
*/
|
|
if (!camp_db_table_exists($CC_CONFIG['mdataTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['mdataTable']."...";
|
|
$CC_DBC->createSequence($CC_CONFIG['mdataTable']."_id_seq");
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['mdataTable']." (
|
|
id int not null,
|
|
gunid bigint,
|
|
subjns varchar(255), -- subject namespace shortcut/uri
|
|
subject varchar(255) not null default '',
|
|
predns varchar(255), -- predicate namespace shortcut/uri
|
|
predicate varchar(255) not null,
|
|
predxml char(1) not null default 'T', -- Tag or Attribute
|
|
objns varchar(255), -- object namespace shortcut/uri
|
|
object text
|
|
)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['mdataTable']."_id_idx
|
|
ON ".$CC_CONFIG['mdataTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_gunid_idx
|
|
ON ".$CC_CONFIG['mdataTable']." (gunid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_subj_idx
|
|
ON ".$CC_CONFIG['mdataTable']." (subjns, subject)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['mdataTable']."_pred_idx
|
|
ON ".$CC_CONFIG['mdataTable']." (predns, predicate)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['mdataTable']."\n";
|
|
}
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['accessTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['accessTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['accessTable']." (
|
|
gunid bigint, -- global unique id
|
|
token bigint, -- access token
|
|
chsum char(32) not null default'', -- md5 checksum
|
|
ext varchar(128) not null default'', -- extension
|
|
type varchar(20) not null default'', -- access type
|
|
parent bigint, -- parent token
|
|
owner int REFERENCES ".$CC_CONFIG['subjTable'].", -- subject have started it
|
|
ts timestamp
|
|
)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_token_idx
|
|
ON ".$CC_CONFIG['accessTable']." (token)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_gunid_idx
|
|
ON ".$CC_CONFIG['accessTable']." (gunid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['accessTable']."_parent_idx
|
|
ON ".$CC_CONFIG['accessTable']." (parent)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['accessTable']."\n";
|
|
}
|
|
|
|
echo " * Inserting starting data into tables...\n";
|
|
$gb = new GreenBox();
|
|
$r = $gb->initData(true);
|
|
//echo "done.\n";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Submodules
|
|
//------------------------------------------------------------------------------
|
|
|
|
if (!camp_db_table_exists($CC_CONFIG['transTable'])) {
|
|
echo " * Creating database table ".$CC_CONFIG['transTable']."...";
|
|
$sql = "CREATE TABLE ".$CC_CONFIG['transTable']." (
|
|
id int not null, -- primary key
|
|
trtok char(16) not null, -- transport token
|
|
direction varchar(128) not null, -- direction: up|down
|
|
state varchar(128) not null, -- state
|
|
trtype varchar(128) not null, -- transport type
|
|
lock char(1) not null default 'N',-- running lock
|
|
target varchar(255) default NULL, -- target system,
|
|
-- if NULL => predefined set
|
|
rtrtok char(16) default NULL, -- remote hub's transport token
|
|
mdtrtok char(16), -- metadata transport token
|
|
gunid bigint, -- global unique id
|
|
pdtoken bigint, -- put/download token from archive
|
|
url varchar(255), -- url on remote side
|
|
localfile varchar(255), -- pathname of local part
|
|
fname varchar(255), -- mnemonic filename
|
|
title varchar(255), -- dc:title mdata value (or filename ...)
|
|
expectedsum char(32), -- expected file checksum
|
|
realsum char(32), -- checksum of transported part
|
|
expectedsize int, -- expected filesize in bytes
|
|
realsize int, -- filesize of transported part
|
|
uid int, -- local user id of transport owner
|
|
errmsg varchar(255), -- error message string for failed tr.
|
|
start timestamp, -- starttime
|
|
ts timestamp -- mtime
|
|
)";
|
|
camp_install_query($sql, false);
|
|
|
|
$CC_DBC->createSequence($CC_CONFIG['transTable']."_id_seq");
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_id_idx
|
|
ON ".$CC_CONFIG['transTable']." (id)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_trtok_idx
|
|
ON ".$CC_CONFIG['transTable']." (trtok)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE UNIQUE INDEX ".$CC_CONFIG['transTable']."_token_idx
|
|
ON ".$CC_CONFIG['transTable']." (pdtoken)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['transTable']."_gunid_idx
|
|
ON ".$CC_CONFIG['transTable']." (gunid)";
|
|
camp_install_query($sql, false);
|
|
|
|
$sql = "CREATE INDEX ".$CC_CONFIG['transTable']."_state_idx
|
|
ON ".$CC_CONFIG['transTable']." (state)";
|
|
camp_install_query($sql);
|
|
} else {
|
|
echo " * Skipping: database table already exists: ".$CC_CONFIG['transTable']."\n";
|
|
}
|
|
|
|
?>
|