Completed
Push — master ( 82575c...d4a96d )
by De Cramer
05:33 queued 01:16
created
Labels
Severity
1
<?php
2
3
require_once __DIR__ . '/vendor/autoload.php';
4
5
use oliverde8\AssociativeArraySimplified\AssociativeArray;
6
use Oliverde8\Component\PhpEtl\ChainOperation\Grouping\SimpleGroupingOperation;
7
use Oliverde8\Component\PhpEtl\ChainOperation\Loader\FileWriterOperation;
8
use Oliverde8\Component\PhpEtl\ChainOperation\Transformer\CallbackTransformerOperation;
9
use Oliverde8\Component\PhpEtl\ChainProcessor;
10
use Oliverde8\Component\PhpEtl\Item\DataItem;
11
use Oliverde8\Component\PhpEtl\Item\DataItemInterface;
12
use Oliverde8\Component\PhpEtl\Loader\File\Csv;
13
use Oliverde8\Component\PhpEtl\Model\File\Csv\Writer;
14
15
$inputIterator = new Csv(__DIR__  . '/exemples/I-Service.csv');
16
17
$localizableAttributes = ['name_src', 'editor_name_src', 'valid_from', 'valid_to'];
18
19
$operations = [];
20
21
// Cleanup the data to use akeneo attribute codes.
22
$operations[] = new CallbackTransformerOperation(function (DataItemInterface $item, &$context) {
23
    $data = $item->getData();
24
    $newData = [];
25
    $newData['sku'] = implode(
26
        '_',
27
        [
28
            'SRV',
29
            AssociativeArray::getFromKey($data, 'APS_ID')
30
        ]
31
    );
32
    $newData['locale'] = implode(
33
        '_',
34
        [
35
            strtolower(AssociativeArray::getFromKey($data, 'LANGUAGE')),
0 ignored issues
show
It seems like oliverde8\AssociativeArr...mKey($data, 'LANGUAGE') can also be of type mixed; however, parameter $str of strtolower() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

35
            strtolower(/** @scrutinizer ignore-type */ AssociativeArray::getFromKey($data, 'LANGUAGE')),
Loading history...
36
            strtoupper(AssociativeArray::getFromKey($data, 'COUNTRY')),
0 ignored issues
show
It seems like oliverde8\AssociativeArr...omKey($data, 'COUNTRY') can also be of type mixed; however, parameter $string of strtoupper() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

36
            strtoupper(/** @scrutinizer ignore-type */ AssociativeArray::getFromKey($data, 'COUNTRY')),
Loading history...
37
        ]
38
    );
39
    $newData['categories'] = 'main_service,web_service';
40
    $newData['family'] = 'service';
41
    $newData['name_src'] = AssociativeArray::getFromKey($data, 'SERVICE_NAME');
42
    $newData['editor_name_src'] = AssociativeArray::getFromKey($data, 'PROVIDER');
43
    $newData['valid_from'] = AssociativeArray::getFromKey($data, 'BEGIN_DATE');
44
    $newData['valid_to'] = AssociativeArray::getFromKey($data, 'END_DATE');
45
46
    return new DataItem($newData);
47
});
48
49
// Group products by sku.
50
$operations[] = new SimpleGroupingOperation(['sku']);
51
52
// Finalize transformation by having proper attribute codes taking locales into account.
53
$operations[] = new CallbackTransformerOperation(
54
    function (DataItemInterface $item, &$context) use ($localizableAttributes) {
55
56
        $data = [];
57
        foreach ($item->getData() as $productDetails) {
58
            $locale = $productDetails['locale'];
59
            unset($productDetails['locale']);
60
61
            foreach ($productDetails as $attributeCode => $value) {
62
                if (in_array($attributeCode, $localizableAttributes)) {
63
                    $data[$attributeCode . '-' . $locale] = $value;
64
                } else {
65
                    $data[$attributeCode] = $value;
66
                }
67
            }
68
        }
69
70
        return new DataItem($data);
71
    }
72
);
73
74
// Write into files.
75
$operations[] = new FileWriterOperation(new Writer(__DIR__ . '/exemples/output.csv'));
76
77
$chainProcessor = new ChainProcessor($operations);
78
$chainProcessor->process($inputIterator, []);