Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
PropertyGroupCollection example
use
IntegrationTestBehaviour;
private
BuyBoxCmsElementResolver
$buyBoxResolver
;
protected
function
setUp
(
)
: void
{
$saleChannelProductEntity
=
new
SalesChannelProductEntity
(
)
;
$saleChannelProductEntity
->
setId
(
'product123'
)
;
$mockConfiguratorLoader
=
$this
->
createMock
(
ProductConfiguratorLoader::
class
)
;
$mockConfiguratorLoader
->
method
(
'load'
)
->
willReturn
(
new
PropertyGroupCollection
(
)
)
;
$repositoryMock
=
$this
->
createMock
(
EntityRepository::
class
)
;
$this
->buyBoxResolver =
new
BuyBoxCmsElementResolver
(
$mockConfiguratorLoader
,
$repositoryMock
)
;
}
public
function
testGetType
(
)
: void
{
static
::
assertSame
(
'buy-box',
$this
->buyBoxResolver->
getType
(
)
)
;
}
$group
->
assign
(
[
'options' =>
new
PropertyGroupOptionCollection
(
)
,
]
)
;
}
\
assert
(
$group
->
get
(
'options'
)
!== null
)
;
$group
->
get
(
'options'
)
->
add
(
$option
)
;
$sorted
[
$groupId
]
=
$group
;
}
$collection
=
new
PropertyGroupCollection
(
$sorted
)
;
$collection
->
sortByPositions
(
)
;
$collection
->
sortByConfig
(
)
;
return
$collection
;
}
}
return
$this
->
fmap
(
fn
(
PropertyGroupOptionEntity
$propertyGroupOption
)
=>
$propertyGroupOption
->
getMediaId
(
)
)
;
}
public
function
filterByMediaId
(
string
$id
)
: self
{
return
$this
->
filter
(
fn
(
PropertyGroupOptionEntity
$propertyGroupOption
)
=>
$propertyGroupOption
->
getMediaId
(
)
===
$id
)
;
}
public
function
getGroups
(
)
: PropertyGroupCollection
{
return
new
PropertyGroupCollection
(
$this
->
fmap
(
fn
(
PropertyGroupOptionEntity
$propertyGroupOption
)
=>
$propertyGroupOption
->
getGroup
(
)
)
)
;
}
public
function
groupByPropertyGroups
(
)
: PropertyGroupCollection
{
$groups
=
new
PropertyGroupCollection
(
)
;
foreach
(
$this
->
getIterator
(
)
as
$element
)
{
if
(
$groups
->
has
(
$element
->
getGroupId
(
)
)
)
{
$group
=
$groups
->
get
(
$element
->
getGroupId
(
)
)
;
}
{
}
/** * @throws InconsistentCriteriaIdsException */
public
function
load
(
SalesChannelProductEntity
$product
,
SalesChannelContext
$context
)
: PropertyGroupCollection
{
if
(
!
$product
->
getParentId
(
)
)
{
return
new
PropertyGroupCollection
(
)
;
}
$groups
=
$this
->
loadSettings
(
$product
,
$context
)
;
$groups
=
$this
->
sortSettings
(
$groups
,
$product
)
;
$combinations
=
$this
->combinationLoader->
loadCombinations
(
$product
->
getParentId
(
)
,
$context
,
)
;
public
function
getOptions
(
)
: PropertyGroupOptionCollection
{
return
new
PropertyGroupOptionCollection
(
$this
->
fmap
(
fn
(
ProductConfiguratorSettingEntity
$productConfigurator
)
=>
$productConfigurator
->
getOption
(
)
)
)
;
}
public
function
getGroupedOptions
(
)
: PropertyGroupCollection
{
$groups
=
new
PropertyGroupCollection
(
)
;
foreach
(
$this
->
getIterator
(
)
as
$element
)
{
if
(
!
$element
->
getOption
(
)
)
{
continue
;
}
if
(
$groups
->
has
(
$element
->
getOption
(
)
->
getGroupId
(
)
)
)
{
$group
=
$groups
->
get
(
$element
->
getOption
(
)
->
getGroupId
(
)
)
;
}
else
{
$group
= PropertyGroupEntity::
createFrom
(
$element
->
getOption
(
)
->
getGroup
(
)
??
new
PropertyGroupEntity
(
)
)
;
}
if
(
$category
=
$product
->
getSeoCategory
(
)
)
{
$request
->request->
set
(
'navigationId',
$category
->
getId
(
)
)
;
}
$page
=
$this
->genericLoader->
load
(
$request
,
$context
)
;
$page
= ProductPage::
createFrom
(
$page
)
;
$page
->
setProduct
(
$product
)
;
$page
->
setConfiguratorSettings
(
$result
->
getConfigurator
(
)
??
new
PropertyGroupCollection
(
)
)
;
$page
->
setNavigationId
(
$product
->
getId
(
)
)
;
if
(
!Feature::
isActive
(
'v6.6.0.0'
)
)
{
$this
->
loadDefaultAdditions
(
$product
,
$page
,
$request
,
$context
)
;
}
elseif
(
$cmsPage
=
$product
->
getCmsPage
(
)
)
{
$page
->
setCmsPage
(
$cmsPage
)
;
}
$this
->
loadOptions
(
$page
)
;
$this
->
loadMetaData
(
$page
)
;
private
function
getPropertyGroupAlphaNumericOnlyNumbers
(
)
: PropertyGroupCollection
{
$propertyGroup
=
new
PropertyGroupEntity
(
)
;
$propertyGroup
->
setId
(
Uuid::
randomHex
(
)
)
;
$propertyGroup
->
setName
(
'Alphanumeric only numbers'
)
;
$propertyGroup
->
setSortingType
(
PropertyGroupDefinition::SORTING_TYPE_ALPHANUMERIC
)
;
$propertyGroup
->
setDisplayType
(
PropertyGroupDefinition::DISPLAY_TYPE_TEXT
)
;
$propertyGroup
->
setPosition
(
1
)
;
$propertyGroup
->
setOptions
(
$this
->
getPropertyOptionsOnlyNumbers
(
)
)
;
return
new
PropertyGroupCollection
(
[
$propertyGroup
]
)
;
}
private
function
getPropertyGroupAlphaNumericNumbersFirstThenLetters
(
)
: PropertyGroupCollection
{
$propertyGroup
=
new
PropertyGroupEntity
(
)
;
$propertyGroup
->
setId
(
Uuid::
randomHex
(
)
)
;
$propertyGroup
->
setName
(
'Alphanumeric numbers first then letters'
)
;
$propertyGroup
->
setSortingType
(
PropertyGroupDefinition::SORTING_TYPE_ALPHANUMERIC
)
;
$propertyGroup
->
setDisplayType
(
PropertyGroupDefinition::DISPLAY_TYPE_TEXT
)
;
$propertyGroup
->
setPosition
(
1
)
;
$propertyGroup
->
setOptions
(
$this
->
getPropertyOptionsNumbersFirstThenLetters
(
)
)
;