ImportCommand   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Importance

Changes 3
Bugs 2 Features 0
Metric Value
wmc 5
eloc 45
c 3
b 2
f 0
dl 0
loc 67
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A buildOptionParser() 0 25 1
A execute() 0 32 4
1
<?php
2
declare(strict_types=1);
3
4
/**
5
 * BEdita, API-first content management framework
6
 * Copyright 2023 Atlas Srl, Chialab Srl
7
 *
8
 * This file is part of BEdita: you can redistribute it and/or modify
9
 * it under the terms of the GNU Lesser General Public License as published
10
 * by the Free Software Foundation, either version 3 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * See LICENSE.LGPL or <http://gnu.org/licenses/lgpl-3.0.html> for more details.
14
 */
15
16
namespace BEdita\ImportTools\Command;
17
18
use BEdita\Core\Utility\LoggedUser;
19
use BEdita\ImportTools\Utility\Import;
20
use Cake\Command\Command;
21
use Cake\Console\Arguments;
22
use Cake\Console\ConsoleIo;
23
use Cake\Console\ConsoleOptionParser;
24
25
/**
26
 * Import command.
27
 *
28
 * $ bin/cake import --help
29
 *
30
 * Usage:
31
 * cake import [options]
32
 *
33
 * Options:
34
 *
35
 * --dryrun, -d   dry run mode
36
 * --file, -f     CSV file to import (required)
37
 * --help, -h     Display this help.
38
 * --parent, -p   destination folder uname
39
 * --quiet, -q    Enable quiet output.
40
 * --type, -t     entity type to import (required)
41
 * --verbose, -v  Enable verbose output.
42
 *
43
 * # basic
44
 * $ bin/cake import --file documents.csv --type documents
45
 * $ bin/cake import -f documents.csv -t documents
46
 *
47
 * # dry-run
48
 * $ bin/cake import --file articles.csv --type articles --dryrun yes
49
 * $ bin/cake import -f articles.csv -t articles -d yes
50
 *
51
 * # destination folder
52
 * $ bin/cake import --file news.csv --type news --parent my-folder-uname
53
 * $ bin/cake import -f news.csv -t news -p my-folder-uname
54
 *
55
 * # translations
56
 * $ bin/cake import --file translations.csv --type translations
57
 * $ bin/cake import -f translations.csv -t translations
58
 */
59
class ImportCommand extends Command
60
{
61
    /**
62
     * @inheritDoc
63
     */
64
    public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
65
    {
66
        $parser = parent::buildOptionParser($parser);
67
        $parser->addOption('file', [
68
                'help' => 'CSV file to import',
69
                'required' => true,
70
                'short' => 'f',
71
            ])
72
            ->addOption('type', [
73
                'help' => 'entity type to import',
74
                'required' => true,
75
                'short' => 't',
76
            ])
77
            ->addOption('parent', [
78
                'help' => 'destination folder uname',
79
                'required' => false,
80
                'short' => 'p',
81
            ])
82
            ->addOption('dryrun', [
83
                'help' => 'dry run mode',
84
                'required' => false,
85
                'short' => 'd',
86
            ]);
87
88
        return $parser;
89
    }
90
91
    /**
92
     * @inheritDoc
93
     */
94
    public function execute(Arguments $args, ConsoleIo $io)
95
    {
96
        $filename = (string)$args->getOption('file');
97
        if (!file_exists($filename)) {
98
            $io->out(sprintf('Bad csv source file name "%s"', $filename));
99
100
            return;
101
        }
102
        $type = (string)$args->getOption('type');
103
        $parent = (string)$args->getOption('parent');
104
        $dryrun = $args->getOption('dryrun') ? true : false;
105
        $io->out('---------------------------------------');
106
        $io->out('Start');
107
        $io->out(sprintf('File: %s', $filename));
108
        $io->out(sprintf('Type: %s', $type));
109
        $io->out(sprintf('Parent: %s', $parent));
110
        $io->out(sprintf('Dry run mode: %s', (string)$dryrun));
111
        LoggedUser::setUserAdmin();
112
        $import = new Import($filename, $type, $parent, $dryrun);
113
        $method = $type !== 'translations' ? 'saveObjects' : 'saveTranslations';
114
        $import->$method();
115
        $io->out(
116
            sprintf(
117
                'Processed: %d, Saved: %d, Skipped: %d, Errors: %d',
118
                $import->processed,
119
                $import->saved,
120
                $import->skipped,
121
                $import->errors
122
            )
123
        );
124
        $io->out('Done, bye!');
125
        $io->out('---------------------------------------');
126
    }
127
}
128