From 4cb5efc2779f31a41c31dc91f22f711cbac0e603 Mon Sep 17 00:00:00 2001 From: Max Kostikov Date: Sun, 14 Apr 2019 20:16:16 +0200 Subject: Add command line tool for thumbnails storage convertion --- util/storageconv | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 util/storageconv (limited to 'util/storageconv') diff --git a/util/storageconv b/util/storageconv new file mode 100755 index 000000000..594ec14fb --- /dev/null +++ b/util/storageconv @@ -0,0 +1,137 @@ +#!/usr/bin/env php + 0 ? 1 : 0); + echo 'Current storage set to: ' . ($storage ? 'filesystem' : 'SQL database') . PHP_EOL; + switch($argv[1]) { + case 'stats': + $x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 and os_storage = 1"); + echo 'Local images: ' . $x[0]['qty'] . PHP_EOL; + $x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND imgscale > 0"); + echo 'Thumbnails total: ' . $x[0]['qty'] . PHP_EOL; + $x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND os_storage != %d AND imgscale > 0", + $storage + ); + echo 'Thumbnails to convert: ' . $x[0]['qty'] . PHP_EOL; + break; + + case 'fs': + if($storage == 0) { + echo 'Please set system.filesystem_storage_thumbnails to 1 before move thumbnails to filesystem storage' . PHP_EOL; + break; + } + + $x = q("SELECT DISTINCT uid, resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1"); + + if($x) { + foreach($x as $xx) { + + $r = q("SELECT channel_address FROM channel WHERE channel_id = %d", + intval($xx['uid']) + ); + + $n = q("SELECT id, imgscale, content, os_path FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0", + dbesc($xx['resource_id']), + $storage + ); + + echo count($n) . PHP_EOL; + foreach($n as $nn) { + + echo '.'; + + $filename = 'store/' . $r[0]['channel_address'] . '/' . $nn['os_path'] . '-' . $nn['imgscale']; + if(! file_put_contents($filename, dbunescbin($nn['content']))) { + echo 'Failed to save file ' . $filename . PHP_EOL; + continue; + } + + $z = q("UPDATE photo SET content = '%s', os_storage = 1 WHERE id = %d", + dbescbin($filename), + intval($nn['id']) + ); + if(! $z) { + @unlink($filename); + echo 'Failed to update metadata for saved file ' . $filename . PHP_EOL; + } + + } + } + } + break; + + case 'db': + if($storage == 1) { + echo 'Please set system.filesystem_storage_thumbnails to 0 before move thumbnails to SQL database storage' . PHP_EOL; + break; + } + + $x = q("SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1"); + + if($x) { + foreach($x as $xx) { + + $n = q("SELECT id, content FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0", + dbesc($xx['resource_id']), + $storage + ); + + foreach($n as $nn) { + + echo '.'; + + $filename = dbunescbin($nn['content']); + $content = file_get_contents($filename); + if($content) { + + $z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d", + dbescbin($content), + intval($nn['id']) + ); + if(! $z) { + echo 'Failed to update stored file metadata ' . $filename . PHP_EOL; + continue; + } + + @unlink($filename); + } + else + echo 'Can not read file contents ' . $filename . PHP_EOL; + } + } + } + break; + + default: + usage(); + return; + + } + + echo PHP_EOL; +} + -- cgit v1.2.3