]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/gnusocial.php
Merge branch 'nightly' into 'nightly'
[quix0rs-gnu-social.git] / lib / gnusocial.php
index 277c41e7c8d08334bdd6672ddfc824dad1cb1288..789cece2bea924d2c04e35a60e3e926df000e762 100644 (file)
@@ -141,6 +141,9 @@ class GNUsocial
         // Load settings from database; note we need autoload for this
         Config::loadSettings();
 
+        self::fillConfigVoids();
+        self::verifyLoadedConfig();
+
         self::initPlugins();
     }
 
@@ -418,6 +421,56 @@ class GNUsocial
         }
     }
 
+    static function fillConfigVoids()
+    {
+        // special cases on empty configuration options
+        if (!common_config('thumbnail', 'dir')) {
+            common_config_set('thumbnail', 'dir', File::path('thumb'));
+        }
+    }
+
+    /**
+     * Verify that the loaded config is good. Not complete, but will
+     * throw exceptions on common configuration problems I hope.
+     *
+     * Might make changes to the filesystem, to created dirs, but will
+     * not make database changes.
+     */
+    static function verifyLoadedConfig()
+    {
+        $mkdirs = [];
+
+        if (common_config('htmlpurifier', 'Cache.DefinitionImpl') === 'Serializer'
+                && !is_dir(common_config('htmlpurifier', 'Cache.SerializerPath'))) {
+            $mkdirs[common_config('htmlpurifier', 'Cache.SerializerPath')] = 'HTMLPurifier Serializer cache';
+        }
+
+        // go through our configurable storage directories
+        foreach (['attachments', 'thumbnail'] as $dirtype) {
+            $dir = common_config($dirtype, 'dir');
+            if (!empty($dir) && !is_dir($dir)) {
+                $mkdirs[$dir] = $dirtype;
+            }
+        }
+
+        // try to create those that are not directories
+        foreach ($mkdirs as $dir=>$description) {
+            if (is_file($dir)) {
+                throw new ConfigException('Expected directory for '._ve($description).' is a file!');
+            }
+            if (!mkdir($dir)) {
+                throw new ConfigException('Could not create directory for '._ve($description).': '._ve($dir));
+            }
+            if (!chmod($dir, 0775)) {
+                common_log(LOG_WARNING, 'Could not chmod 0775 on directory for '._ve($description).': '._ve($dir));
+            }
+        }
+
+        if (!is_array(common_config('public', 'autosource'))) {
+            throw new ConfigException('Configuration option public/autosource is not an array.');
+        }
+    }
+
     /**
      * Are we running from the web with HTTPS?
      *