Passed
Push — master ( e84574...f82c0c )
by Nicolaas
02:18
created

FixSvgs::getTitle()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
namespace Sunnysideup\PerfectCmsImages\Tasks;
4
5
use SilverStripe\Control\Director;
6
use SilverStripe\Control\HTTPRequest;
7
use SilverStripe\Dev\BuildTask;
8
use SilverStripe\ORM\DB;
9
10
use SilverStripe\Assets\File;
11
use SilverStripe\Assets\Image;
12
13
/**
14
 * Class DeleteGeneratedImagesTask.
15
 *
16
 * Hack to allow removing manipulated images
17
 * This is needed occasionally when manipulation functions change
18
 * It isn't directly possible with core so this is a workaround
19
 *
20
 * @see https://github.com/silverstripe/silverstripe-assets/issues/109
21
 * @codeCoverageIgnore
22
 */
23
class FixSvgs extends BuildTask
24
{
25
    public function getTitle(): string
26
    {
27
        return 'Fix Svg Images that are saved as Files rather than Images';
28
    }
29
30
    public function getDescription(): string
31
    {
32
        return 'Go through all the Files, check if they are SVGs and then change the classname to Image.';
33
    }
34
35
    /**
36
     * Create test jobs for the purposes of testing.
37
     *
38
     * @param HTTPRequest $request
39
     */
40
    public function run($request) // phpcs:ignore
41
    {
42
        $files = $this->getBatchOfFiles();
43
        while($files) {
44
            foreach($files as $file) {
45
                if($file->getExtension() === 'svg') {
46
                    DB::alteration_message('Fixing '.$file->Link());
47
                    $wasPublished = $file->isPublished();
48
                    $file->ClassName = Image::class;
49
                    $file->write();
50
                    if($wasPublished) {
51
                        $file->publishSingle();
52
                    }
53
                }
54
            }
55
            $files = $this->getBatchOfFiles();
56
        }
57
58
    }
59
60
    protected function getBatchOfFiles()
61
    {
62
        return File::get()->filter(['Name:PartialMatch' => '.svg'])->exclude(['ClassName' => Image::class])->limit(100);
63
    }
64
}
65