Add move function to storage manager and console command
This commit is contained in:
parent
8dbedeee5e
commit
682456c7d1
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user