X-Git-Url: https://git.cweiske.de/phancap.git/blobdiff_plain/e37dfddb07d225e3cd0a0527eea65078f13fa96a..8579cbf8993c34d47a05377a124325b65447fbc0:/src/phancap/Config.php diff --git a/src/phancap/Config.php b/src/phancap/Config.php index 1bb4379..e45f08b 100644 --- a/src/phancap/Config.php +++ b/src/phancap/Config.php @@ -1,6 +1,29 @@ + * @copyright 2014 Christian Weiske + * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 + * @link http://cweiske.de/phancap.htm + */ namespace phancap; +/** + * Phancap configuration + * + * @category Tools + * @package Config + * @author Christian Weiske + * @copyright 2014 Christian Weiske + * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 + * @version Release: @package_version@ + * @link http://cweiske.de/phancap.htm + */ class Config { /** @@ -15,6 +38,19 @@ class Config */ public $cacheDirUrl; + + /** + * List of config file paths that were tried to load + * @var array + */ + public $cfgFiles = array(); + + /** + * If a configuration file could be found + * @var boolean + */ + public $cfgFileExists; + /** * Credentials for access * @@ -29,6 +65,12 @@ class Config */ public $access = true; + /** + * Disable the setup check tool + * @var boolean + */ + public $disableSetup = false; + /** * Redirect the browser to the cache URL. * If disabled, the file is directly delivered. @@ -68,7 +110,15 @@ class Config */ public $screenshotMinAge = 'PT1H'; + /** + * Cutycapt adapter options + */ + public $cutycapt = array(); + + /** + * Initialize default values and loads configuration file paths + */ public function __construct() { $this->cacheDir = getcwd() . '/imgcache/'; @@ -77,18 +127,63 @@ class Config $this->timestampMaxAge = Options::validateAge($this->timestampMaxAge); $this->screenshotMaxAge = Options::validateAge($this->screenshotMaxAge); $this->screenshotMinAge = Options::validateAge($this->screenshotMinAge); + + $this->loadConfigFilePaths(); } + /** + * Load the first configuration file that exists + * + * @return void + * @uses $cfgFileExists + */ public function load() { - $cfgFile = __DIR__ . '/../../data/phancap.config.php'; - if (file_exists($cfgFile)) { - $this->loadFile($cfgFile); + $this->cfgFileExists = false; + foreach ($this->cfgFiles as $file) { + if (file_exists($file)) { + $this->cfgFileExists = true; + $this->loadFile($file); + break; + } } $this->setupCheck(); } + /** + * Load possible configuration file paths into $this->cfgFiles. + * + * @return void + */ + protected function loadConfigFilePaths() + { + $phar = false; + if (class_exists('\\Phar')) { + $pharFile = \Phar::running(); + if ($pharFile != '') { + $phar = true; + } + } + if ($phar) { + //remove phar:// from the path + $this->cfgFiles[] = substr($pharFile, 7) . '.config.php'; + } else { + $this->cfgFiles[] = __DIR__ . '/../../data/phancap.config.php'; + } + + //TODO: add ~/.config/phancap.php + + $this->cfgFiles[] = '/etc/phancap.php'; + } + + /** + * Load values of a configuration file into this class + * + * @param string $filename Configuration file (.php) + * + * @return void + */ protected function loadFile($filename) { include $filename; @@ -98,16 +193,31 @@ class Config } } + /** + * Check if the cache directory exists and is writable + * + * @return void + * @throws \Exception When something is not ok + */ public function setupCheck() { if (!is_dir($this->cacheDir)) { - throw new \Exception('Cache directory does not exist: ' . $this->cacheDir); + throw new \Exception( + 'Cache directory does not exist: ' . $this->cacheDir + ); } if (!is_writable($this->cacheDir)) { - throw new \Exception('Cache directory is not writable: ' . $this->cacheDir); + throw new \Exception( + 'Cache directory is not writable: ' . $this->cacheDir + ); } } + /** + * Returns the current URL, without fragmet. + * + * @return string Full URL + */ protected function getCurrentUrl() { if (!isset($_SERVER['REQUEST_SCHEME'])) { @@ -118,15 +228,25 @@ class Config . preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']); } + /** + * Returns the current URL without the file name in the path + * + * @return string Directory of URL without trailing slash, + * and without .phar file + */ protected function getCurrentUrlDir() { $url = $this->getCurrentUrl(); $url = preg_replace('/\?.*$/', '', $url); - if (substr($url, -1) == '/') { - return $url; + if (substr($url, -1) != '/') { + $url = substr($url, 0, -strlen(basename($url)) - 1); + } + if (class_exists('\\Phar') && \Phar::running()) { + //remove .phar file name + $url = substr($url, 0, -strlen(basename($url)) - 1); } - return substr($url, 0, -strlen(basename($url)) - 1); + return $url; } } ?>