",_("check for necessary pgsrc updates"),"\n";
$dbi = $request->getDbh();
$path = FindLocalizedFile(WIKI_PGSRC);
$pgsrc = new fileSet($path);
// fixme: verification, ...
foreach ($pgsrc->getFiles() as $filename) {
if (substr($filename,-1,1) == '~') continue;
$pagename = urldecode($filename);
$page = $dbi->getPage($pagename);
if ($page->exists()) {
// check mtime: update automatically if pgsrc is newer
$rev = $page->getCurrentRevision();
$page_mtime = $rev->get('mtime');
$data = implode("", file($path."/".$filename));
if (($parts = ParseMimeifiedPages($data))) {
usort($parts, 'SortByPageVersion');
reset($parts);
$pageinfo = $parts[0];
$stat = stat($path."/".$filename);
$new_mtime = @$pageinfo['versiondata']['mtime'];
if (!$new_mtime)
$new_mtime = @$pageinfo['versiondata']['lastmodified'];
if (!$new_mtime)
$new_mtime = @$pageinfo['pagedata']['date'];
if (!$new_mtime)
$new_mtime = $stat[9];
if ($new_mtime > $page_mtime) {
echo "$path/$pagename: newer than the existing page. replace ($new_mtime > $page_mtime)
\n";
LoadAny($request,$path."/".$filename);
echo "
\n";
} else {
echo "$path/$pagename: older than the existing page. skipped.
\n";
}
} else {
echo "$path/$pagename: unknown format, skipped.
\n";
}
} else {
echo "$pagename does not exist
\n";
LoadAny($request,$path."/".$filename);
echo "
\n";
}
}
return;
}
/**
* TODO: Search table definition in appropriate schema
* and create it.
* Supported: mysql and generic SQL, for ADODB and PearDB.
*/
function installTable(&$dbh, $table, $backend_type) {
global $DBParams;
if (!in_array($DBParams['dbtype'],array('SQL','ADODB'))) return;
echo _("MISSING")," ... \n";
$backend = &$dbh->_backend->_dbh;
/*
$schema = findFile("schemas/${backend_type}.sql");
if (!$schema) {
echo " ",_("FAILED"),": ",sprintf(_("no schema %s found"),"schemas/${backend_type}.sql")," ...
\n";
return false;
}
*/
extract($dbh->_backend->_table_names);
$prefix = isset($DBParams['prefix']) ? $DBParams['prefix'] : '';
switch ($table) {
case 'session':
assert($session_tbl);
if ($backend_type == 'mysql') {
$dbh->simpleQuery("
CREATE TABLE $session_tbl (
sess_id CHAR(32) NOT NULL DEFAULT '',
sess_data BLOB NOT NULL,
sess_date INT UNSIGNED NOT NULL,
sess_ip CHAR(15) NOT NULL,
PRIMARY KEY (sess_id),
INDEX (sess_date)
)");
} else {
$dbh->simpleQuery("
CREATE TABLE $session_tbl (
sess_id CHAR(32) NOT NULL DEFAULT '',
sess_data ".($backend_type == 'pgsql'?'TEXT':'BLOB')." NOT NULL,
sess_date INT,
sess_ip CHAR(15) NOT NULL
)");
$dbh->simpleQuery("CREATE UNIQUE INDEX sess_id ON $session_tbl (sess_id)");
}
$dbh->simpleQuery("CREATE INDEX sess_date on session (sess_date)");
break;
case 'user':
$user_tbl = $prefix.'user';
if ($backend_type == 'mysql') {
$dbh->simpleQuery("
CREATE TABLE $user_tbl (
userid CHAR(48) BINARY NOT NULL UNIQUE,
passwd CHAR(48) BINARY DEFAULT '',
PRIMARY KEY (userid)
)");
} else {
$dbh->simpleQuery("
CREATE TABLE $user_tbl (
userid CHAR(48) NOT NULL,
passwd CHAR(48) DEFAULT ''
)");
$dbh->simpleQuery("CREATE UNIQUE INDEX userid ON $user_tbl (userid)");
}
break;
case 'pref':
$pref_tbl = $prefix.'pref';
if ($backend_type == 'mysql') {
$dbh->simpleQuery("
CREATE TABLE $pref_tbl (
userid CHAR(48) BINARY NOT NULL UNIQUE,
prefs TEXT NULL DEFAULT '',
PRIMARY KEY (userid)
)");
} else {
$dbh->simpleQuery("
CREATE TABLE $pref_tbl (
userid CHAR(48) NOT NULL,
prefs TEXT NULL DEFAULT '',
)");
$dbh->simpleQuery("CREATE UNIQUE INDEX userid ON $pref_tbl (userid)");
}
break;
case 'member':
$member_tbl = $prefix.'member';
if ($backend_type == 'mysql') {
$dbh->simpleQuery("
CREATE TABLE $member_tbl (
userid CHAR(48) BINARY NOT NULL,
groupname CHAR(48) BINARY NOT NULL DEFAULT 'users',
INDEX (userid),
INDEX (groupname)
)");
} else {
$dbh->simpleQuery("
CREATE TABLE $member_tbl (
userid CHAR(48) NOT NULL,
groupname CHAR(48) NOT NULL DEFAULT 'users',
)");
$dbh->simpleQuery("CREATE INDEX userid ON $member_tbl (userid)");
$dbh->simpleQuery("CREATE INDEX groupname ON $member_tbl (groupname)");
}
break;
case 'rating':
$rating_tbl = $prefix.'rating';
if ($backend_type == 'mysql') {
$dbh->simpleQuery("
CREATE TABLE $rating_tbl (
dimension INT(4) NOT NULL,
raterpage INT(11) NOT NULL,
rateepage INT(11) NOT NULL,
ratingvalue FLOAT NOT NULL,
rateeversion INT(11) NOT NULL,
tstamp TIMESTAMP(14) NOT NULL,
PRIMARY KEY (dimension, raterpage, rateepage)
)");
} else {
$dbh->simpleQuery("
CREATE TABLE $rating_tbl (
dimension INT(4) NOT NULL,
raterpage INT(11) NOT NULL,
rateepage INT(11) NOT NULL,
ratingvalue FLOAT NOT NULL,
rateeversion INT(11) NOT NULL,
tstamp TIMESTAMP(14) NOT NULL,
)");
$dbh->simpleQuery("CREATE UNIQUE INDEX rating ON $rating_tbl (dimension, raterpage, rateepage)");
}
break;
}
echo " ",_("CREATED"),"
\n";
}
/**
* currently update only session, user, pref and member
* jeffs-hacks database api (around 1.3.2) later
* people should export/import their pages if using that old versions.
*/
function CheckDatabaseUpdate($request) {
global $DBParams, $DBAuthParams;
if (!in_array($DBParams['dbtype'],array('SQL','ADODB'))) return;
echo "