]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - install.php
Drop a debug info line that isn't really needed
[quix0rs-gnu-social.git] / install.php
index 6f0af32c2fb4907afef965b507fb56a2ad839808..425ea91ef8f18399cf6d0b84df7dc552de05346f 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2009, Control Yourself, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -189,9 +189,9 @@ function main()
         return;
     }
     
-    if( $_GET['checklibs'] ){
+    if (isset($_GET['checklibs'])) {
         showLibs();
-    }else{
+    } else {
         if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             handlePost();
         } else {
@@ -202,7 +202,7 @@ function main()
 
 function haveExternalLibrary($external_library)
 {
-    if(isset($external_library['include']) && ! include_once($external_library['include'])){
+    if(isset($external_library['include']) && ! haveIncludeFile($external_library['include'])){
         return false;
     }
     if(isset($external_library['check_function']) && ! function_exists($external_library['check_function'])){
@@ -214,6 +214,15 @@ function haveExternalLibrary($external_library)
     return true;
 }
 
+// Attempt to include a PHP file and report if it worked, while
+// suppressing the annoying warning messages on failure.
+function haveIncludeFile($filename) {
+    $old = error_reporting(error_reporting() & ~E_WARNING);
+    $ok = include_once($filename);
+    error_reporting($old);
+    return $ok;
+}
+
 function checkPrereqs()
 {
        $pass = true;
@@ -230,7 +239,7 @@ function checkPrereqs()
     }
 
     $reqs = array('gd', 'curl',
-                  'xmlwriter', 'mbstring');
+                  'xmlwriter', 'mbstring','tidy');
 
     foreach ($reqs as $req) {
         if (!checkExtension($req)) {
@@ -267,12 +276,19 @@ function checkPrereqs()
 
 function checkExtension($name)
 {
-    if (!extension_loaded($name)) {
-        if (!dl($name.'.so')) {
-            return false;
-        }
+    if (extension_loaded($name)) {
+        return true;
+    } elseif (function_exists('dl') && ini_get('enable_dl') && !ini_get('safe_mode')) {
+       // dl will throw a fatal error if it's disabled or we're in safe mode.
+       // More fun, it may not even exist under some SAPIs in 5.3.0 or later...
+       $soname = $name . '.' . PHP_SHLIB_SUFFIX;
+       if (PHP_SHLIB_SUFFIX == 'dll') {
+               $soname = "php_" . $soname;
+       }
+       return @dl($soname);
+    } else {
+        return false;
     }
-    return true;
 }
 
 function showLibs()
@@ -289,7 +305,7 @@ function showLibs()
     }
     echo<<<E_O_T
     <div class="instructions">
-        <p>Laconica comes bundled with a number of libraries required for the application to work. However, it is best that you use PEAR or you distribution to manage
+        <p>StatusNet comes bundled with a number of libraries required for the application to work. However, it is best that you use PEAR or you distribution to manage
         libraries instead, as they tend to provide security updates faster, and may offer improved performance.</p>
         <p>On Debian based distributions, such as Ubuntu, use a package manager (such as &quot;aptitude&quot;, &quot;apt-get&quot;, and &quot;synaptic&quot;) to install the package listed.</p>
         <p>On RPM based distributions, such as Red Hat, Fedora, CentOS, Scientific Linux, Yellow Dog Linux and Oracle Enterprise Linux, use a package manager (such as &quot;yum&quot;, &quot;apt-rpm&quot;, and &quot;up2date&quot;) to install the package listed.</p>
@@ -301,19 +317,19 @@ E_O_T;
     foreach($absent_libraries as $library)
     {
         echo '<li>';
-        if($library['url']){
-            echo '<a href=">'.$library['url'].'">'.htmlentities($library['name']).'</a>';
+        if(isset($library['url'])){
+            echo '<a href="'.$library['url'].'">'.htmlentities($library['name']).'</a>';
         }else{
             echo htmlentities($library['name']);
         }
         echo '<ul>';
-        if($library['deb']){
+        if(isset($library['deb'])){
             echo '<li class="deb package">deb: <a href="apt:' . urlencode($library['deb']) . '">' . htmlentities($library['deb']) . '</a></li>';
         }
-        if($library['rpm']){
+        if(isset($library['rpm'])){
             echo '<li class="rpm package">rpm: ' . htmlentities($library['rpm']) . '</li>';
         }
-        if($library['pear']){
+        if(isset($library['pear'])){
             echo '<li class="pear package">pear: ' . htmlentities($library['pear']) . '</li>';
         }
         echo '</ul>';
@@ -326,8 +342,8 @@ E_O_T;
     foreach($present_libraries as $library)
     {
         echo '<li>';
-        if($library['url']){
-            echo '<a href=">'.$library['url'].'">'.htmlentities($library['name']).'</a>';
+        if(isset($library['url'])){
+            echo '<a href="'.$library['url'].'">'.htmlentities($library['name']).'</a>';
         }else{
             echo htmlentities($library['name']);
         }
@@ -349,7 +365,7 @@ function showForm()
     <dd>
         <div class="instructions">
             <p>Enter your database connection information below to initialize the database.</p>
-            <p>Laconica bundles a number of libraries for ease of installation. <a href="?checklibs=true">You can see what bundled libraries you are using, versus what libraries are installed on your server.</a>
+            <p>StatusNet bundles a number of libraries for ease of installation. <a href="?checklibs=true">You can see what bundled libraries you are using, versus what libraries are installed on your server.</a>
         </div>
     </dd>
 </dl>
@@ -374,7 +390,7 @@ function showForm()
                 <p class="form_guide">Database hostname</p>
             </li>
             <li>
-            
+
                 <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 />
@@ -426,7 +442,7 @@ function handlePost()
     $fancy    = !empty($_POST['fancy']);
     $server = $_SERVER['HTTP_HOST'];
     $path = substr(dirname($_SERVER['PHP_SELF']), 1);
-    
+
 ?>
     <dl class="system_notice">
         <dt>Page notice</dt>
@@ -464,7 +480,9 @@ function handlePost()
             showForm();
         return;
     }
-    
+
+    // FIXME: use PEAR::DB or PDO instead of our own switch
+
     switch($dbtype) {
         case 'mysql':
             $db = mysql_db_installer($host, $database, $username, $password);
@@ -474,28 +492,28 @@ function handlePost()
             break;
         default:
     }
-    
+
     if (!$db) {
         // database connection failed, do not move on to create config file.
         return false;
     }
-    
+
     updateStatus("Writing config file...");
     $res = writeConf($sitename, $server, $path, $fancy, $db);
-    
+
     if (!$res) {
         updateStatus("Can't write config file.", true);
         showForm();
         return;
     }
-    
+
     /*
         TODO https needs to be considered
     */
     $link = "http://".$server.'/'.$path;
-    
-    updateStatus("Laconica has been installed at $link");
-    updateStatus("You can visit your <a href='$link'>new Laconica site</a>.");
+
+    updateStatus("StatusNet has been installed at $link");
+    updateStatus("You can visit your <a href='$link'>new StatusNet site</a>.");
 ?>
 
 <?php
@@ -511,7 +529,7 @@ function pgsql_db_installer($host, $database, $username, $password) {
   updateStatus("Starting installation...");
   updateStatus("Checking database...");
   $conn = pg_connect($connstring);
-  
+
   if ($conn ===false) {
     updateStatus("Failed to connect to database: $connstring");
     showForm();
@@ -521,7 +539,7 @@ function pgsql_db_installer($host, $database, $username, $password) {
   //ensure database encoding is UTF8
   $record = pg_fetch_object(pg_query($conn, 'SHOW server_encoding'));
   if ($record->server_encoding != 'UTF8') {
-    updateStatus("Laconica requires UTF8 character encoding. Your database is ". htmlentities($record->server_encoding));
+    updateStatus("StatusNet requires UTF8 character encoding. Your database is ". htmlentities($record->server_encoding));
     showForm();
     return false;
   }
@@ -529,8 +547,8 @@ function pgsql_db_installer($host, $database, $username, $password) {
   updateStatus("Running database script...");
   //wrap in transaction;
   pg_query($conn, 'BEGIN');
-  $res = runDbScript(INSTALLDIR.'/db/laconica_pg.sql', $conn, 'pgsql');
-  
+  $res = runDbScript(INSTALLDIR.'/db/statusnet_pg.sql', $conn, 'pgsql');
+
   if ($res === false) {
       updateStatus("Can't run database script.", true);
       showForm();
@@ -556,9 +574,9 @@ function pgsql_db_installer($host, $database, $username, $password) {
   else {
     $sqlUrl = "pgsql://$username:$password@$host/$database";
   }
-  
+
   $db = array('type' => 'pgsql', 'database' => $sqlUrl);
-  
+
   return $db;
 }
 
@@ -580,7 +598,7 @@ function mysql_db_installer($host, $database, $username, $password) {
       return false;
   }
   updateStatus("Running database script...");
-  $res = runDbScript(INSTALLDIR.'/db/laconica.sql', $conn);
+  $res = runDbScript(INSTALLDIR.'/db/statusnet.sql', $conn);
   if ($res === false) {
       updateStatus("Can't run database script.", true);
       showForm();
@@ -598,7 +616,7 @@ function mysql_db_installer($host, $database, $username, $password) {
           return false;
       }
   }
-      
+
       $sqlUrl = "mysqli://$username:$password@$host/$database";
       $db = array('type' => 'mysql', 'database' => $sqlUrl);
       return $db;
@@ -608,23 +626,23 @@ function writeConf($sitename, $server, $path, $fancy, $db)
 {
     // assemble configuration file in a string
     $cfg =  "<?php\n".
-            "if (!defined('LACONICA')) { exit(1); }\n\n".
-            
+            "if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }\n\n".
+
             // site name
             "\$config['site']['name'] = '$sitename';\n\n".
-            
+
             // site location
             "\$config['site']['server'] = '$server';\n".
             "\$config['site']['path'] = '$path'; \n\n".
-            
+
             // checks if fancy URLs are enabled
             ($fancy ? "\$config['site']['fancy'] = true;\n\n":'').
-            
+
             // database
             "\$config['db']['database'] = '{$db['database']}';\n\n".
             ($db['type'] == 'pgsql' ? "\$config['db']['quote_identifiers'] = true;\n\n":'').
             "\$config['db']['type'] = '{$db['type']}';\n\n".
-            
+
             "?>";
     // write configuration file out to install directory
     $res = file_put_contents(INSTALLDIR.'/config.php', $cfg);
@@ -641,18 +659,25 @@ function runDbScript($filename, $conn, $type = 'mysql')
         if (!mb_strlen($stmt)) {
             continue;
         }
+        // FIXME: use PEAR::DB or PDO instead of our own switch
         switch ($type) {
         case 'mysql':
             $res = mysql_query($stmt, $conn);
+            if ($res === false) {
+                $error = mysql_error();
+            }
             break;
         case 'pgsql':
             $res = pg_query($conn, $stmt);
+            if ($res === false) {
+                $error = pg_last_error();
+            }
             break;
         default:
             updateStatus("runDbScript() error: unknown database type ". $type ." provided.");
         }
         if ($res === false) {
-            updateStatus("FAILED SQL: $stmt");
+            updateStatus("ERROR ($error) for SQL '$stmt'");
             return $res;
         }
     }
@@ -664,7 +689,7 @@ function runDbScript($filename, $conn, $type = 'mysql')
 <!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
     <head>
-        <title>Install Laconica</title>
+        <title>Install StatusNet</title>
        <link rel="shortcut icon" href="favicon.ico"/>
         <link rel="stylesheet" type="text/css" href="theme/default/css/display.css?version=0.8" media="screen, projection, tv"/>
         <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/base/css/ie.css?version=0.8" /><![endif]-->
@@ -678,14 +703,14 @@ function runDbScript($filename, $conn, $type = 'mysql')
             <div id="header">
                 <address id="site_contact" class="vcard">
                     <a class="url home bookmark" href=".">
-                        <img class="logo photo" src="theme/default/logo.png" alt="Laconica"/>
-                        <span class="fn org">Laconica</span>
+                        <img class="logo photo" src="theme/default/logo.png" alt="StatusNet"/>
+                        <span class="fn org">StatusNet</span>
                     </a>
                 </address>
             </div>
             <div id="core">
                 <div id="content">
-                    <h1>Install Laconica</h1>
+                    <h1>Install StatusNet</h1>
 <?php main(); ?>
                 </div>
             </div>