summaryrefslogtreecommitdiff
path: root/update.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2007-02-24 17:46:39 +0100
committerAndrew Dolgov <[email protected]>2007-02-24 17:46:39 +0100
commitfecd57c8861ebf5d213e1e85581ae4fc88ee0407 (patch)
treeffff1bd8b3d7cf15ddee1c85a7af0e73b7f5984c /update.php
parent12124198493e6c71f02033aebf85838e4f862598 (diff)
add new-style schema versions and updater
Diffstat (limited to 'update.php')
-rw-r--r--update.php142
1 files changed, 142 insertions, 0 deletions
diff --git a/update.php b/update.php
new file mode 100644
index 000000000..964626d7f
--- /dev/null
+++ b/update.php
@@ -0,0 +1,142 @@
+<?php
+ require_once "sessions.php";
+
+ require_once "sanity_check.php";
+ require_once "functions.php";
+ require_once "config.php";
+ require_once "db.php";
+
+ $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
+
+ if (DB_TYPE == "pgsql") {
+ pg_query($link, "set client_encoding = 'utf-8'");
+ pg_set_client_encoding("UNICODE");
+ }
+
+ login_sequence($link);
+
+ $owner_uid = $_SESSION["uid"];
+
+ if ($_SESSION["access_level"] < 10) {
+ header("Location: login.php"); die;
+ }
+
+ define('SCHEMA_VERSION', 13);
+
+?>
+
+<html>
+<head>
+ <title>Database Updater</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <link rel="stylesheet" type="text/css" href="update.css">
+</head>
+
+<body>
+
+<h1>Database Updater</h1>
+
+<?php
+ function getline($fp, $delim) {
+ $result = "";
+ while(!feof($fp)) {
+ $tmp = fgetc($fp);
+
+ if($tmp == $delim) {
+ return $result;
+ }
+ $result .= $tmp;
+ }
+ return $result;
+ }
+
+ $op = $_REQUEST["op"];
+
+ $result = db_query($link, "SELECT schema_version FROM ttrss_version");
+ $version = db_fetch_result($result, 0, "schema_version");
+
+ $update_files = glob("schema/versions/".DB_TYPE."/*sql");
+ $update_versions = array();
+
+ foreach ($update_files as $f) {
+ $m = array();
+ preg_match_all("/schema\/versions\/".DB_TYPE."\/(\d*)\.sql/", $f, $m,
+ PREG_PATTERN_ORDER);
+
+ if ($m[1][0]) {
+ $update_versions[$m[1][0]] = $f;
+ }
+ }
+
+ ksort($update_versions, SORT_NUMERIC);
+
+ $latest_version = max(array_keys($update_versions));
+
+ if ($version == $latest_version) {
+ print "Database schema is up to date (version $version).";
+ return;
+ }
+
+ if (!$op) {
+ print "<p class='warning'><b>Warning:</b> Please backup your database before proceeding.</p>";
+
+ print "<p>Your database schema version is $version. Latest version is ".
+ "$latest_version.</p>";
+
+ print "<p>Available incremental updates:";
+
+ foreach (array_keys($update_versions) as $v) {
+ if ($v > $version) {
+ print " <a href='$update_versions[$v]'>$v</a>";
+ }
+ }
+
+ print "</p>";
+ print "<a href='update.php?op=do'>Click here to perform updates.</a>";
+
+ } else if ($op == "do") {
+
+ print "<p>Performing updates (version: $version)...</p>";
+
+ $num_updates = 0;
+
+ foreach (array_keys($update_versions) as $v) {
+ if ($v == $version + 1) {
+ print "<p>Updating to version $v...</p>";
+ $fp = fopen($update_versions[$v], "r");
+ if ($fp) {
+ while (!feof($fp)) {
+ $query = trim(getline($fp, ";"));
+ if ($query != "") {
+ print "<p class='query'><b>QUERY:</b> $query</p>";
+ db_query($link, $query);
+ }
+ }
+ }
+ fclose($fp);
+
+ print "<p>Checking version... ";
+
+ $result = db_query($link, "SELECT schema_version FROM ttrss_version");
+ $version = db_fetch_result($result, 0, "schema_version");
+
+ if ($version == $v) {
+ print "OK!";
+ } else {
+ print "<b>ERROR!</b>";
+ return;
+ }
+
+ $num_updates++;
+ }
+ }
+
+ print "<p>Finished. Performed $num_updates updates up to schema
+ version $version.</p>";
+ }
+?>
+
+
+</body>
+</html>
+