diff --git a/app/Console/Commands/Upgrade/MigrateTagLocations.php b/app/Console/Commands/Upgrade/MigrateTagLocations.php new file mode 100644 index 0000000000..b8510ddb87 --- /dev/null +++ b/app/Console/Commands/Upgrade/MigrateTagLocations.php @@ -0,0 +1,132 @@ +. + */ + +namespace FireflyIII\Console\Commands\Upgrade; + +use FireflyIII\Models\Location; +use FireflyIII\Models\Tag; +use Illuminate\Console\Command; + +/** + * Class MigrateTagLocations + */ +class MigrateTagLocations extends Command +{ + + public const CONFIG_NAME = '500_migrate_tag_locations'; + /** + * The console command description. + * + * @var string + */ + protected $description = 'Migrate tag locations.'; + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'firefly-iii:migrate-tag-locations {--F|force : Force the execution of this command.}'; + + /** + * Execute the console command. + * + * @return int + */ + public function handle(): int + { + $start = microtime(true); + if ($this->isExecuted() && true !== $this->option('force')) { + $this->warn('This command has already been executed.'); + + return 0; + } + $this->migrateTagLocations(); + $this->markAsExecuted(); + + $end = round(microtime(true) - $start, 2); + $this->info(sprintf('Migrated tag locations in %s seconds.', $end)); + + return 0; + } + + /** + * @param Tag $tag + * + * @return bool + */ + private function hasLocationDetails(Tag $tag): bool + { + return null !== $tag->latitude && null !== $tag->longitude && null !== $tag->zoomLevel; + } + + /** + * @return bool + */ + private function isExecuted(): bool + { + $configVar = app('fireflyconfig')->get(self::CONFIG_NAME, false); + if (null !== $configVar) { + return (bool)$configVar->data; + } + + return false; // @codeCoverageIgnore + } + + + /** + * + */ + private function markAsExecuted(): void + { + app('fireflyconfig')->set(self::CONFIG_NAME, true); + } + + /** + * @param Tag $tag + */ + private function migrateLocationDetails(Tag $tag): void + { + $location = new Location; + $location->longitude = $tag->longitude; + $location->latitude = $tag->latitude; + $location->zoom_level = $tag->zoomLevel; + $location->locatable()->associate($tag); + $location->save(); + + $tag->longitude = null; + $tag->latitude = null; + $tag->zoomLevel = null; + $tag->save(); + } + + private function migrateTagLocations(): void + { + $tags = Tag::get(); + /** @var Tag $tag */ + foreach ($tags as $tag) { + if ($this->hasLocationDetails($tag)) { + $this->migrateLocationDetails($tag); + } + } + } + + +} diff --git a/app/Console/Commands/Upgrade/UpgradeDatabase.php b/app/Console/Commands/Upgrade/UpgradeDatabase.php index 9aa7550355..b0285251f6 100644 --- a/app/Console/Commands/Upgrade/UpgradeDatabase.php +++ b/app/Console/Commands/Upgrade/UpgradeDatabase.php @@ -59,7 +59,7 @@ class UpgradeDatabase extends Command $commands = [ - // there are 13 upgrade commands. + // there are 14 upgrade commands. 'firefly-iii:transaction-identifiers', 'firefly-iii:migrate-to-groups', 'firefly-iii:account-currencies', @@ -73,6 +73,7 @@ class UpgradeDatabase extends Command 'firefly-iii:back-to-journals', 'firefly-iii:rename-account-meta', 'firefly-iii:migrate-recurrence-meta', + 'firefly-iii:migrate-tag-locations', // there are 16 verify commands. 'firefly-iii:fix-piggies', diff --git a/app/Http/Controllers/System/InstallController.php b/app/Http/Controllers/System/InstallController.php index e4681576d7..0bd15a00fb 100644 --- a/app/Http/Controllers/System/InstallController.php +++ b/app/Http/Controllers/System/InstallController.php @@ -71,7 +71,7 @@ class InstallController extends Controller 'firefly-iii:restore-oauth-keys' => [], 'generate-keys' => [], // an exception :( - // there are 13 upgrade commands. + // there are 14 upgrade commands. 'firefly-iii:transaction-identifiers' => [], 'firefly-iii:migrate-to-groups' => [], 'firefly-iii:account-currencies' => [], @@ -85,6 +85,7 @@ class InstallController extends Controller 'firefly-iii:back-to-journals' => [], 'firefly-iii:rename-account-meta' => [], 'firefly-iii:migrate-recurrence-meta' => [], + 'firefly-iii:migrate-tag-locations' => [], // there are 16 verify commands. 'firefly-iii:fix-piggies' => [], diff --git a/composer.json b/composer.json index 8712ee5002..2d8ba81c3a 100644 --- a/composer.json +++ b/composer.json @@ -150,6 +150,7 @@ "@php artisan firefly-iii:back-to-journals", "@php artisan firefly-iii:rename-account-meta", "@php artisan firefly-iii:migrate-recurrence-meta", + "@php artisan firefly-iii:migrate-tag-locations", "@php artisan firefly-iii:fix-piggies", "@php artisan firefly-iii:create-link-types",