]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/installer.php
Set site profile after creating initial user during installation
[quix0rs-gnu-social.git] / lib / installer.php
index 6f58b247b53a9e4ed6b7362b3a484eac9ae98f06..871b479a77a1d387382f3decdf2625dcdbd5ff7b 100644 (file)
@@ -42,7 +42,7 @@
 abstract class Installer
 {
     /** Web site info */
-    public $sitename, $server, $path, $fancy;
+    public $sitename, $server, $path, $fancy, $siteProfile;
     /** DB info */
     public $host, $database, $dbtype, $username, $password, $db;
     /** Administrator info */
@@ -73,7 +73,7 @@ abstract class Installer
         error_reporting($old);
         return $ok;
     }
-    
+
     /**
      * Check if all is ready for installation
      *
@@ -185,7 +185,7 @@ abstract class Installer
     /**
      * Basic validation on the database paramters
      * Side effects: error output if not valid
-     * 
+     *
      * @return boolean success
      */
     function validateDb()
@@ -218,7 +218,7 @@ abstract class Installer
     /**
      * Basic validation on the administrator user paramters
      * Side effects: error output if not valid
-     * 
+     *
      * @return boolean success
      */
     function validateAdmin()
@@ -251,10 +251,29 @@ abstract class Installer
         return !$fail;
     }
 
+    /**
+     * Make sure a site profile was selected
+     *
+     * @return type boolean success
+     */
+    function validateSiteProfile()
+    {
+        $fail = false;
+
+        $sprofile = $this->siteProfile;
+
+        if (empty($sprofile))  {
+            $this->updateStatus("No site profile selected.", true);
+            $fail = true;
+        }
+
+        return !$fail;
+    }
+
     /**
      * Set up the database with the appropriate function for the selected type...
      * Saves database info into $this->db.
-     * 
+     *
      * @fixme escape things in the connection string in case we have a funny pass etc
      * @return mixed array of database connection params on success, false on failure
      */
@@ -316,7 +335,7 @@ abstract class Installer
      * Open a connection to the database.
      *
      * @param <type> $dsn
-     * @return <type> 
+     * @return <type>
      */
     function connectDatabase($dsn)
     {
@@ -384,7 +403,7 @@ abstract class Installer
      * Write a stock configuration file.
      *
      * @return boolean success
-     * 
+     *
      * @fixme escape variables in output in case we have funny chars, apostrophes etc
      */
     function writeConf()
@@ -394,7 +413,7 @@ abstract class Installer
             'server' => $this->server,
             'path' => $this->path,
             'db_database' => $this->db['database'],
-            'db_type' => $this->db['type'],
+            'db_type' => $this->db['type']
         ));
 
         // assemble configuration file in a string
@@ -425,6 +444,41 @@ abstract class Installer
         return $res;
     }
 
+    /**
+     * Write the site profile. We do this after creating the initial user
+     * in case the site profile is set to single user. This gets around the
+     * 'chicken-and-egg' problem of the system requiring a valid user for
+     * single user mode, before the intial user is actually created. Yeah,
+     * we should probably do this in smarter way.
+     *
+     * @return int res number of bytes written
+     */
+    function writeSiteProfile()
+    {
+        $vals = $this->phpVals(array(
+            'site_profile' => $this->siteProfile,
+            'nickname' => $this->adminNick
+        ));
+
+        $cfg =
+        // site profile
+        "\$config['site']['profile'] = {$vals['site_profile']};\n";
+
+        if ($this->siteProfile == "singleuser") {
+            $cfg .= "\$config['singleuser']['nickname'] = {$vals['nickname']};\n\n";
+        } else {
+            $cfg .= "\n";
+        }
+
+        // Normalize line endings for Windows servers
+        $cfg = str_replace("\n", PHP_EOL, $cfg);
+
+        // write configuration file out to install directory
+        $res = file_put_contents(INSTALLDIR.'/config.php', $cfg, FILE_APPEND);
+
+        return $res;
+    }
+
     /**
      * Install schema into the database
      *
@@ -479,7 +533,7 @@ abstract class Installer
         $user->grantRole('owner');
         $user->grantRole('moderator');
         $user->grantRole('administrator');
-        
+
         // Attempt to do a remote subscribe to update@status.net
         // Will fail if instance is on a private network.
 
@@ -499,9 +553,9 @@ abstract class Installer
     /**
      * The beef of the installer!
      * Create database, config file, and admin user.
-     * 
+     *
      * Prerequisites: validation of input data.
-     * 
+     *
      * @return boolean success
      */
     function doInstall()
@@ -527,6 +581,9 @@ abstract class Installer
             return false;
         }
 
+        // Make sure we can write to the file twice
+        $oldUmask = umask(000); 
+
         if (!$this->skipConfig) {
             $this->updateStatus("Writing config file...");
             $res = $this->writeConf();
@@ -552,6 +609,21 @@ abstract class Installer
             }
         }
 
+        if (!$this->skipConfig) {
+            $this->updateStatus("Setting site profile...");
+            $res = $this->writeSiteProfile();
+
+            if (!$res) {
+                $this->updateStatus("Can't write to config file.", true);
+                return false;
+            }
+        }
+
+        // Restore original umask
+        umask($oldUmask);
+        // Set permissions back to something decent
+        chmod(INSTALLDIR.'/config.php', 0644);
+        
         /*
             TODO https needs to be considered
         */