Add move function to storage manager and console command

This commit is contained in:
fabrixxm 2018-12-01 17:44:54 +01:00 committed by Hypolite Petovan
parent 8dbedeee5e
commit 682456c7d1
2 changed files with 54 additions and 2 deletions

View File

@ -105,6 +105,12 @@ HELP;
protected function do_move() protected function do_move()
{ {
if (count($this->args) !== 1) {
throw new CommandArgsException('Invalid arguments');
}
$current = StorageManager::getBackend();
$r = StorageManager::move($current);
$this->out(sprintf("Moved %d files", $r));
} }
} }

View File

@ -2,6 +2,7 @@
namespace Friendica\Core; namespace Friendica\Core;
use Friendica\Database\DBA;
use Friendica\Core\Config; use Friendica\Core\Config;
@ -15,8 +16,8 @@ use Friendica\Core\Config;
class StorageManager class StorageManager
{ {
private static $default_backends = [ private static $default_backends = [
'Filesystem' => \Friendica\Model\Storage\Filesystem::class, 'Filesystem' => Friendica\Model\Storage\Filesystem::class,
'Database' => \Friendica\Model\Storage\Database::class, 'Database' => Friendica\Model\Storage\Database::class,
]; ];
private static $backends = []; private static $backends = [];
@ -99,4 +100,49 @@ class StorageManager
unset(self::$backends[$name]); unset(self::$backends[$name]);
Config::set('storage', 'backends', self::$backends); Config::set('storage', 'backends', self::$backends);
} }
/**
* @brief Move resources to storage $dest
*
* @param string $dest Destination storage class name
* @param array $tables Tables to look in for resources. Optional, defaults to ['photo']
*
* @retur int Number of moved resources
*/
public static function move($dest, $tables = null)
{
if (is_null($tables)) {
$tables = ['photo'];
}
$moved = 0;
foreach ($tables as $table) {
$rr = DBA::select($table, ['id', 'data', 'backend-class', 'backend-ref'], ['`backend-class` != ?', $dest]);
if (DBA::isResult($rr)) {
while($r = $rr->fetch()) {
$id = $r['id'];
$data = $r['data'];
$backendClass = $r['backend-class'];
$backendRef = $r['backend-ref'];
if ($backendClass !== '') {
$data = $backendClass::get($backendRef);
}
$ref = $dest::put($data);
if ($ref !== "") {
$ru = DBA::update($table, ["backend-class" => $dest, "backend-ref" => $ref, "data" => ""], ["id" => $id]);
if ($ru) {
if ($backendClass !== "") {
$backendClass::delete($backendRef);
}
$moved++;
}
}
}
}
}
return $moved;
}
} }