Version 1
[yaffs-website] / vendor / dnoegel / php-xdg-base-dir / src / Xdg.php
diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php
new file mode 100644 (file)
index 0000000..e2acda1
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+
+namespace XdgBaseDir;
+
+/**
+ * Simple implementation of the XDG standard http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+ *
+ * Based on the python implementation https://github.com/takluyver/pyxdg/blob/master/xdg/BaseDirectory.py
+ *
+ * Class Xdg
+ * @package ShopwareCli\Application
+ */
+class Xdg
+{
+    const S_IFDIR = 040000; // directory
+    const S_IRWXO = 00007;  // rwx other
+    const S_IRWXG = 00056;  // rwx group
+    const RUNTIME_DIR_FALLBACK = 'php-xdg-runtime-dir-fallback-';
+
+    /**
+     * @return string
+     */
+    public function getHomeDir()
+    {
+        return getenv('HOME') ?: (getenv('HOMEDRIVE') . DIRECTORY_SEPARATOR . getenv('HOMEPATH'));
+    }
+
+    /**
+     * @return string
+     */
+    public function getHomeConfigDir()
+    {
+        $path = getenv('XDG_CONFIG_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.config';
+
+        return $path;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHomeDataDir()
+    {
+        $path = getenv('XDG_DATA_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.local' . DIRECTORY_SEPARATOR . 'share';
+
+        return $path;
+    }
+
+    /**
+     * @return array
+     */
+    public function getConfigDirs()
+    {
+        $configDirs = getenv('XDG_CONFIG_DIRS') ? explode(':', getenv('XDG_CONFIG_DIRS')) : array('/etc/xdg');
+
+        $paths = array_merge(array($this->getHomeConfigDir()), $configDirs);
+
+        return $paths;
+    }
+
+    /**
+     * @return array
+     */
+    public function getDataDirs()
+    {
+        $dataDirs = getenv('XDG_DATA_DIRS') ? explode(':', getenv('XDG_DATA_DIRS')) : array('/usr/local/share', '/usr/share');
+
+        $paths = array_merge(array($this->getHomeDataDir()), $dataDirs);
+
+        return $paths;
+    }
+
+    /**
+     * @return string
+     */
+    public function getHomeCacheDir()
+    {
+        $path = getenv('XDG_CACHE_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.cache';
+
+        return $path;
+
+    }
+
+    public function getRuntimeDir($strict=true)
+    {
+        if ($runtimeDir = getenv('XDG_RUNTIME_DIR')) {
+            return $runtimeDir;
+        }
+
+        if ($strict) {
+            throw new \RuntimeException('XDG_RUNTIME_DIR was not set');
+        }
+
+        $fallback = sys_get_temp_dir() . DIRECTORY_SEPARATOR . self::RUNTIME_DIR_FALLBACK . getenv('USER');
+
+        $create = false;
+
+        if (!is_dir($fallback)) {
+            mkdir($fallback, 0700, true);
+        }
+
+        $st = lstat($fallback);
+
+        # The fallback must be a directory
+        if (!$st['mode'] & self::S_IFDIR) {
+            rmdir($fallback);
+            $create = true;
+        } elseif ($st['uid'] != getmyuid() ||
+            $st['mode'] & (self::S_IRWXG | self::S_IRWXO)
+        ) {
+            rmdir($fallback);
+            $create = true;
+        }
+
+        if ($create) {
+            mkdir($fallback, 0700, true);
+        }
+
+        return $fallback;
+    }
+
+}