private function getListBuilder(Request $request, array $fieldDescriptors, $ids, $types)
{
$restHelper = $this->get('sulu_core.doctrine_rest_helper');
$factory = $this->get('sulu_core.doctrine_list_builder_factory');
$listBuilder = $factory->create($this->getParameter('sulu.model.media.class'));
$restHelper->initializeListBuilder($listBuilder, $fieldDescriptors);
// default sort by created
if (!$request->get('sortBy')) {
$listBuilder->sort($fieldDescriptors['created'], 'desc');
}
$collectionId = $request->get('collection');
if ($collectionId) {
$collectionType = $this->getCollectionRepository()->findCollectionTypeById($collectionId);
if ($collectionType === SystemCollectionManagerInterface::COLLECTION_TYPE) {
$this->getSecurityChecker()->checkPermission('sulu.media.system_collections', PermissionTypes::VIEW);
}
$listBuilder->addSelectField($fieldDescriptors['collection']);
$listBuilder->where($fieldDescriptors['collection'], $collectionId);
}
// If no limit is set in request and limit is set by ids
$requestLimit = $request->get('limit');
$idsCount = count($ids);
if ($idsCount > 0) {
// correct request limit if more ids are requested
if (!$requestLimit && $idsCount > $listBuilder->getLimit()) {
$listBuilder->limit($idsCount);
}
$listBuilder->in($fieldDescriptors['id'], $ids);
}
// set the types
if (count($types)) {
$listBuilder->in($fieldDescriptors['type'], $types);
}
if (!$this->getSecurityChecker()->hasPermission('sulu.media.system_collections', PermissionTypes::VIEW)) {
$systemCollection = $this->getCollectionRepository()->findCollectionByKey(SystemCollectionManagerInterface::COLLECTION_KEY);
$lftExpression = $listBuilder->createWhereExpression($fieldDescriptors['lft'], $systemCollection->getLft(), ListBuilderInterface::WHERE_COMPARATOR_LESS);
$rgtExpression = $listBuilder->createWhereExpression($fieldDescriptors['rgt'], $systemCollection->getRgt(), ListBuilderInterface::WHERE_COMPARATOR_GREATER);
$listBuilder->addExpression($listBuilder->createOrExpression([$lftExpression, $rgtExpression]));
}
// field which will be needed afterwards to generate route
$listBuilder->addSelectField($fieldDescriptors['version']);
$listBuilder->addSelectField($fieldDescriptors['subVersion']);
$listBuilder->addSelectField($fieldDescriptors['name']);
$listBuilder->addSelectField($fieldDescriptors['locale']);
$listBuilder->addSelectField($fieldDescriptors['mimeType']);
$listBuilder->addSelectField($fieldDescriptors['storageOptions']);
$listBuilder->addSelectField($fieldDescriptors['id']);
$listBuilder->addSelectField($fieldDescriptors['collection']);
return $listBuilder;
}