Skip to content
Snippets Groups Projects

Issue #3171371: Add filters for menu tree parameters

13 files
+ 1274
35
Compare changes
  • Side-by-side
  • Inline
Files
13
@@ -48,8 +48,10 @@ final class MenuItemsResource extends ResourceBase {
@@ -48,8 +48,10 @@ final class MenuItemsResource extends ResourceBase {
$cacheability->addCacheableDependency($menu);
$cacheability->addCacheableDependency($menu);
$parameters = new MenuTreeParameters();
$parameters = new MenuTreeParameters();
 
if ($request->query->has('filter')) {
 
$parameters = $this->applyFiltersToParams($request, $parameters);
 
}
$parameters->onlyEnabledLinks();
$parameters->onlyEnabledLinks();
$parameters->setMinDepth(0);
$menu_tree = \Drupal::menuTree();
$menu_tree = \Drupal::menuTree();
$tree = $menu_tree->load($menu->id(), $parameters);
$tree = $menu_tree->load($menu->id(), $parameters);
@@ -92,6 +94,50 @@ final class MenuItemsResource extends ResourceBase {
@@ -92,6 +94,50 @@ final class MenuItemsResource extends ResourceBase {
return $resource_types;
return $resource_types;
}
}
 
/**
 
* Apply filters to the menu parameters.
 
*
 
* @param \Symfony\Component\HttpFoundation\Request $request
 
* The request.
 
* @param \Drupal\Core\Menu\MenuTreeParameters $parameters
 
* The cache metadata.
 
*
 
* @return \Drupal\Core\Menu\MenuTreeParameters
 
* The Menu Tree Parameters object.
 
*/
 
protected function applyFiltersToParams(Request $request, MenuTreeParameters $parameters) {
 
$filter = $request->query->get('filter');
 
 
if (!empty($filter['min_depth'])) {
 
$parameters->setMinDepth((int) $filter['min_depth']);
 
}
 
 
if (!empty($filter['max_depth'])) {
 
$parameters->setMaxDepth((int) $filter['max_depth']);
 
}
 
 
if (!empty($filter['parent'])) {
 
$parameters->setRoot($filter['parent']);
 
$parameters->excludeRoot();
 
}
 
 
if (!empty($filter['parents'])) {
 
$parents = explode(',', preg_replace("/\s+/", "", $filter['parents']));
 
$parameters->addExpandedParents($parents);
 
}
 
 
if (!empty($filter['conditions']) && is_array($filter['conditions'])) {
 
$condition_fields = array_keys($filter['conditions']);
 
foreach ($condition_fields as $definition_field) {
 
$value = !empty($filter['conditions'][$definition_field]['value']) ? $filter['conditions'][$definition_field]['value'] : '';
 
$operator = !empty($filter['conditions'][$definition_field]['operator']) ? $filter['conditions'][$definition_field]['operator'] : '=';
 
$parameters->addCondition($definition_field, $value, $operator);
 
}
 
}
 
 
return $parameters;
 
}
 
/**
/**
* Generate the menu items.
* Generate the menu items.
*
*
Loading