]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge commit 'br3nda/0.8.x-pginstaller' into 0.8.x
authorCiaranG <ciaran@ciarang.com>
Sun, 19 Jul 2009 07:08:39 +0000 (08:08 +0100)
committerCiaranG <ciaran@ciarang.com>
Sun, 19 Jul 2009 07:08:39 +0000 (08:08 +0100)
db/laconica_pg.sql
install.php

index 2d8286c60731133d16eaaada1870fab75620dfb8..f5d35f9858a8703c0eaea71c4995d32d07395735 100644 (file)
@@ -376,6 +376,20 @@ create table profile_block (
 \r
 );\r
 \r
+create sequence design_seq;\r
+create table design (\r
+    id bigint default nextval('design_seq') /* comment 'design ID'*/,\r
+    backgroundcolor integer /* comment 'main background color'*/ ,\r
+    contentcolor integer /*comment 'content area background color'*/ ,\r
+    sidebarcolor integer /*comment 'sidebar background color'*/ ,\r
+    textcolor integer /*comment 'text color'*/ ,\r
+    linkcolor integer /*comment 'link color'*/,\r
+    backgroundimage varchar(255) /*comment 'background image, if any'*/,\r
+    disposition int default 1 /*comment 'bit 1 = hide background image, bit 2 = display background image, bit 4 = tile background image'*/,\r
+    primary key (id)\r
+);\r
+\r
+\r
 create sequence user_group_seq;\r
 create table user_group (\r
 \r
@@ -391,6 +405,8 @@ create table user_group (
     homepage_logo varchar(255) /* comment 'homepage (profile) size logo' */,\r
     stream_logo varchar(255) /* comment 'stream-sized logo' */,\r
     mini_logo varchar(255) /* comment 'mini logo' */,\r
+    design_id integer /*comment 'id of a design' */ references design(id),\r
+\r
 \r
     created timestamp not null default CURRENT_TIMESTAMP /* comment 'date this record was created' */,\r
     modified timestamp /* comment 'date this record was modified' */\r
@@ -487,18 +503,25 @@ create table file_to_post (
     unique(file_id, post_id)\r
 );\r
 \r
-create sequence design_seq;\r
-create table design (\r
-    id bigint default nextval('design_seq') /* comment 'design ID'*/,\r
-    backgroundcolor integer /* comment 'main background color'*/ ,\r
-    contentcolor integer /*comment 'content area background color'*/ ,\r
-    sidebarcolor integer /*comment 'sidebar background color'*/ ,\r
-    textcolor integer /*comment 'text color'*/ ,\r
-    linkcolor integer /*comment 'link color'*/,\r
-    backgroundimage varchar(255) /*comment 'background image, if any'*/,\r
-    disposition int default 1 /*comment 'bit 1 = hide background image, bit 2 = display background image, bit 4 = tile background image'*/,\r
-    primary key (id)\r
+create table group_block (\r
+   group_id integer not null /* comment 'group profile is blocked from' */ references user_group (id),\r
+   blocked integer not null /* comment 'profile that is blocked' */references profile (id),\r
+   blocker integer not null /* comment 'user making the block'*/ references "user" (id),\r
+   modified timestamp /* comment 'date of blocking'*/ ,\r
+\r
+   primary key (group_id, blocked)\r
+);\r
+\r
+create table group_alias (\r
+\r
+   alias varchar(64) /* comment 'additional nickname for the group'*/ ,\r
+   group_id integer not null /* comment 'group profile is blocked from'*/ references user_group (id),\r
+   modified timestamp /* comment 'date alias was created'*/,\r
+   primary key (alias)\r
+\r
 );\r
+create index group_alias_group_id_idx on group_alias (group_id);\r
+\r
 \r
 /* Textsearch stuff */\r
 \r
index 8f500259ef442bf57ec5d7f79f0803464fd91328..bae296a350ab5925284b2a2cd1f20f64d5cefef5 100644 (file)
@@ -48,7 +48,7 @@ function checkPrereqs()
                    $pass = false;
     }
 
-    $reqs = array('gd', 'mysql', 'curl',
+    $reqs = array('gd', 'curl',
                   'xmlwriter', 'mbstring',
                   'gettext');
 
@@ -58,6 +58,10 @@ function checkPrereqs()
                    $pass = false;
         }
     }
+    if (!checkExtension('pgsql') && !checkExtension('mysql')) {
+      ?><p class="error">Cannot find mysql or pgsql extension. You need one or the other: <code><?php echo $req; ?></code></p><?php
+                    $pass = false;
+    }
 
        if (!is_writable(INSTALLDIR)) {
          ?><p class="error">Cannot write config file to: <code><?php echo INSTALLDIR; ?></code></p>
@@ -127,7 +131,15 @@ function showForm()
                 <p class="form_guide">Database hostname</p>
             </li>
             <li>
-                <label for="host">Database</label>
+            
+                <label for="dbtype">Type</label>
+                <input type="radio" name="dbtype" id="fancy-mysql" value="mysql" checked='checked' /> MySQL<br />
+                <input type="radio" name="dbtype" id="dbtype-pgsql" value="pgsql" /> PostgreSQL<br />
+                <p class="form_guide">Database type</p>
+            </li>
+
+            <li>
+                <label for="database">Name</label>
                 <input type="text" id="database" name="database" />
                 <p class="form_guide">Database name</p>
             </li>
@@ -139,7 +151,7 @@ function showForm()
             <li>
                 <label for="password">Password</label>
                 <input type="password" id="password" name="password" />
-                <p class="form_guide">Database password</p>
+                <p class="form_guide">Database password (optional)</p>
             </li>
         </ul>
         <input type="submit" name="submit" class="submit" value="Submit" />
@@ -163,6 +175,7 @@ function handlePost()
 
 <?php
     $host     = $_POST['host'];
+    $dbtype   = $_POST['dbtype'];
     $database = $_POST['database'];
     $username = $_POST['username'];
     $password = $_POST['password'];
@@ -191,64 +204,28 @@ function handlePost()
                $fail = true;
     }
 
-    if (empty($password)) {
-        updateStatus("No password specified.", true);
-               $fail = true;
-    }
+//     if (empty($password)) {
+//         updateStatus("No password specified.", true);
+//             $fail = true;
+//     }
 
     if (empty($sitename)) {
         updateStatus("No sitename specified.", true);
                $fail = true;
     }
 
-       if($fail){
-               showForm();
-           return;
-       }
-
-    updateStatus("Starting installation...");
-    updateStatus("Checking database...");
-    $conn = mysql_connect($host, $username, $password);
-    if (!$conn) {
-        updateStatus("Can't connect to server '$host' as '$username'.", true);
-        showForm();
-        return;
-    }
-    updateStatus("Changing to database...");
-    $res = mysql_select_db($database, $conn);
-    if (!$res) {
-        updateStatus("Can't change to database.", true);
-        showForm();
-        return;
-    }
-    updateStatus("Running database script...");
-    $res = runDbScript(INSTALLDIR.'/db/laconica.sql', $conn);
-    if ($res === false) {
-        updateStatus("Can't run database script.", true);
-        showForm();
-        return;
-    }
-    foreach (array('sms_carrier' => 'SMS carrier',
-                   'notice_source' => 'notice source',
-                   'foreign_services' => 'foreign service')
-             as $scr => $name) {
-        updateStatus(sprintf("Adding %s data to database...", $name));
-        $res = runDbScript(INSTALLDIR.'/db/'.$scr.'.sql', $conn);
-        if ($res === false) {
-            updateStatus(sprintf("Can't run %d script.", $name), true);
+    if($fail){
             showForm();
-            return;
-        }
-    }
-    updateStatus("Writing config file...");
-    $sqlUrl = "mysqli://$username:$password@$host/$database";
-    $res = writeConf($sitename, $sqlUrl, $fancy);
-    if (!$res) {
-        updateStatus("Can't write config file.", true);
-        showForm();
         return;
     }
-    updateStatus("Done!");
+    
+    switch($dbtype) {
+      case 'mysql':    mysql_db_installer($host, $database, $username, $password, $sitename);
+      break;
+      case 'pgsql':    pgsql_db_installer($host, $database, $username, $password, $sitename);
+      break;
+      default:
+    }
     if ($path) $path .= '/';
     updateStatus("You can visit your <a href='/$path'>new Laconica site</a>.");
 ?>
@@ -256,7 +233,106 @@ function handlePost()
 <?php
 }
 
-function writeConf($sitename, $sqlUrl, $fancy)
+function pgsql_db_installer($host, $database, $username, $password, $sitename) {
+  $connstring = "dbname=$database host=$host user=$username";
+
+  //No password would mean trust authentication used.
+  if (!empty($password)) {
+    $connstring .= " password=$password";
+  }
+  updateStatus("Starting installation...");
+  updateStatus("Checking database...");
+  $conn = pg_connect($connstring);
+
+  updateStatus("Running database script...");
+  //wrap in transaction;
+  pg_query($conn, 'BEGIN');
+  $res = runDbScript(INSTALLDIR.'/db/laconica_pg.sql', $conn, 'pgsql');
+  
+  if ($res === false) {
+      updateStatus("Can't run database script.", true);
+      showForm();
+      return;
+  }
+  foreach (array('sms_carrier' => 'SMS carrier',
+                'notice_source' => 'notice source',
+                'foreign_services' => 'foreign service')
+          as $scr => $name) {
+      updateStatus(sprintf("Adding %s data to database...", $name));
+      $res = runDbScript(INSTALLDIR.'/db/'.$scr.'.sql', $conn, 'pgsql');
+      if ($res === false) {
+          updateStatus(sprintf("Can't run %d script.", $name), true);
+          showForm();
+          return;
+      }
+  }
+  pg_query($conn, 'COMMIT');
+
+  updateStatus("Writing config file...");
+  if (empty($password)) {
+    $sqlUrl = "pgsql://$username@$host/$database";
+  }
+  else {
+    $sqlUrl = "pgsql://$username:$password@$host/$database";
+  }
+  $res = writeConf($sitename, $sqlUrl, $fancy, 'pgsql');
+  if (!$res) {
+      updateStatus("Can't write config file.", true);
+      showForm();
+      return;
+  }
+  updateStatus("Done!");
+      
+}
+
+function mysql_db_installer($host, $database, $username, $password, $sitename) {
+  updateStatus("Starting installation...");
+  updateStatus("Checking database...");
+
+  $conn = mysql_connect($host, $username, $password);
+  if (!$conn) {
+      updateStatus("Can't connect to server '$host' as '$username'.", true);
+      showForm();
+      return;
+  }
+  updateStatus("Changing to database...");
+  $res = mysql_select_db($database, $conn);
+  if (!$res) {
+      updateStatus("Can't change to database.", true);
+      showForm();
+      return;
+  }
+  updateStatus("Running database script...");
+  $res = runDbScript(INSTALLDIR.'/db/laconica.sql', $conn);
+  if ($res === false) {
+      updateStatus("Can't run database script.", true);
+      showForm();
+      return;
+  }
+  foreach (array('sms_carrier' => 'SMS carrier',
+                'notice_source' => 'notice source',
+                'foreign_services' => 'foreign service')
+          as $scr => $name) {
+      updateStatus(sprintf("Adding %s data to database...", $name));
+      $res = runDbScript(INSTALLDIR.'/db/'.$scr.'.sql', $conn);
+      if ($res === false) {
+          updateStatus(sprintf("Can't run %d script.", $name), true);
+          showForm();
+          return;
+      }
+  }
+      
+      updateStatus("Writing config file...");
+      $sqlUrl = "mysqli://$username:$password@$host/$database";
+      $res = writeConf($sitename, $sqlUrl, $fancy);
+      if (!$res) {
+          updateStatus("Can't write config file.", true);
+          showForm();
+          return;
+      }
+      updateStatus("Done!");
+    }
+function writeConf($sitename, $sqlUrl, $fancy, $type='mysql')
 {
     $res = file_put_contents(INSTALLDIR.'/config.php',
                              "<?php\n".
@@ -264,11 +340,13 @@ function writeConf($sitename, $sqlUrl, $fancy)
                              "\$config['site']['name'] = \"$sitename\";\n\n".
                              ($fancy ? "\$config['site']['fancy'] = true;\n\n":'').
                              "\$config['db']['database'] = \"$sqlUrl\";\n\n".
+                             ($type == 'pgsql' ? "\$config['db']['quote_identifiers'] = true;\n\n" .
+                             "\$config['db']['type'] = \"$type\";\n\n" : '').
                              "?>");
     return $res;
 }
 
-function runDbScript($filename, $conn)
+function runDbScript($filename, $conn, $type='mysql')
 {
     $sql = trim(file_get_contents($filename));
     $stmts = explode(';', $sql);
@@ -277,8 +355,13 @@ function runDbScript($filename, $conn)
         if (!mb_strlen($stmt)) {
             continue;
         }
-        $res = mysql_query($stmt, $conn);
+        if ($type == 'mysql') {
+          $res = mysql_query($stmt, $conn);
+        } elseif ($type=='pgsql') {
+          $res = pg_query($conn, $stmt);
+        }
         if ($res === false) {
+            updateStatus("FAILED SQL: $stmt");
             return $res;
         }
     }