Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
setIndexer example
$ids
=
$request
->request->
all
(
'ids'
)
;
if
(
empty
(
$ids
)
)
{
throw
new
BadRequestHttpException
(
'Parameter `ids` is no array or empty'
)
;
}
$skips
=
array_filter
(
explode
(
',',
(string)
$request
->headers->
get
(
PlatformRequest::HEADER_INDEXING_SKIP, ''
)
)
)
;
$message
=
new
ProductIndexingMessage
(
$ids
, null
)
;
$message
->
setIndexer
(
'product.indexer'
)
;
$message
->
addSkip
(
...
$skips
)
;
$this
->messageBus->
dispatch
(
$message
)
;
return
new
JsonResponse
(
null, Response::HTTP_NO_CONTENT
)
;
}
}
public
function
update
(
EntityWrittenContainerEvent
$event
)
: ?EntityIndexingMessage
{
$ids
=
$event
->
getPrimaryKeys
(
ProductStreamDefinition::ENTITY_NAME
)
;
if
(
empty
(
$ids
)
)
{
return
null;
}
foreach
(
$ids
as
$id
)
{
$message
=
new
ProductStreamMappingIndexingMessage
(
$id
)
;
$message
->
setIndexer
(
$this
->
getName
(
)
)
;
$this
->messageBus->
dispatch
(
$message
)
;
}
return
null;
}
/** * @param string[] $ids */
public
function
updateProducts
(
array
$ids
, Context
$context
)
: void
{
$message
=
new
ProductIndexingMessage
(
array_values
(
$updates
)
, null,
$event
->
getContext
(
)
)
;
$message
->
addSkip
(
self::INHERITANCE_UPDATER, self::STOCK_UPDATER
)
;
$delayed
= \
array_unique
(
\
array_filter
(
\
array_merge
(
$this
->
getParentIds
(
$updates
)
,
$this
->
getChildrenIds
(
$updates
)
)
)
)
;
foreach
(
\
array_chunk
(
$delayed
, 50
)
as
$chunk
)
{
$child
=
new
ProductIndexingMessage
(
$chunk
, null,
$event
->
getContext
(
)
)
;
$child
->
setIndexer
(
$this
->
getName
(
)
)
;
EntityIndexerRegistry::
addSkips
(
$child
,
$event
->
getContext
(
)
)
;
$this
->messageBus->
dispatch
(
$child
)
;
}
return
$message
;
}
public
function
getTotal
(
)
: int
{
return
$this
->
getIterator
(
null
)
->
fetchCount
(
)
;
}
if
(
\
count
(
$only
)
> 0 && !\
in_array
(
$indexer
->
getName
(
)
,
$only
, true
)
)
{
continue
;
}
$offset
= null;
$this
->dispatcher->
dispatch
(
new
ProgressStartedEvent
(
$indexer
->
getName
(
)
,
$indexer
->
getTotal
(
)
)
)
;
while
(
$message
=
$indexer
->
iterate
(
$offset
)
)
{
$message
->
setIndexer
(
$indexer
->
getName
(
)
)
;
$message
->
addSkip
(
...
$skip
)
;
$this
->
sendOrHandle
(
$message
,
$useQueue
)
;
$offset
=
$message
->
getOffset
(
)
;
try
{
$count
= \
is_array
(
$message
->
getData
(
)
)
? \
count
(
$message
->
getData
(
)
)
: 1;
$this
->dispatcher->
dispatch
(
new
ProgressAdvancedEvent
(
$count
)
)
;
}
catch
(
\Exception
)
{
}
}