Issues (3641)

Business/Model/Hydrator/InvitationHydrator.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\CompanyUserInvitation\Business\Model\Hydrator;
9
10
use Generated\Shared\Transfer\CompanyBusinessUnitCriteriaFilterTransfer;
11
use Generated\Shared\Transfer\CompanyUserInvitationTransfer;
12
use Spryker\Service\UtilText\Model\Hash;
13
use Spryker\Shared\CompanyUserInvitation\CompanyUserInvitationConfig;
14
use Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyBusinessUnitFacadeInterface;
15
use Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyUserFacadeInterface;
16
use Spryker\Zed\CompanyUserInvitation\Dependency\Service\CompanyUserInvitationToUtilTextInterface;
17
use Spryker\Zed\CompanyUserInvitation\Persistence\CompanyUserInvitationRepositoryInterface;
18
19
class InvitationHydrator implements InvitationHydratorInterface
20
{
21
    /**
22
     * @var array
23
     */
24
    protected $businessUnitCache = [];
25
26
    /**
27
     * @var \Generated\Shared\Transfer\CompanyUserInvitationStatusTransfer|null
28
     */
29
    protected $companyUserInvitationStatusTransfer;
30
31
    /**
32
     * @var \Spryker\Zed\CompanyUserInvitation\Persistence\CompanyUserInvitationRepositoryInterface
33
     */
34
    protected $repository;
35
36
    /**
37
     * @var \Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyBusinessUnitFacadeInterface
38
     */
39
    protected $companyBusinessUnitFacade;
40
41
    /**
42
     * @var \Spryker\Zed\CompanyUserInvitation\Dependency\Service\CompanyUserInvitationToUtilTextInterface
43
     */
44
    protected $utilTextService;
45
46
    /**
47
     * @var \Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyUserFacadeInterface
48
     */
49
    protected $companyUserFacade;
50
51
    /**
52
     * @param \Spryker\Zed\CompanyUserInvitation\Persistence\CompanyUserInvitationRepositoryInterface $repository
53
     * @param \Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyUserFacadeInterface $companyUserFacade
54
     * @param \Spryker\Zed\CompanyUserInvitation\Dependency\Facade\CompanyUserInvitationToCompanyBusinessUnitFacadeInterface $companyBusinessUnitFacade
55
     * @param \Spryker\Zed\CompanyUserInvitation\Dependency\Service\CompanyUserInvitationToUtilTextInterface $utilTextService
56
     */
57
    public function __construct(
58
        CompanyUserInvitationRepositoryInterface $repository,
59
        CompanyUserInvitationToCompanyUserFacadeInterface $companyUserFacade,
60
        CompanyUserInvitationToCompanyBusinessUnitFacadeInterface $companyBusinessUnitFacade,
61
        CompanyUserInvitationToUtilTextInterface $utilTextService
62
    ) {
63
        $this->repository = $repository;
64
        $this->companyBusinessUnitFacade = $companyBusinessUnitFacade;
65
        $this->utilTextService = $utilTextService;
66
        $this->companyUserFacade = $companyUserFacade;
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\CompanyUserInvitationTransfer $companyUserInvitationTransfer
71
     *
72
     * @return \Generated\Shared\Transfer\CompanyUserInvitationTransfer
73
     */
74
    public function hydrate(CompanyUserInvitationTransfer $companyUserInvitationTransfer): CompanyUserInvitationTransfer
75
    {
76
        $companyUserInvitationTransfer->setHash($this->generateHash($companyUserInvitationTransfer));
77
        $companyUserInvitationTransfer->setFkCompanyBusinessUnit($this->getIdCompanyBusinessUnit($companyUserInvitationTransfer));
78
        $companyUserInvitationTransfer->setFkCompanyUserInvitationStatus($this->getIdCompanyUserInvitationStatus());
79
80
        return $companyUserInvitationTransfer;
81
    }
82
83
    /**
84
     * @param \Generated\Shared\Transfer\CompanyUserInvitationTransfer $invitationTransfer
85
     *
86
     * @return string
87
     */
88
    protected function generateHash(CompanyUserInvitationTransfer $invitationTransfer): string
89
    {
90
        return $this->utilTextService->hashValue(
91
            sprintf('%s.%s', $invitationTransfer->getEmail(), microtime(true)),
92
            Hash::SHA256,
93
        );
94
    }
95
96
    /**
97
     * @param \Generated\Shared\Transfer\CompanyUserInvitationTransfer $invitationTransfer
98
     *
99
     * @return int
100
     */
101
    protected function getIdCompanyBusinessUnit(CompanyUserInvitationTransfer $invitationTransfer): int
102
    {
103
        if (!$this->businessUnitCache) {
104
            $this->populateBusinessUnitCache($invitationTransfer);
105
        }
106
107
        return $this->businessUnitCache[$invitationTransfer->getCompanyBusinessUnitName()];
108
    }
109
110
    /**
111
     * @param \Generated\Shared\Transfer\CompanyUserInvitationTransfer $invitationTransfer
112
     *
113
     * @return void
114
     */
115
    protected function populateBusinessUnitCache(CompanyUserInvitationTransfer $invitationTransfer)
116
    {
117
        $companyUserTransfer = $this->companyUserFacade->getCompanyUserById($invitationTransfer->getFkCompanyUser());
118
119
        $companyBusinessUnitCriteriaFilter = (new CompanyBusinessUnitCriteriaFilterTransfer())
120
            ->setIdCompany($companyUserTransfer->getFkCompany());
121
122
        $companyBusinessUnitCollectionTransfer = $this->companyBusinessUnitFacade->getCompanyBusinessUnitCollection(
123
            $companyBusinessUnitCriteriaFilter,
124
        );
125
126
        foreach ($companyBusinessUnitCollectionTransfer->getCompanyBusinessUnits() as $companyBusinessUnitTransfer) {
127
            $this->businessUnitCache[$companyBusinessUnitTransfer->getName()] = $companyBusinessUnitTransfer->getIdCompanyBusinessUnit();
128
        }
129
    }
130
131
    /**
132
     * @return int
133
     */
134
    protected function getIdCompanyUserInvitationStatus(): int
135
    {
136
        if (!$this->companyUserInvitationStatusTransfer) {
137
            $this->companyUserInvitationStatusTransfer = $this->repository->findCompanyUserInvitationStatusByStatusKey(
138
                CompanyUserInvitationConfig::INVITATION_STATUS_NEW,
139
            );
140
        }
141
142
        return $this->companyUserInvitationStatusTransfer->getIdCompanyUserInvitationStatus();
0 ignored issues
show
The method getIdCompanyUserInvitationStatus() does not exist on null. ( Ignorable by Annotation )

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

142
        return $this->companyUserInvitationStatusTransfer->/** @scrutinizer ignore-call */ getIdCompanyUserInvitationStatus();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
143
    }
144
}
145