/**
  * {@inheritDoc}
  */
 public function isListedPropertyCheck(PropertyMetadata $property, Context $navigatorContext)
 {
     if (empty($this->fields)) {
         return false;
     }
     $name = $property->serializedName ?: $property->name;
     switch (true) {
         case $property->type["name"] == "ArrayCollection":
             $this->classFields[$property->type["params"][0]["name"]] = $navigatorContext->getDepth() == 1 ? $name : $this->classFields[$property->class] . "." . $name;
             break;
         case strpos($property->type["name"], "\\"):
             $this->classFields[$property->type["name"]] = $navigatorContext->getDepth() == 1 ? $name : $this->classFields[$property->class] . "." . $name;
             break;
         default:
             break;
     }
     $data = $this->fields;
     if ($navigatorContext->getDepth() > 1) {
         $prefix = $this->classFields[$property->class];
         $prefix_parts = explode(".", $prefix);
         foreach ($prefix_parts as $part) {
             $data = isset($data[$part]) ? $data[$part] : [];
         }
     }
     return isset($data[$name]);
 }
 private function isTooDeep(Context $context)
 {
     $depth = $context->getDepth();
     $groups = $context->attributes->get('groups')->get();
     $metadataStack = $context->getMetadataStack();
     $nthProperty = 0;
     // iterate from the first added items to the lasts
     for ($i = $metadataStack->count() - 1; $i > 0; $i--) {
         $metadata = $metadataStack[$i];
         if ($metadata instanceof PropertyMetadata) {
             $maxDepth = null;
             if ($metadata->maxDepth) {
                 if (!is_array($metadata->maxDepth)) {
                     $maxDepth = (int) $metadata->maxDepth;
                 } else {
                     foreach ($groups as $group) {
                         if (array_key_exists($group, $metadata->maxDepth) && $metadata->maxDepth[$group] > $maxDepth) {
                             $maxDepth = $metadata->maxDepth[$group];
                         }
                     }
                 }
             }
             $nthProperty++;
             $relativeDepth = $depth - $nthProperty;
             if (null !== $maxDepth && $relativeDepth > $maxDepth) {
                 return true;
             }
         }
     }
     return false;
 }
 /**
  * {@inheritDoc}
  */
 public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext)
 {
     if (empty($this->fields)) {
         return false;
     }
     $name = $property->serializedName ?: $property->name;
     $this->trackDepth($name, $navigatorContext->getDepth());
     return !in_array($name, $this->getFields());
 }
 /**
  * {@inheritDoc}
  */
 public function shouldSkipProperty(PropertyMetadata $property, Context $navigatorContext)
 {
     $name = $property->serializedName ?: $property->name;
     if (!in_array($name, $this->fields)) {
         return false;
     }
     if ($navigatorContext->getDepth() == 1) {
         return false;
     }
     return true;
 }
Esempio n. 5
0
 private function isTooDeep(Context $context)
 {
     $depth = $context->getDepth();
     $metadataStack = $context->getMetadataStack();
     $nthProperty = 0;
     // iterate from the first added items to the lasts
     for ($i = $metadataStack->count() - 1; $i > 0; $i--) {
         $metadata = $metadataStack[$i];
         if ($metadata instanceof PropertyMetadata) {
             $nthProperty++;
             $relativeDepth = $depth - $nthProperty;
             if (null !== $metadata->maxDepth && $relativeDepth > $metadata->maxDepth) {
                 return true;
             }
         }
     }
     return false;
 }