aboutsummaryrefslogblamecommitdiffstats
path: root/util/storageconv
blob: fe12137a37c83fc2d2af2ee23900901d1b5b71c1 (plain) (tree)



















                                                                        
                       

                         





                 

                                                                                       


                                                                                               
                                                                                                                                        
                                                                       




                                                                                                                     
                                                    

                                                                                                            



                                                                                
 

                                           
                                                                                                                                        


                                      

                                    
 

                                                                                                                 
 




                                                                                                                                                                          
 












                                                                                                                                                             
                                                                           
                                                                                                                    
                                                 








                                                                                                                                                 

                                                 



                                                                    

                                         
                                                               
                         
                                                                                
                              
 

                                           
                                                                                                                                          


                                      

                                    
 







                                                                                                                                                                          
 

                                                            
 

                                                                                       

                                                                                        
 

                                                                                                                               
                                                                                 

                                                                  
                                                                                                                                              

                                                                         
 


                                                                           





                                                                                                                           

                                         
                                                               
                         
                                                                           
                              
 




                                

                     
#!/usr/bin/env php
<?php

// Hubzilla thumbnails storage convertor
function usage() {
	echo <<< EOT
Hubzilla thumbnails storage convertor

Usage:
	util/storageconv stats  # show current stats
	util/storageconv fs     # move thumbnails from SQL to filesystem
	util/storageconv db     # move thumbnails from filesystem to SQL

EOT;
}

require_once('include/cli_startup.php');

cli_startup();

use Zotlabs\Lib\Config;
use Zotlabs\Lib\Hashpath;

if($argc == 1) {
	usage();
	killme();
}

if($argc == 2) {

	$storage = (intval(Config::Get('system','photo_storage_type', 1)) > 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 AND imgscale = 0");
			echo 'Local images: ' . $x[0]['qty'] . PHP_EOL;
			$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 AND imgscale > 0");
			echo 'Image thumbnails: ' . $x[0]['qty'] . PHP_EOL;
			$xx = intval($x[0]['qty']);
			$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage IN (1, 2)");
			echo 'Imported profiles thumbnails: ' . $x[0]['qty'] . PHP_EOL;
			$xx += intval($x[0]['qty']);
			echo 'Thumbnails total: ' . $xx . PHP_EOL;
			$x = q("SELECT COUNT(id) AS qty FROM photo WHERE 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.photo_storage_type to 1 before move thumbnails to filesystem storage' . PHP_EOL;
				break;
			}

			$cur_id = 0;
			$i = 0;

			$r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 0 AND imgscale > 0");
			$max_num = $r[0]['max_num'];

			while ($i < $max_num) {

				$x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 0 AND imgscale > 0 ORDER BY id LIMIT 10",
					intval($cur_id)
				);

				if($x) {
					foreach($x as $xx) {

						if ($xx['uid'] == 0 || in_array($xx['imgscale'], [4, 5, 6]))
							$filename = Hashpath::path($xx['resource_id'], 'store/[data]/[xchan]', 2, 1) . '-' . $xx['imgscale'];
						else {
							$z = q("SELECT channel_address FROM channel WHERE channel_id = %d",
								intval($xx['uid'])
							);
							$filename = 'store/' . $z[0]['channel_address'] . '/' . $xx['resource_id'] . '-' . $xx['imgscale'];
						}

						if(! file_put_contents($filename, dbunescbin($xx['content']))) {
							@unlink($filename);
							echo PHP_EOL . 'Failed to save file ' . $filename . PHP_EOL;
						}
						else {
							$z = q("UPDATE photo SET content = '%s', os_storage = 1 WHERE id = %d",
								dbescbin($filename),
								intval($xx['id'])
							);
							if(! $z) {
								@unlink($filename);
								echo PHP_EOL . 'Failed to update metadata for saved file ' . $filename . PHP_EOL;
							}
						}

						$cur_id = $xx['id'];

						echo '.';
						$i++;
					}
				}
				echo ($i % 100 == 0 ? $i : '');
			}
			echo $i . PHP_EOL . 'Total thumbnails processed: ' . $i;
			break;

		case 'db':
			if($storage == 1) {
				echo 'Please set system.photo_storage_type to 0 before move thumbnails to SQL database storage' . PHP_EOL;
				break;
			}

			$cur_id = 0;
			$i = 0;

			$r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 1 AND imgscale > 0");
			$max_num = $r[0]['max_num'];

                        while ($i < $max_num) {

                                $x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 1 AND imgscale > 0 ORDER BY id LIMIT 10",
                                        intval($cur_id)
                                );

				if($x) {
					foreach($x as $xx) {

						$filename = dbunescbin($xx['content']);

						$content = file_get_contents($filename);
						if($content) {

							$z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d",
								dbescbin($content),
								intval($xx['id'])
							);
							if(! $z) {
								echo PHP_EOL . 'Failed to update stored file metadata ' . $filename . PHP_EOL;
								continue;
							}

							@unlink($filename);
						}
						else
							echo PHP_EOL . 'Can not read file contents ' . $filename . PHP_EOL;

						$cur_id = $xx['id'];

						echo '.';
						$i++;
					}
				}
				echo ($i % 100 == 0 ? $i : '');
			}
			echo $i . PHP_EOL . 'Total files processed: ' . $i;
			break;

		default:
			usage();
			return;

	}
	echo PHP_EOL;
}