Add uploads cleanup console command

This commit is contained in:
Ramon Gutierrez 2018-01-17 02:04:46 +08:00
parent 77e349e8fe
commit 7f4eaa6825
3 changed files with 96 additions and 11 deletions

View file

@ -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
View file

@ -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",

View 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!');
}
}