From 6a0ed7c298669ef0b0f33563df15bb2a3c7207b0 Mon Sep 17 00:00:00 2001 From: fabrixxm Date: Thu, 29 Nov 2018 09:27:04 +0100 Subject: [PATCH] Add storage backend manager class --- src/Core/StorageManager.php | 102 ++++++++++++++++++++++++++++++++++++ src/Model/Photo.php | 3 +- 2 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 src/Core/StorageManager.php diff --git a/src/Core/StorageManager.php b/src/Core/StorageManager.php new file mode 100644 index 000000000..6f3e98ae7 --- /dev/null +++ b/src/Core/StorageManager.php @@ -0,0 +1,102 @@ + \Friendica\Model\Storage\Filesystem::class, + 'Database' => \Friendica\Model\Storage\Database::class, + ]; + + private static $storages = []; + + private static function setup() + { + if (count(self::$storages)==0) { + self::$storage = Config::get('storage', 'backends', self::$default_storages); + } + } + + /** + * @brief Return current storage backend class + * @return string + */ + public static function getBackend() + { + return Config::get('storage', 'class', ''); + } + + /** + * @brief Return storage backend class by registered name + * + * @param string $name Backend name + * @return string Empty if no backend registered at $name exists + */ + public static function getByName($name) + { + self::setup(); + return defaults(self::$storages, $name, ''); + } + + /** + * @brief Set current storage backend class + * + * @param string $class Backend class name + */ + public static function setBackend($class) + { + /// @todo Check that $class implements IStorage + Config::set('storage', 'class', $class); + } + + /** + * @brief Get registered backends + * + * @return array + */ + public static function listBackends() + { + self::setup(); + return self::$backends; + } + + + + /** + * @brief Register a storage backend class + * + * @param string $name User readable backend name + * @param string $class Backend class name + */ + public static function register($name, $class) + { + /// @todo Check that $class implements IStorage + self::setup(); + self::$storages[$name] = $class; + Config::set('storage', 'backends', self::$storages); + } + + + /** + * @brief Unregister a storage backend class + * + * @param string $name User readable backend name + */ + public static function unregister($class) + { + self::setup(); + unset(self::$storages[$name]); + Config::set('storage', 'backends', self::$storages); + } +} \ No newline at end of file diff --git a/src/Model/Photo.php b/src/Model/Photo.php index 0156b5d32..4942381a4 100644 --- a/src/Model/Photo.php +++ b/src/Model/Photo.php @@ -11,6 +11,7 @@ use Friendica\Core\Cache; use Friendica\Core\Config; use Friendica\Core\L10n; use Friendica\Core\System; +use Friendica\Core\StorageManager; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\Object\Image; @@ -263,7 +264,7 @@ class Photo extends BaseObject $backend_ref = (string)$existing_photo["backend-ref"]; $backend_class = (string)$existing_photo["backend-class"]; } else { - $backend_class = Config::get("storage", "class", ""); + $backend_class = StorageManager::getBackend(); } if ($backend_class === "") { $data = $Image->asString();