Add uploads cleanup console command
This commit is contained in:
parent
77e349e8fe
commit
7f4eaa6825
3 changed files with 96 additions and 11 deletions
|
|
@ -9,6 +9,7 @@
|
||||||
"sensio/framework-extra-bundle": "^5.1",
|
"sensio/framework-extra-bundle": "^5.1",
|
||||||
"symfony/console": "^4.0",
|
"symfony/console": "^4.0",
|
||||||
"symfony/debug": "^4.0",
|
"symfony/debug": "^4.0",
|
||||||
|
"symfony/filesystem": "^4.0",
|
||||||
"symfony/flex": "^1.0",
|
"symfony/flex": "^1.0",
|
||||||
"symfony/framework-bundle": "^4.0",
|
"symfony/framework-bundle": "^4.0",
|
||||||
"symfony/lts": "^4@dev",
|
"symfony/lts": "^4@dev",
|
||||||
|
|
|
||||||
22
composer.lock
generated
22
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "76c7ab30aaf88fded46189060d30a852",
|
"content-hash": "5f0891f0acd5a0d27efb15cbb37c7041",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "creof/doctrine2-spatial",
|
"name": "creof/doctrine2-spatial",
|
||||||
|
|
@ -2266,16 +2266,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/filesystem",
|
"name": "symfony/filesystem",
|
||||||
"version": "v4.0.2",
|
"version": "v4.0.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/filesystem.git",
|
"url": "https://github.com/symfony/filesystem.git",
|
||||||
"reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd"
|
"reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd",
|
"url": "https://api.github.com/repos/symfony/filesystem/zipball/760e47a4ee64b4c48f4b30017011e09d4c0f05ed",
|
||||||
"reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd",
|
"reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -2311,20 +2311,20 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony Filesystem Component",
|
"description": "Symfony Filesystem Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2017-12-14T19:48:22+00:00"
|
"time": "2018-01-03T07:38:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
"version": "v4.0.2",
|
"version": "v4.0.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/finder.git",
|
"url": "https://github.com/symfony/finder.git",
|
||||||
"reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c"
|
"reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/finder/zipball/c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c",
|
"url": "https://api.github.com/repos/symfony/finder/zipball/8b08180f2b7ccb41062366b9ad91fbc4f1af8601",
|
||||||
"reference": "c9cdda4dc4a3182d8d6daeebce4a25fef078ea4c",
|
"reference": "8b08180f2b7ccb41062366b9ad91fbc4f1af8601",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -2360,7 +2360,7 @@
|
||||||
],
|
],
|
||||||
"description": "Symfony Finder Component",
|
"description": "Symfony Finder Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2017-11-07T14:45:01+00:00"
|
"time": "2018-01-03T07:38:00+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/flex",
|
"name": "symfony/flex",
|
||||||
|
|
|
||||||
84
src/Command/UploadCleanupCommand.php
Normal file
84
src/Command/UploadCleanupCommand.php
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
|
||||||
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
|
|
||||||
|
use App\Entity\Rider;
|
||||||
|
use App\Service\FileUploader;
|
||||||
|
|
||||||
|
use DirectoryIterator;
|
||||||
|
|
||||||
|
class UploadCleanupCommand extends Command
|
||||||
|
{
|
||||||
|
private $encoder_factory;
|
||||||
|
private $object_manager;
|
||||||
|
|
||||||
|
public function __construct(ObjectManager $om, Filesystem $fs, FileUploader $uploader)
|
||||||
|
{
|
||||||
|
$this->object_manager = $om;
|
||||||
|
$this->filesystem = $fs;
|
||||||
|
$this->uploader = $uploader;
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this->setName('upload:cleanup')
|
||||||
|
->setDescription('Clean up uploads folder.')
|
||||||
|
->setHelp('Cleans up all orphaned files from the uploads folder.');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$output->writeln('Retrieving file whitelist...');
|
||||||
|
|
||||||
|
// get all image filenames
|
||||||
|
$em = $this->object_manager;
|
||||||
|
$rows = $em->getRepository(Rider::class)->findAll();
|
||||||
|
$whitelist = ['.gitkeep'];
|
||||||
|
|
||||||
|
if (!empty($rows)) {
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$image = $row->getImageFile();
|
||||||
|
|
||||||
|
if (!empty($image)) {
|
||||||
|
$whitelist[] = $image;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$directory = $this->uploader->getTargetDir();
|
||||||
|
|
||||||
|
// get all files in folder
|
||||||
|
$files = new DirectoryIterator($directory);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
// delete all files that are not linked
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$filename = $file->getFilename();
|
||||||
|
|
||||||
|
if (!in_array($filename, $whitelist) && $file->isFile()) {
|
||||||
|
try {
|
||||||
|
$this->filesystem->remove($directory . '/' . $filename);
|
||||||
|
} catch (IOExceptionInterface $e) {
|
||||||
|
$output->writeln('An error occurred while deleting the file "' . $filename . '"!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i > 0)
|
||||||
|
$output->writeln('Deleted ' . $i . ' orphaned file(s). Done!');
|
||||||
|
else
|
||||||
|
$output->writeln('No files found. Done!');
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue