11<?php
22/**
3- * Copyright 2015 Adobe
3+ * Copyright 2011 Adobe
44 * All Rights Reserved.
55 */
6+
67namespace Magento \Customer \Model \ResourceModel ;
78
8- use Magento \Customer \Controller \Adminhtml \Group \Delete ;
99use Magento \Customer \Model \CustomerRegistry ;
1010use Magento \Customer \Model \ResourceModel \Address \DeleteRelation ;
11+ use Magento \Eav \Model \ResourceModel \OrphanedMultiselectCleaner ;
1112use Magento \Framework \App \ObjectManager ;
13+ use Magento \Framework \DataObject ;
1214
1315/**
14- * Class Address
16+ * Customer address entity resource model
1517 *
16- * @package Magento\Customer\Model\ResourceModel
1718 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1819 */
1920class Address extends \Magento \Eav \Model \Entity \VersionControl \AbstractEntity
@@ -28,24 +29,51 @@ class Address extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
2829 */
2930 protected $ customerRepository ;
3031
32+ /**
33+ * @var OrphanedMultiselectCleaner
34+ */
35+ private $ orphanedMultiselectCleaner ;
36+
37+ /**
38+ * @var DeleteRelation
39+ */
40+ private $ deleteRelation ;
41+
42+ /**
43+ * @var CustomerRegistry
44+ */
45+ private $ customerRegistry ;
46+
3147 /**
3248 * @param \Magento\Eav\Model\Entity\Context $context
3349 * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
3450 * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
3551 * @param \Magento\Framework\Validator\Factory $validatorFactory
3652 * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
3753 * @param array $data
54+ * @param OrphanedMultiselectCleaner|null $orphanedMultiselectCleaner
55+ * @param DeleteRelation|null $deleteRelation
56+ * @param CustomerRegistry|null $customerRegistry
3857 */
3958 public function __construct (
4059 \Magento \Eav \Model \Entity \Context $ context ,
4160 \Magento \Framework \Model \ResourceModel \Db \VersionControl \Snapshot $ entitySnapshot ,
4261 \Magento \Framework \Model \ResourceModel \Db \VersionControl \RelationComposite $ entityRelationComposite ,
4362 \Magento \Framework \Validator \Factory $ validatorFactory ,
4463 \Magento \Customer \Api \CustomerRepositoryInterface $ customerRepository ,
45- $ data = []
64+ $ data = [],
65+ ?OrphanedMultiselectCleaner $ orphanedMultiselectCleaner = null ,
66+ ?DeleteRelation $ deleteRelation = null ,
67+ ?CustomerRegistry $ customerRegistry = null
4668 ) {
4769 $ this ->customerRepository = $ customerRepository ;
4870 $ this ->_validatorFactory = $ validatorFactory ;
71+ $ this ->orphanedMultiselectCleaner = $ orphanedMultiselectCleaner
72+ ?? ObjectManager::getInstance ()->get (OrphanedMultiselectCleaner::class);
73+ $ this ->deleteRelation = $ deleteRelation
74+ ?? ObjectManager::getInstance ()->get (DeleteRelation::class);
75+ $ this ->customerRegistry = $ customerRegistry
76+ ?? ObjectManager::getInstance ()->get (CustomerRegistry::class);
4977 parent ::__construct ($ context , $ entitySnapshot , $ entityRelationComposite , $ data );
5078 }
5179
@@ -76,11 +104,15 @@ public function getEntityType()
76104 /**
77105 * Check customer address before saving
78106 *
79- * @param \Magento\Framework\ DataObject $address
107+ * @param DataObject $address
80108 * @return $this
81109 */
82- protected function _beforeSave (\ Magento \ Framework \ DataObject $ address )
110+ protected function _beforeSave (DataObject $ address )
83111 {
112+ if ($ address ->getId ()) {
113+ $ this ->cleanOrphanedMultiselectValues ($ address );
114+ }
115+
84116 parent ::_beforeSave ($ address );
85117
86118 $ this ->_validate ($ address );
@@ -91,7 +123,7 @@ protected function _beforeSave(\Magento\Framework\DataObject $address)
91123 /**
92124 * Validate customer address entity
93125 *
94- * @param \Magento\Framework\ DataObject $address
126+ * @param DataObject $address
95127 * @return void
96128 * @throws \Magento\Framework\Validator\Exception When validation failed
97129 */
@@ -122,25 +154,14 @@ public function delete($object)
122154 }
123155
124156 /**
125- * Get instance of DeleteRelation class
126- *
127- * @deprecated 101.0.0
128- * @return DeleteRelation
129- */
130- private function getDeleteRelation ()
131- {
132- return ObjectManager::getInstance ()->get (DeleteRelation::class);
133- }
134-
135- /**
136- * Get instance of CustomerRegistry class
157+ * Clean up orphaned multiselect attribute values before validation
137158 *
138- * @deprecated 101.0.0
139- * @return CustomerRegistry
159+ * @param DataObject $address
160+ * @return void
140161 */
141- private function getCustomerRegistry ()
162+ private function cleanOrphanedMultiselectValues ( DataObject $ address ): void
142163 {
143- return ObjectManager:: getInstance ()-> get (CustomerRegistry::class );
164+ $ this -> orphanedMultiselectCleaner -> cleanEntity ( $ this , $ address );
144165 }
145166
146167 /**
@@ -149,11 +170,10 @@ private function getCustomerRegistry()
149170 * @param \Magento\Customer\Model\Address $address
150171 * @return $this
151172 */
152- protected function _afterDelete (\ Magento \ Framework \ DataObject $ address )
173+ protected function _afterDelete (DataObject $ address )
153174 {
154- $ customer = $ this ->getCustomerRegistry ()->retrieve ($ address ->getCustomerId ());
155-
156- $ this ->getDeleteRelation ()->deleteRelation ($ address , $ customer );
175+ $ customer = $ this ->customerRegistry ->retrieve ($ address ->getCustomerId ());
176+ $ this ->deleteRelation ->deleteRelation ($ address , $ customer );
157177 return parent ::_afterDelete ($ address );
158178 }
159179}
0 commit comments