Issues (3641)

Rule/AbstractCategoryNodeExistsValidationRule.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Zed\Category\Business\Validator\Rule;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\CategoryNodeCriteriaTransfer;
12
use Generated\Shared\Transfer\ErrorCollectionTransfer;
13
use Spryker\Zed\Category\Business\Reader\CategoryNodeReaderInterface;
14
use Spryker\Zed\Category\Business\Validator\Util\ErrorAdderInterface;
15
16
abstract class AbstractCategoryNodeExistsValidationRule
17
{
18
    /**
19
     * @var string
20
     */
21
    protected const GLOSSARY_KEY_VALIDATION_CATEGORY_NODE_ENTITY_NOT_FOUND = 'category.validation.category_node_entity_not_found';
22
23
    /**
24
     * @var string
25
     */
26
    protected const GLOSSARY_KEY_PARAM_CATEGORY_NODE_ID = '%category_node_id%';
27
28
    /**
29
     * @var \Spryker\Zed\Category\Business\Reader\CategoryNodeReaderInterface
30
     */
31
    protected CategoryNodeReaderInterface $categoryNodeReader;
32
33
    /**
34
     * @var \Spryker\Zed\Category\Business\Validator\Util\ErrorAdderInterface
35
     */
36
    protected ErrorAdderInterface $errorAdder;
37
38
    /**
39
     * @param \Spryker\Zed\Category\Business\Reader\CategoryNodeReaderInterface $categoryNodeReader
40
     * @param \Spryker\Zed\Category\Business\Validator\Util\ErrorAdderInterface $errorAdder
41
     */
42
    public function __construct(
43
        CategoryNodeReaderInterface $categoryNodeReader,
44
        ErrorAdderInterface $errorAdder
45
    ) {
46
        $this->categoryNodeReader = $categoryNodeReader;
47
        $this->errorAdder = $errorAdder;
48
    }
49
50
    /**
51
     * @param \ArrayObject<array-key, \Generated\Shared\Transfer\NodeTransfer> $categoryNodeTransfers
52
     *
53
     * @return \Generated\Shared\Transfer\ErrorCollectionTransfer
54
     */
55
    public function validate(ArrayObject $categoryNodeTransfers): ErrorCollectionTransfer
56
    {
57
        $errorCollectionTransfer = new ErrorCollectionTransfer();
58
59
        $categoryNodeIds = $this->extractCategoryNodeIdsFromCategoryNodeTransfers($categoryNodeTransfers);
60
        $categoryNodeCollectionTransfer = $this->categoryNodeReader->getCategoryNodeCollection(
61
            (new CategoryNodeCriteriaTransfer())->setCategoryNodeIds($categoryNodeIds),
62
        );
63
64
        $notExistingCategoryNodeIds = array_diff(
65
            $categoryNodeIds,
66
            $this->extractCategoryNodeIdsFromCategoryNodeTransfers($categoryNodeCollectionTransfer->getNodes()),
67
        );
68
69
        if (!$notExistingCategoryNodeIds) {
70
            return $errorCollectionTransfer;
71
        }
72
73
        foreach ($notExistingCategoryNodeIds as $entityIdentifier => $idCategoryNode) {
74
            $this->errorAdder->addError(
75
                $errorCollectionTransfer,
76
                $entityIdentifier,
77
                static::GLOSSARY_KEY_VALIDATION_CATEGORY_NODE_ENTITY_NOT_FOUND,
78
                [static::GLOSSARY_KEY_PARAM_CATEGORY_NODE_ID => $idCategoryNode],
79
            );
80
        }
81
82
        return $errorCollectionTransfer;
83
    }
84
85
    /**
86
     * @param \ArrayObject<array-key, \Generated\Shared\Transfer\NodeTransfer> $categoryNodeTransfers
87
     *
88
     * @return list<int>
89
     */
90
    protected function extractCategoryNodeIdsFromCategoryNodeTransfers(ArrayObject $categoryNodeTransfers): array
91
    {
92
        $categoryNodeIds = [];
93
        foreach ($categoryNodeTransfers as $categoryNodeTransfer) {
94
            $categoryNodeIds[] = $categoryNodeTransfer->getIdCategoryNodeOrFail();
95
        }
96
97
        return $categoryNodeIds;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $categoryNodeIds returns the type array which is incompatible with the documented return type Spryker\Zed\Category\Business\Validator\Rule\list.
Loading history...
98
    }
99
}
100