]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - install.php
Added Snapshot::check() to main function for index.php
[quix0rs-gnu-social.git] / install.php
index a34214c48a45c12fc14e00fb7b4497e887df1c15..87a99a650895b3774adc3b2e0c84cf401cb370fe 100644 (file)
@@ -1,9 +1,31 @@
-<?
+<?php
+/**
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2009, Controlez-Vous, 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
 define('INSTALLDIR', dirname(__FILE__));
 
 function main()
 {
-    checkPrereqs();
+    if (!checkPrereqs())
+    {
+        return;
+    }
+
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         handlePost();
     } else {
@@ -13,6 +35,55 @@ function main()
 
 function checkPrereqs()
 {
+    if (file_exists(INSTALLDIR.'/config.php')) {
+         ?><p class="error">Config file &quot;config.php&quot; already exists.</p>
+         <?php
+        return false;
+    }
+
+    if (version_compare(PHP_VERSION, '5.0.0', '<')) {
+            ?><p class="error">Require PHP version 5 or greater.</p><?php
+                   return false;
+    }
+
+    $reqs = array('gd', 'mysql', 'curl',
+                  'xmlwriter', 'mbstring',
+                  'gettext');
+
+    foreach ($reqs as $req) {
+        if (!checkExtension($req)) {
+            ?><p class="error">Cannot load required extension &quot;<?php echo $req; ?>&quot;.</p><?php
+                   return false;
+        }
+    }
+
+       if (!is_writable(INSTALLDIR)) {
+         ?><p class="error">Cannot write config file to &quot;<?php echo INSTALLDIR; ?>&quot;.</p>
+              <p>On your server, try this command:</p>
+              <blockquote>chmod a+w <?php echo INSTALLDIR; ?></blockquote>
+         <?php
+            return false;
+       }
+
+       if (!is_writable(INSTALLDIR.'/avatar/')) {
+         ?><p class="error">Cannot write avatar directory &quot;<?php echo INSTALLDIR; ?>/avatar/&quot;.</p>
+              <p>On your server, try this command:</p>
+              <blockquote>chmod a+w <?php echo INSTALLDIR; ?>/avatar/</blockquote>
+         <?
+            return false;
+       }
+
+       return true;
+}
+
+function checkExtension($name)
+{
+    if (!extension_loaded($name)) {
+        if (!dl($name.'.so')) {
+            return false;
+        }
+    }
+    return true;
 }
 
 function showForm()
@@ -77,6 +148,36 @@ function handlePost()
     $password = $_POST['password'];
     $sitename = $_POST['sitename'];
 
+    if (empty($host)) {
+        updateStatus("No hostname specified.", true);
+        showForm();
+        return;
+    }
+
+    if (empty($database)) {
+        updateStatus("No database specified.", true);
+        showForm();
+        return;
+    }
+
+    if (empty($username)) {
+        updateStatus("No username specified.", true);
+        showForm();
+        return;
+    }
+
+    if (empty($password)) {
+        updateStatus("No password specified.", true);
+        showForm();
+        return;
+    }
+
+    if (empty($sitename)) {
+        updateStatus("No sitename specified.", true);
+        showForm();
+        return;
+    }
+
     updateStatus("Starting installation...");
     updateStatus("Checking database...");
     $conn = mysql_connect($host, $username, $password);
@@ -99,6 +200,18 @@ function handlePost()
         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);
@@ -116,7 +229,7 @@ function handlePost()
 function writeConf($sitename, $sqlUrl)
 {
     $res = file_put_contents(INSTALLDIR.'/config.php',
-                             "<?\n".
+                             "<?php\n".
                              "\$config['site']['name'] = \"$sitename\";\n\n".
                              "\$config['db']['database'] = \"$sqlUrl\";\n\n");
     return $res;
@@ -152,9 +265,9 @@ function runDbScript($filename, $conn)
        <div id="core">
        <div id="content">
        <h1>Install Laconica</h1>
-<? main() ?>
+<?php main(); ?>
        </div>
        </div>
        </div>
 </body>
-</html>
\ No newline at end of file
+</html>