3 namespace Friendica\Core;
5 use Friendica\Database\DBA;
6 use Friendica\Core\Config;
11 * @brief Manage storage backends
13 * Core code uses this class to get and set current storage backend class.
14 * Addons use this class to register and unregister additional backends.
18 private static $default_backends = [
19 'Filesystem' => Friendica\Model\Storage\Filesystem::class,
20 'Database' => Friendica\Model\Storage\Database::class,
23 private static $backends = [];
25 private static function setup()
27 if (count(self::$backends)==0) {
28 self::$backends = Config::get('storage', 'backends', self::$default_backends);
33 * @brief Return current storage backend class
36 public static function getBackend()
38 return Config::get('storage', 'class', '');
42 * @brief Return storage backend class by registered name
44 * @param string $name Backend name
45 * @return string Empty if no backend registered at $name exists
47 public static function getByName($name)
50 return defaults(self::$backends, $name, '');
54 * @brief Set current storage backend class
56 * @param string $class Backend class name
58 public static function setBackend($class)
60 /// @todo Check that $class implements IStorage
61 Config::set('storage', 'class', $class);
65 * @brief Get registered backends
69 public static function listBackends()
72 return self::$backends;
78 * @brief Register a storage backend class
80 * @param string $name User readable backend name
81 * @param string $class Backend class name
83 public static function register($name, $class)
85 /// @todo Check that $class implements IStorage
87 self::$backends[$name] = $class;
88 Config::set('storage', 'backends', self::$backends);
93 * @brief Unregister a storage backend class
95 * @param string $name User readable backend name
97 public static function unregister($class)
100 unset(self::$backends[$name]);
101 Config::set('storage', 'backends', self::$backends);
106 * @brief Move resources to storage $dest
108 * @param string $dest Destination storage class name
109 * @param array $tables Tables to look in for resources. Optional, defaults to ['photo']
111 * @retur int Number of moved resources
113 public static function move($dest, $tables = null)
115 if (is_null($tables)) {
120 foreach ($tables as $table) {
121 $rr = DBA::select($table, ['id', 'data', 'backend-class', 'backend-ref'], ['`backend-class` != ?', $dest]);
122 if (DBA::isResult($rr)) {
123 while($r = $rr->fetch()) {
126 $backendClass = $r['backend-class'];
127 $backendRef = $r['backend-ref'];
128 if ($backendClass !== '') {
129 $data = $backendClass::get($backendRef);
131 $ref = $dest::put($data);
134 $ru = DBA::update($table, ['backend-class' => $dest, 'backend-ref' => $ref, 'data' => ''], ['id' => $id]);
136 if ($backendClass !== '') {
137 $backendClass::delete($backendRef);