Security update for Core, with self-updated composer
[yaffs-website] / vendor / symfony / serializer / Mapping / Loader / YamlFileLoader.php
index be2de7b6f1aff44555f6c06cd68002979b2c7880..e3afa4763271e693081947af0b4937b493a22c30 100644 (file)
@@ -38,26 +38,11 @@ class YamlFileLoader extends FileLoader
     public function loadClassMetadata(ClassMetadataInterface $classMetadata)
     {
         if (null === $this->classes) {
-            if (!stream_is_local($this->file)) {
-                throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
-            }
-
-            if (null === $this->yamlParser) {
-                $this->yamlParser = new Parser();
-            }
-
-            $classes = $this->yamlParser->parse(file_get_contents($this->file));
-
-            if (empty($classes)) {
-                return false;
-            }
-
-            // not an array
-            if (!is_array($classes)) {
-                throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
-            }
+            $this->classes = $this->getClassesFromYaml();
+        }
 
-            $this->classes = $classes;
+        if (!$this->classes) {
+            return false;
         }
 
         if (!isset($this->classes[$classMetadata->getName()])) {
@@ -90,9 +75,54 @@ class YamlFileLoader extends FileLoader
                         $attributeMetadata->addGroup($group);
                     }
                 }
+
+                if (isset($data['max_depth'])) {
+                    if (!is_int($data['max_depth'])) {
+                        throw new MappingException(sprintf('The "max_depth" value must be an integer in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
+                    }
+
+                    $attributeMetadata->setMaxDepth($data['max_depth']);
+                }
             }
         }
 
         return true;
     }
+
+    /**
+     * Return the names of the classes mapped in this file.
+     *
+     * @return string[] The classes names
+     */
+    public function getMappedClasses()
+    {
+        if (null === $this->classes) {
+            $this->classes = $this->getClassesFromYaml();
+        }
+
+        return array_keys($this->classes);
+    }
+
+    private function getClassesFromYaml()
+    {
+        if (!stream_is_local($this->file)) {
+            throw new MappingException(sprintf('This is not a local file "%s".', $this->file));
+        }
+
+        if (null === $this->yamlParser) {
+            $this->yamlParser = new Parser();
+        }
+
+        $classes = $this->yamlParser->parse(file_get_contents($this->file));
+
+        if (empty($classes)) {
+            return array();
+        }
+
+        if (!is_array($classes)) {
+            throw new MappingException(sprintf('The file "%s" must contain a YAML array.', $this->file));
+        }
+
+        return $classes;
+    }
 }