Completed
Push — master ( a7caf4...17170d )
by Tim
10s
created

ArchivePlugin::process()   B

Complexity

Conditions 6
Paths 7

Size

Total Lines 61
Code Lines 24

Duplication

Lines 3
Ratio 4.92 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
dl 3
loc 61
c 0
b 0
f 0
ccs 0
cts 31
cp 0
rs 8.6806
cc 6
eloc 24
nc 7
nop 0
crap 42

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * TechDivision\Import\Plugins\ArchivePlugin
5
 *
6
 * NOTICE OF LICENSE
7
 *
8
 * This source file is subject to the Open Software License (OSL 3.0)
9
 * that is available through the world-wide-web at this URL:
10
 * http://opensource.org/licenses/osl-3.0.php
11
 *
12
 * PHP version 5
13
 *
14
 * @author    Tim Wagner <[email protected]>
15
 * @copyright 2016 TechDivision GmbH <[email protected]>
16
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
 * @link      https://github.com/techdivision/import
18
 * @link      http://www.techdivision.com
19
 */
20
21
namespace TechDivision\Import\Plugins;
22
23
use TechDivision\Import\Utils\RegistryKeys;
24
25
/**
26
 * Plugin that archives the artefacts.
27
 *
28
 * @author    Tim Wagner <[email protected]>
29
 * @copyright 2016 TechDivision GmbH <[email protected]>
30
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
31
 * @link      https://github.com/techdivision/import
32
 * @link      http://www.techdivision.com
33
 */
34
class ArchivePlugin extends AbstractPlugin
35
{
36
37
    /**
38
     * Process the plugin functionality.
39
     *
40
     * @return void
41
     * @throws \Exception Is thrown, if the plugin can not be processed
42
     */
43
    public function process()
44
    {
45
46
        // query whether or not, the import artefacts have to be archived
47
        if (!$this->getConfiguration()->haveArchiveArtefacts()) {
48
            $this->getSystemLogger()->info('Archiving functionality has not been activated');
49
            return;
50
        }
51
52
        // load the actual status
53
        $status = $this->getRegistryProcessor()->getAttribute($this->getSerial());
54
55
        // load the number of imported bunches from the status
56
        $bunches = $status[RegistryKeys::BUNCHES];
57
58
        // if no files have been imported, return immediately
59
        if ($bunches === 0) {
60
            $this->getSystemLogger()->info('Found no files to archive');
61
            return;
62
        }
63
64
        // clear the filecache
65
        clearstatcache();
66
67
        // query whether or not the configured source directory is available
68 View Code Duplication
        if (!is_dir($sourceDir = $status[RegistryKeys::SOURCE_DIRECTORY])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
69
            throw new \Exception(sprintf('Configured source directory %s is not available!', $sourceDir));
70
        }
71
72
        // init file iterator on source directory
73
        $fileIterator = new \FilesystemIterator($sourceDir);
74
75
        // log the number of files that has to be archived
76
        $this->getSystemLogger()->info(sprintf('Found %d files to archive in directory %s', $bunches, $sourceDir));
77
78
        // initialize the directory to create the archive in
79
        $archiveDir = sprintf('%s/%s', $this->getConfiguration()->getTargetDir(), $this->getConfiguration()->getArchiveDir());
80
81
        // query whether or not the directory already exists
82
        if (!is_dir($archiveDir)) {
83
            mkdir($archiveDir);
84
        }
85
86
        // create the ZIP archive
87
        $archive = new \ZipArchive();
88
        $archive->open($archiveFile = sprintf('%s/%s.zip', $archiveDir, $this->getSerial()), \ZipArchive::CREATE);
89
90
        // iterate through all files and add them to the ZIP archive
91
        foreach ($fileIterator as $filename) {
92
            $archive->addFile($filename);
93
        }
94
95
        // save the ZIP archive
96
        $archive->close();
97
98
        // finally remove the directory with the imported files
99
        $this->removeDir($sourceDir);
100
101
        // and and log a message that the import artefacts have been archived
102
        $this->getSystemLogger()->info(sprintf('Successfully archived imported files to %s!', $archiveFile));
103
    }
104
}
105