diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php index a01d93c..7f2dc0c 100644 --- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php +++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php @@ -357,6 +357,16 @@ protected function preSave(array &$link, array $original) { $link[$name] = $default; } } + + if (isset($link['title'])) { + $link['title_serialized'] = $link['title']; + unset($link['title']); + } + if (isset($link['description'])) { + $link['description_serialized'] = $link['description']; + unset($link['description']); + } + $fields = array_intersect_key($link, $schema_fields); // Sort the route parameters so that the query string will be the same. asort($fields['route_parameters']); @@ -364,13 +374,6 @@ protected function preSave(array &$link, array $original) { // text field. $fields['route_param_key'] = $fields['route_parameters'] ? UrlHelper::buildQuery($fields['route_parameters']) : ''; - if (isset($fields['title'])) { - $fields['title_serialized'] = $fields['title']; - unset($fields['title']); - $fields['description_serialized'] = $fields['description']; - unset($fields['description']); - } - foreach ($this->serializedFields() as $name) { if (isset($fields[$name])) { $fields[$name] = serialize($fields[$name]); @@ -630,14 +633,11 @@ protected function prepareLink(array $link, $intersect = FALSE) { $link[$name] = unserialize($link[$name]); } } - if (isset($link['title_serialized'])) { $link['title'] = $link['title_serialized']; - unset($link['title_serialized']); } if (isset($link['description_serialized'])) { $link['description'] = $link['description_serialized']; - unset($link['description_serialized']); } if ($intersect) { @@ -652,7 +652,7 @@ protected function prepareLink(array $link, $intersect = FALSE) { */ public function loadByProperties(array $properties) { $query = $this->connection->select($this->table, $this->options); - $query->fields($this->table, $this->definitionFields()); + $query->fields($this->table, $this->definitionFields(TRUE)); foreach ($properties as $name => $value) { if (!in_array($name, $this->definitionFields(), TRUE)) { $fields = implode(', ', $this->definitionFields()); @@ -679,7 +679,7 @@ public function loadByRoute($route_name, array $route_parameters = array(), $men // in place of system path. https://www.drupal.org/node/2302139 $param_key = $route_parameters ? UrlHelper::buildQuery($route_parameters) : ''; $query = $this->connection->select($this->table, $this->options); - $query->fields($this->table, $this->definitionFields()); + $query->fields($this->table, $this->definitionFields(TRUE)); $query->condition('route_name', $route_name); $query->condition('route_param_key', $param_key); if ($menu_name) { @@ -704,7 +704,7 @@ public function loadMultiple(array $ids) { if ($missing_ids) { $query = $this->connection->select($this->table, $this->options); - $query->fields($this->table, $this->definitionFields()); + $query->fields($this->table, $this->definitionFields(TRUE)); $query->condition('id', $missing_ids, 'IN'); $loaded = $this->safeExecuteSelect($query)->fetchAllAssoc('id', \PDO::FETCH_ASSOC); foreach ($loaded as $id => $link) { @@ -947,7 +947,7 @@ protected function loadLinks($menu_name, MenuTreeParameters $parameters) { // Add custom query conditions, if any were passed. if (!empty($parameters->conditions)) { // Only allow conditions that are testing definition fields. - $parameters->conditions = array_intersect_key($parameters->conditions, array_flip($this->definitionFields())); + $parameters->conditions = array_intersect_key($parameters->conditions, array_flip($this->definitionFields(TRUE))); $serialized = array_flip($this->serializedFields()); foreach ($parameters->conditions as $column => $value) { if (is_array($value)) { @@ -1202,8 +1202,18 @@ protected function serializedFields() { * @return array * The list of the subset of fields that are part of the plugin definition. */ - protected function definitionFields() { - return $this->definitionFields; + protected function definitionFields($db_fields = FALSE) { + $fields = $this->definitionFields; + + if ($db_fields) { + $fields = array_flip($fields); + unset($fields['title'], $fields['description']); + $fields = array_flip($fields); + $fields[] = 'title_serialized'; + $fields[] = 'description_serialized'; + } + + return $fields; } /**