Passed
Push — master ( 270226...e22eb7 )
by James
06:04 queued 11s
created

StartImport::startImport()   C

Complexity

Conditions 12
Paths 10

Size

Total Lines 51
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 12
eloc 30
c 1
b 0
f 0
nc 10
nop 2
dl 0
loc 51
rs 6.9666

How to fix   Long Method    Complexity   

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
 * StartImport.php
4
 * Copyright (c) 2019 - 2020 [email protected]
5
 *
6
 * This file is part of the Firefly III CSV importer
7
 * (https://github.com/firefly-iii-csv-importer).
8
 *
9
 * This program is free software: you can redistribute it and/or modify
10
 * it under the terms of the GNU Affero General Public License as
11
 * published by the Free Software Foundation, either version 3 of the
12
 * License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU Affero General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Affero General Public License
20
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
21
 */
22
23
namespace App\Console;
24
25
use App\Exceptions\ImportException;
26
use App\Services\CSV\Configuration\Configuration;
27
use App\Services\CSV\File\FileReader;
28
use App\Services\Import\ImportRoutineManager;
29
use Log;
30
/**
31
 * Trait StartImport
32
 */
33
trait StartImport
34
{
35
    /**
36
     * @param string $csv
37
     * @param array  $configuration
38
     *
39
     * @return int
40
     */
41
    private function startImport(string $csv, array $configuration): int
42
    {
43
        Log::debug(sprintf('Now in %s', __METHOD__));
44
        $configObject = Configuration::fromFile($configuration);
45
        $manager      = new ImportRoutineManager;
46
47
        try {
48
            $manager->setConfiguration($configObject);
49
        } catch (ImportException $e) {
50
            $this->error($e->getMessage());
0 ignored issues
show
Bug introduced by
It seems like error() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

50
            $this->/** @scrutinizer ignore-call */ 
51
                   error($e->getMessage());
Loading history...
51
52
            return 1;
53
        }
54
        $manager->setReader(FileReader::getReaderFromContent($csv));
55
        try {
56
            $manager->start();
57
        } catch (ImportException $e) {
58
            $this->error($e->getMessage());
59
60
            return 1;
61
        }
62
63
        $messages = $manager->getAllMessages();
64
        $warnings = $manager->getAllWarnings();
65
        $errors   = $manager->getAllErrors();
66
67
        if (count($errors) > 0) {
68
            foreach ($errors as $index => $error) {
69
                foreach ($error as $line) {
70
                    $this->error(sprintf('ERROR in line     #%d: %s', $index + 1, $line));
71
                }
72
            }
73
        }
74
75
        if (count($warnings) > 0) {
76
            foreach ($warnings as $index => $warning) {
77
                foreach ($warning as $line) {
78
                    $this->warn(sprintf('Warning from line #%d: %s', $index + 1, $line));
0 ignored issues
show
Bug introduced by
It seems like warn() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

78
                    $this->/** @scrutinizer ignore-call */ 
79
                           warn(sprintf('Warning from line #%d: %s', $index + 1, $line));
Loading history...
79
                }
80
            }
81
        }
82
83
        if (count($messages) > 0) {
84
            foreach ($messages as $index => $message) {
85
                foreach ($message as $line) {
86
                    $this->info(sprintf('Message from line #%d: %s', $index + 1, strip_tags($line)));
0 ignored issues
show
Bug introduced by
It seems like info() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

86
                    $this->/** @scrutinizer ignore-call */ 
87
                           info(sprintf('Message from line #%d: %s', $index + 1, strip_tags($line)));
Loading history...
87
                }
88
            }
89
        }
90
91
        return 0;
92
    }
93
}